¿Cuánto costaría recuperar cursos y progreso tras una corrupción de la base de datos o una migración fallida? Los responsables técnicos y gestores de academias WordPress afrontan pérdida de contenidos, metadatos de alumnos y horas de trabajo si las copias no incluyen las tablas y meta del plugin LMS; se necesita una estrategia que garantice integridad y tiempos de recuperación predecibles.
Backup para LMS y cursos: la protección pasa por copias completas de archivos, subidas y la base de datos (incluidas tablas y metadatos del plugin LMS). Configurar backups automáticos e incrementales a almacenamiento externo, probar restauraciones periódicas y aplicar retención y cifrado por GDPR evita pérdida de progreso, datos de alumnos y reduce el tiempo de recuperación. Conviene mapear tablas críticas (LearnPress/LearnDash/TutorLMS) y automatizar verificaciones.
Resumen del proceso
El proceso completo cubre identificación, exportación, programación y restauración verificada. Cada paso reduce pérdida de progreso y tiempo de recuperación.
Identificar datos críticos
Identificar tablas, postmeta y ficheros del LMS antes de hacer cualquier copia. Esto evita perder inscripciones, progresos y calificaciones.
Exportar y cifrar
Exportar la base de datos completa y tablas LMS específicas, y cifrar los archivos antes de enviarlos offsite. Mantener copias en la UE cuando haya datos personales.
Restaurar en staging
Restaurar siempre en un entorno de pruebas y verificar integridad de cursos y usuarios. Validar progreso de alumnos y quizzes antes de abrir en producción.
Para un RTO orientativo: RTO ≤ 4 horas y RPO ≤ 1 hora para academias con actividad continua; retención sugerida: 30/90/365 días según riesgo y requisitos legales.
Infografía del flujo de pasos
Paso 1
Mapear tablas y assets
Paso 2
Backups automáticos e incrementales
Paso 3
Restaurar en staging y verificar
Almacenamiento UE (S3/GCS) → Cifrado KMS → Transferencia segura (SFTP/TLS) → Almacenamiento UE (S3/GCS) → Cifrado KMS. Utilice los mecanismos de transferencia adecuados para cada destino: para S3/GCS lo normal es utilizar las APIs/SDKs o herramientas oficiales (awscli, gsutil) sobre HTTPS/TLS y habilitar el cifrado del lado del servidor o KMS; si dispone de un gateway SFTP que acepte subidas y las reenvíe a un bucket, documente ese componente intermedio y mantenga TLS y controles de acceso estrictos. Evite asumir que SFTP es el método directo para object storage sin un gateway compatible.
Paso 1: identificar y exportar datos críticos
Identificar tablas y ficheros evita pérdidas de progreso al restaurar. La lista no es opcional; es necesaria para cursos con usuarios activos.
Tablas core y CPTs
La base de datos core incluye wp_posts, wp_postmeta, wp_users y wp_usermeta. Muchos LMS usan CPTs dentro de wp_posts para cursos y lecciones.
Tablas propias del LMS
LearnDash, LearnPress y TutorLMS crean tablas propias o usan metadatos. Identificar esas tablas asegura que el progreso y las inscripciones se conserven.
Un error frecuente en este punto es asumir que exportar solo wp_posts salva todo el LMS. Eso provoca pérdida de promedios, notas y datos de usuarios.
Mapeo por LMS
LearnDash guarda cursos como CPTs con postmeta que comienza por sfwd-. LearnPress crea tablas wp_learnpress con registros de progreso. TutorLMS suele usar wp_tutor_ para cursos y matrículas.
Cómo detectar tablas con SQL
SELECT table_name FROM information_schema.tables WHERE table_schema = 'tu_bd' AND (table_name LIKE '%learn%' OR table_name LIKE '%tutor%' OR table_name LIKE '%sfwd%');
wp db query "SELECT meta_key, COUNT() FROM wp_postmeta GROUP BY meta_key ORDER BY COUNT() DESC;" ayuda a localizar metadatos críticos.
Para respaldos técnicos fiables de un LMS conviene un inventario explícito de tablas y meta_keys además de los ficheros. A nivel general siempre incluya: wp_posts (con post_type relacionados con cursos, lecciones, quizzes y certificados), wp_postmeta (meta_keys como los que empiezan por sfwd- en LearnDash), wp_users y wp_usermeta. Además de las tablas core, identifique y exporte las tablas custom creadas por el LMS: por ejemplo, LearnDash suele crear tablas de actividad de usuario (p. ej. wp_learndash_user_activity y tablas relacionadas con metadatos de actividad), LearnPress usa prefijos wp_learnpress (items, user_items, user_itemmeta) y TutorLMS crea tablas con prefijo wp_tutor_ para cursos, matrículas y respuestas a quizzes.
No olvide archivos: wp-content/uploads (medios del curso), certificados en PDF, paquetes SCORM/xAPI si los hubiera, y cualquier carpeta de plugins que aloje contenidos (ej.: /wp-content/plugins/tutor/assets/uploads). Finalmente documente los meta_keys críticos (ej.: _sfwd-* para LearnDash, claves de progreso de LearnPress) y use queries sobre information_schema o wp db query para listarlos antes de automatizar exportaciones.
Paso 2: configurar backups automáticos y almacenamiento
Combinar backups completos y backups incrementales reduce espacio y mejora RPO. La estrategia elegida debe documentarse y probarse.
Modelo recomendado de retención
Full semanal y incrementales cada 1 a 6 horas según actividad. Mantener diarios 30 días, semanales 12 semanas, mensuales 12 meses como punto de partida.
Destinos y cifrado
Usar buckets en la UE como AWS eu-west-1 o GCP europe-west. Cifrar en tránsito con TLS y en reposo con KMS o GPG.
En entornos de pruebas internas se ha observado que aplicar versionado de objetos junto con verificación de checksums y replicación reduce de forma apreciable los incidentes de corrupción en copias; el impacto exacto varía según configuración, frecuencias de backup y políticas de verificación, por lo que conviene medir la tasa de fallos en su propio entorno y registrar métricas antes/después de implementar versionado.
Transferencia y permisos
Transferir con SFTP o rsync sobre SSH y aplicar políticas IAM mínimas. Rotar claves y controlar accesos mediante roles.
Automatización y verificación
Programar tareas que hagan backup, verifiquen checksums y envíen informes por correo. Un cronjob que falle sin alertar equivale a no tener backup.

Paso 3: restaurar cursos y verificar integridad
Restaurar en staging evita interrupciones en producción y permite validar datos. La restauración correcta sigue un orden lógico.
Orden recomendado de restauración
Restaurar archivos de wp-content, luego wp_users/wp_usermeta, después wp_posts/wp_postmeta y finalmente tablas custom del LMS. Seguir este orden minimiza inconsistencias.
Comandos y ejemplos
Exportar tabla específica con mysqldump:
bash
mysqldump -u dbuser -p dbname wp_posts --where="post_type='sfwd-courses'" > ld_courses.sql
WP-CLI para cambiar URLs sin romper serializados:
bash
wp search-replace 'https://antiguo' 'https://nuevo' --skip-columns=guid --recurse-objects --precise
Verificaciones post-restauración
Abrir cursos y revisar lecciones, quizzes y certificados. Comprobar progreso de tres usuarios de prueba y ejecutar CHECK TABLE en tablas críticas.
Un caso habitual: al restaurar, los quizzes pierden referencias a imágenes porque las rutas en postmeta estaban serializadas y se reemplazaron con herramientas simples. La consecuencia es fallo en renderizado.
Manejo de serialización
Evitar sed o replace directos en SQL. Usar WP-CLI o herramientas que respeten objetos serializados y arrays PHP.
Un procedimiento reproducible para restaurar uno o varios cursos debe ser paso a paso y probado:
- primero, clonar el entorno de staging e importar un backup completo del filesystem (wp-content/uploads, plugins y temas) a ese staging
- segundo, restaurar usuarios (wp_users y wp_usermeta) para preservar IDs y roles
- tercero, importar wp_posts y wp_postmeta solo para los post_type del curso (por ejemplo post_type='sfwd-courses' y sus lecciones/quizzes) mediante mysqldump --where o con WP-CLI export/import, cuidando de preservar IDs si las relaciones las referencian
- cuarto, importar las tablas custom del LMS (ej. Tablas de progreso o user_items) en el mismo orden en que dependen unas de otras
- quinto, ejecutar wp search-replace con WP-CLI para arreglar URLs y conservar serializaciones
- sexto, ejecutar comprobaciones: CHECK TABLE en las tablas importadas, abrir la página del curso, matricular 1–3 usuarios de prueba y completar un flujo (lección → quiz → certificado), verificar que puntuaciones, intentos y certificados coincidan con el backup
Anote errores y compare checksums de archivos multimedia y de dumps SQL para confirmar integridad antes de promover a producción.
Errores que arruinan el resultado
Confiar solo en copias de archivos deja fuera las tablas LMS y elimina progreso. Esa omisión provoca pérdida irreversible de calificaciones.
No verificar restauraciones en staging conduce a sorpresas en producción. Asumir que un backup es válido sin test aumenta el tiempo de recuperación.
Almacenar backups en el mismo servidor sin offsite expone a ransomware. Mantener un offsite en la UE o con SCCs es prudente.
Compatibilidad entre plugins de backup y LMS
No todos los plugins exportan tablas custom o preservan serialización. Verificar compatibilidad antes de confiar en un servicio.
Tabla comparativa de plugins
| Plugin |
Export selectivo |
Serialización |
Destinos UE |
Incremental |
| UpdraftPlus (Premium) |
Sí |
Buena |
S3/GCS/Azure |
Sí |
| All-in-One WP Migration |
Limitada |
Variable |
Plugins de pago |
No |
| Duplicator |
Completo |
Limitada |
Manual |
No |
| BlogVault / WP Time Capsule |
Sí |
Buena |
S3/Propios |
Sí |
Problemas concretos
Algunos plugins no listan tablas custom y dejan fuera user_items de LearnPress. Detectarlo antes evita restauraciones incompletas.
Comprobar que el plugin preserve serialización y permita restauración selectiva de tablas y archivos.
Scripts y ejemplos prácticos
Incluir scripts reproducibles ayuda a auditar backups y a automatizar exportaciones. Los ejemplos permiten adaptarlos al prefijo de tabla.
Script bash básico
bash
DB_USER="dbuser"
DB_PASS="dbpass"
DB_NAME="dbname"
OUT_DIR="/backups/$(date +%F)"
mkdir -p $OUT_DIR
TABLES=(wp_posts wp_postmeta wp_users wp_usermeta wp_learnpress_items wp_learnpress_user_items)
for t in "${TABLES[@]}"; do
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME $t > $OUT_DIR/$t.sql
done
tar -czf $OUT_DIR/uploads.tar.gz /var/www/html/wp-content/uploads
aws s3 cp $OUT_DIR s3://mi-bucket-backups/ --recursive --storage-class STANDARD
Usar WP-CLI para exportar postmeta específicos:
bash
wp db query "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE meta_key LIKE '%sfwd%';" --skip-column-names > sfwd_meta.csv
Además del mysqldump básico, es útil generar un export JSON que represente la estructura de un curso para importadores o auditoría. Ejemplo de comando de exportación SQL para un curso LearnDash: mysqldump -u dbuser -p dbname wp_posts --where="post_type IN ('sfwd-courses','sfwd-lessons','sfwd-topic','sfwd-quiz') AND ID IN (SELECT ID FROM wp_posts WHERE post_type='sfwd-courses' AND post_name='slug-del-curso')" > curso_posts.sql; y para postmeta: mysqldump ... wp_postmeta --where="post_id IN (LISTA_DE_IDS)" > curso_postmeta.sql. Como alternativa JSON mínimo para un curso (esquema ilustrativo): { "course": { "post": {"post_title":"Título","post_content":"...","ID":123 }, "postmeta": [{"meta_key":"_sfwd-courses","meta_value":"..."}], "lessons": [{"post":{...}, "postmeta":[...]}], "quizzes": [{"post":{...}, "questions":[{...}]}], "user_progress":[{"user_id":45,"status":"completed","score":92}] }.
Para reimportar se puede usar un script PHP/Python que inserte wp_posts/wp_postmeta y las tablas custom respetando IDs y serialized values, o reconstruir posts con WP-CLI (wp post create) y añadir postmeta con wp post meta add; al final ejecute wp search-replace para ajustar rutas y verifique CHECK TABLE y la experiencia práctica con usuarios de prueba.
GDPR y consideraciones legales
Tratar backups como datos personales obliga a controles de acceso, cifrado y políticas de retención. La normativa RGPD data de 2016 y sigue vigente.
Almacenamiento fuera de la UE
Evitarlo salvo que exista SCCs o medidas adecuadas de transferencia. Documentar el Transfer Impact Assessment para proveedores no europeos.
Para información práctica sobre GDPR y medidas técnicas, consultar gdpr.eu.
Medidas técnicas y organizativas
Cifrado en reposo con KMS y cifrado de cliente para backups críticos. Pseudonimizar datos en entornos de desarrollo para evitar exposición.
Retención y eliminación
Definir políticas que permitan purgar backups antiguos de forma trazable. Registrar accesos y restauraciones para auditoría.
Checklist pre-migración y pruebas post-migración
Tener una checklist evita sorpresas durante migraciones y restauraciones. El checklist debe ser específico para LMS y verificable.
Items imprescindibles antes de migrar
Backup full de archivos y BD, export de tablas LMS, listado de versiones de PHP/MySQL y plan de rollback documentado.
Pruebas mínimas en staging
Matricular un alumno de prueba, completar un curso, hacer un quiz y validar certificado. Verificar emails y webhooks.
Registro de resultados
Mantener un registro con ID de backup, ubicación, checksum y responsable técnico. Esto acelera auditorías y reclamaciones.
Opinión técnica y matiz práctico
Una política de backups que funcione bien combina backups completos regulares con incrementales muy frecuentes y pruebas periódicas de restauración; funciona bien, pero solo si se prueba en staging y se verifica la integridad de metadatos serializados, porque muchos fallos en restauración provienen de reemplazos mal hechos de URLs.
Cuando no aplicar este método / alternativas
No aplica si el LMS está fuera de WordPress en un servicio SaaS que ya incluye backups con RTO/RPO contractuales, o si la web es informativa sin usuarios ni progreso almacenado. En esos casos conviene revisar el contrato del proveedor y su auditoría de backups.
Para una auditoría de backups y pruebas de restauración en staging se ofrece un servicio de puesta en marcha y verificación que incluye export de tablas LMS y configuración de offsite en la UE dentro de un plazo acordado.
Preguntas frecuentes
¿Qué tablas debo respaldar para LearnDash?
Las tablas obligatorias son wp_posts con post_type 'sfwd-' y wp_postmeta con claves _sfwd-. También exportar wp_users y wp_usermeta para mantener usuarios y progresos.
¿Basta con copiar wp-content para salvar cursos?
No basta. Copiar solo wp-content omite tablas y metadatos críticos que almacenan progreso y calificaciones. La base de datos completa es imprescindible.
¿Con qué frecuencia programar backups?
Programar incrementales cada 1 a 6 horas y un full semanal para la mayoría de academias. Ajustar según actividad y RPO deseado.
¿Cómo evitar problemas de serialización al reemplazar URLs?
Usar WP-CLI o herramientas que respeten objetos serializados. Evitar sustituciones directas con sed o replace en SQL.
¿Puedo almacenar backups en servicios no europeos?
Se puede, pero requiere SCCs y evaluación de impacto. Guardar en la UE simplifica cumplimiento y reduce riesgos legales.
¿Cómo probar que un backup es válido?
Restaurar en staging, abrir cursos, revisar lecciones, quizzes y progreso de usuarios. Comprobar checksums y logs de error.
¿Qué plugins son recomendables para LMS grandes?
Plugins con export selectivo y soporte incremental como UpdraftPlus (versión premium) o servicios como BlogVault suelen funcionar mejor para sitios con mucho tráfico y activos multimedia.
Síntesis y recomendación final
La recomendación es clara: exportar la base de datos completa y las tablas específicas del LMS, copiar wp-content y almacenar copias cifradas offsite en la UE. Probar restauraciones en staging y mantener retención documentada para cumplir requisitos legales.
El siguiente paso práctico para el responsable técnico es ejecutar un mysqldump de la BD completa, listar tablas que contengan 'sfwd', 'learnpress' o 'tutor' y configurar subida automática a un bucket europeo.