Cómo hacer una copia de seguridad de una base de datos MySQL en cPanel con cron
¿Por qué necesitas automatizar el backup de tu base de datos MySQL?
Si tienes una web con WordPress, una tienda online o cualquier aplicación que use MySQL, sabrás que los datos son lo más valioso que tienes. Un error humano, un ataque informático o un fallo del servidor pueden borrar meses de trabajo en segundos. Por eso, hacer copias de seguridad manuales es una buena práctica, pero automatizarlas es la única forma de garantizar que siempre tendrás una versión reciente de tus datos.
En este artículo te voy a enseñar, paso a paso, cómo configurar un backup mysql cpanel cron para que tu servidor genere copias de seguridad automáticas de tu base de datos sin que tengas que acordarte de hacerlo tú. Es un proceso sencillo, gratuito y que te dará una tranquilidad enorme.
¿Qué es un cron job y por qué es perfecto para tus backups?
Un cron job (o tarea programada) es un servicio que tienen los servidores Linux para ejecutar comandos o scripts en un horario determinado. Piensa en ello como un despertador: tú le dices "ejecuta esto todos los días a las 3 de la madrugada" y el sistema lo hace solo, sin intervención humana.
Para nuestro caso, vamos a usar un cron job para lanzar el comando mysqldump, que es la herramienta oficial de MySQL para exportar bases de datos completas. La combinación de cron + mysqldump es la solución más robusta, ligera y fiable para automatizar backup mysql.
Requisitos previos antes de empezar
Antes de liarte con el código, asegúrate de tener esto a mano:
- Acceso a cPanel de tu hosting (normalmente es
tudominio.com/cpanel). - Nombre de la base de datos que quieres respaldar (lo verás en "Bases de Datos MySQL").
- Usuario de la base de datos y su contraseña (el que usas para conectarte a la BD).
- Un directorio donde guardar los backups. Lo ideal es que sea fuera de
public_html, por ejemplo/home/tuusuario/backups, para que no sea accesible desde internet.
[INFO] Si tu hosting usa Syspanel (antes conocido como HestiaCP), el acceso es por el puerto 2106 (ejemplo:
tudominio.com:2106). El concepto es el mismo, pero la interfaz cambia ligeramente.
Paso 1: Crear el directorio para los backups
Lo primero es tener un lugar seguro donde almacenar las copias. En cPanel, entra en Administrador de archivos y navega hasta la carpeta raíz de tu cuenta (normalmente /home/tuusuario).
Crea una carpeta llamada backups. Dentro de ella, puedes crear subcarpetas por día si quieres, pero de momento una sola carpeta nos vale.
[WARNING] Nunca guardes los backups dentro de
public_html. Si alguien adivina la URL, podría descargarse tu base de datos entera. Siempre fuera del directorio público.
Paso 2: Localizar las credenciales de MySQL
Para poder hacer el backup, necesitas el usuario y la contraseña de la base de datos. En cPanel, ve a Bases de Datos MySQL y anota:
- El nombre completo de la BD (suele tener un prefijo con tu usuario, ejemplo:
usuariox_bdtienda). - El usuario asignado a esa BD.
- Si no recuerdas la contraseña, puedes cambiarla desde ahí mismo, pero ten en cuenta que si la cambias, tendrás que actualizarla también en tu aplicación (por ejemplo, en el
wp-config.phpde WordPress).
Paso 3: Crear un script de backup (la clave del asunto)
Aunque podríamos ejecutar el comando mysqldump directamente desde el cron job, es mucho más limpio y flexible crear un pequeño script que haga varias cosas:
- Hacer el volcado de la base de datos.
- Comprimir el archivo (para que ocupe menos).
- Eliminar backups antiguos (para no llenar el disco).
Vamos a crear un archivo llamado backup_db.sh en la carpeta backups que creamos antes. Desde el Administrador de archivos, crea un nuevo archivo y pega este contenido:
#!/bin/bash
# Configuración
DB_NAME="tu_base_de_datos"
DB_USER="tu_usuario"
DB_PASS="tu_contraseña"
BACKUP_DIR="/home/tuusuario/backups"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# Crear el backup
mysqldump --opt --user=$DB_USER --password=$DB_PASS $DB_NAME > $BACKUP_DIR/backup_$DATE.sql
# Comprimir
gzip $BACKUP_DIR/backup_$DATE.sql
# Eliminar backups de más de 7 días
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete
echo "Backup completado: $BACKUP_DIR/backup_$DATE.sql.gz"
Explicación línea por línea:
DB_NAME,DB_USER,DB_PASS: son tus datos de conexión. Rellénalos con los que anotaste en el paso 2.BACKUP_DIR: la ruta absoluta de tu carpeta de backups.DATE: genera una marca de tiempo para que cada backup tenga un nombre único.mysqldump: exporta la BD a un archivo.sql.gzip: comprime el archivo para que ocupe hasta un 90% menos.find ... -mtime +7 -delete: borra automáticamente los backups que tengan más de 7 días. Así no se acumulan cientos de archivos.
[TIP] Si tu hosting no permite guardar la contraseña en el script por seguridad, puedes crear un archivo
.my.cnfen tu carpeta home con las credenciales y luego usarmysqldump --defaults-extra-file=/home/tuusuario/.my.cnf $DB_NAME. Pero para la mayoría de casos, el script simple funciona perfecto.
Paso 4: Dar permisos de ejecución al script
Los scripts en Linux necesitan permisos de ejecución. En el Administrador de archivos de cPanel, selecciona el archivo backup_db.sh, haz clic en Permisos y establece 0755. Esto significa que el propietario puede leer y ejecutar, y los demás solo leer.
También puedes hacerlo por línea de comandos si tienes acceso SSH, pero con cPanel es suficiente.
Paso 5: Configurar el cron job en cPanel
Ahora viene la parte divertida. En cPanel, busca la sección Tareas Cron (a veces aparece como "Cron Jobs" o "Trabajos programados").
- Haz clic en Nueva tarea cron.
- En Comando, escribe:
bash /home/tuusuario/backups/backup_db.sh
- En la configuración de frecuencia, elige cuándo quieres que se ejecute. La opción más común para backups es diario a las 3:00 AM, porque es cuando menos tráfico hay en el servidor.
Para eso, en los campos de tiempo:
- Minuto:
0 - Hora:
3 - Día del mes:
* - Mes:
* - Día de la semana:
*
- Haz clic en Guardar o Añadir tarea cron.
[INFO] Si tu hosting usa Syspanel (puerto 2106), la sección se llama "Tareas programadas" y la sintaxis es la misma. Solo cambia el nombre del panel, pero la lógica es idéntica.
Paso 6: Probar que todo funciona
No te fíes de que "debería funcionar". Vamos a comprobarlo.
- Ejecuta el script manualmente desde el Administrador de archivos o por SSH:
bash /home/tuusuario/backups/backup_db.sh
- Revisa la carpeta
backupsy verás un archivobackup_fecha_hora.sql.gz. - Descarga ese archivo y ábrelo con un editor de texto. Deberías ver sentencias SQL como
CREATE TABLEyINSERT INTO.
Si todo sale bien, ya tienes tu cron job backup cpanel funcionando.
Paso 7: Configurar la retención de backups (opcional pero recomendado)
En el script ya incluimos la línea que borra backups de más de 7 días. Pero si quieres guardar más tiempo, cambia el número en -mtime +7 por +15 o +30. Ten en cuenta que cada backup puede pesar varios MB, así que no te pases o llenarás el disco.
También puedes enviar los backups a un servicio externo como Google Drive o Dropbox, pero eso ya es un nivel avanzado que requiere instalar herramientas como rclone. Para empezar, tenerlos en el servidor es suficiente.
Errores comunes y cómo solucionarlos
"Access denied" al ejecutar mysqldump
Esto significa que el usuario o la contraseña son incorrectos. Revisa que en el script no haya espacios extra y que el usuario tenga privilegios sobre la base de datos.
El backup se genera pero está vacío (0 bytes)
Suele pasar cuando el nombre de la base de datos es incorrecto. Recuerda que en cPanel el nombre completo incluye el prefijo del usuario (ejemplo: usuariox_bd).
El cron job no se ejecuta
Comprueba que la ruta del script es correcta y que tiene permisos de ejecución. También revisa que no haya errores de sintaxis en el script. Puedes añadir una línea al final para que escriba un log:
echo "Backup realizado el $(date)" >> /home/tuusuario/backups/backup.log
El servidor no tiene mysqldump
Esto es raro, pero si tu hosting es muy restrictivo, puede que no permita comandos externos. En ese caso, usa la herramienta de backup de cPanel: Copias de seguridad → Descargar una copia de seguridad de MySQL. No es automático, pero al menos tendrás un método manual.
¿Qué pasa si uso Syspanel en lugar de cPanel?
Si tu proveedor usa Syspanel (el panel que se accede por el puerto 2106), el proceso es prácticamente el mismo:
- En lugar de cPanel, entras en Syspanel con tu usuario y contraseña.
- Busca la sección de "Tareas cron" o "Scheduled tasks".
- La sintaxis del cron y el script son idénticos, ya que ambos paneles funcionan sobre Linux.
La única diferencia real es la interfaz, pero no el resultado. Y si tu panel no tiene una sección de cron visual, siempre puedes usar SSH para añadir la tarea:
crontab -e
Y añadir esta línea:
0 3 * * * bash /home/tuusuario/backups/backup_db.sh
Preguntas frecuentes (FAQ)
¿Cuánto espacio necesito para los backups?
Depende del tamaño de tu base de datos. Una web pequeña puede tener una BD de 5 MB, mientras que una tienda online puede superar los 500 MB. Con la compresión gzip, el archivo ocupa entre un 10% y un 20% del tamaño original. Calcula: si tu BD pesa 100 MB, cada backup ocupará unos 15 MB. Con 7 días de retención, necesitarás unos 105 MB libres.
¿Puedo hacer backups de varias bases de datos a la vez?
Sí, solo tienes que repetir la línea mysqldump en el script para cada base de datos, o usar un bucle. Por ejemplo:
for DB in bd1 bd2 bd3; do
mysqldump --user=$DB_USER --password=$DB_PASS $DB > $BACKUP_DIR/${DB}_$DATE.sql
gzip $BACKUP_DIR/${DB}_$DATE.sql
done
¿Qué diferencia hay entre backup completo y backup solo de datos?
mysqldump por defecto incluye la estructura (tablas, índices) y los datos. Si quieres solo los datos sin estructura, añade --no-create-info. Si quieres solo la estructura sin datos, añade --no-data. Para emergencias, el backup completo es lo más seguro.
¿Es seguro guardar la contraseña en el script?
No es lo más seguro del mundo, pero es una práctica común en entornos de hosting compartido. Para mayor seguridad, restringe los permisos del archivo a 600 (solo lectura/escritura para el propietario). Si tienes acceso SSH, puedes usar variables de entorno, pero eso ya es nivel avanzado.
¿Qué hago con el backup si mi servidor muere?
El backup en el propio servidor no te sirve si el servidor se cae por completo (disco duro dañado, etc.). Para protección total, deberías descargar los backups a tu ordenador o a un servicio en la nube al menos una vez por semana. Puedes hacerlo manualmente desde el Administrador de archivos o configurar una sincronización con rclone.
Conclusión: la automatización es tu mejor amiga
Configurar un backup mysql cpanel cron no te llevará más de 15 minutos, pero te ahorrará noches de insomnio si algo sale mal. La combinación de un script sencillo, un cron job diario y una retención de 7 días es el equilibrio perfecto entre seguridad y uso de recursos.
Recuerda los puntos clave:
- Crea el script con
mysqldumpygzip. - Configura el cron para que se ejecute a las 3 AM.
- Prueba siempre que el backup se genera correctamente.
- No guardes los backups en
public_html. - Revisa cada cierto tiempo que el cron sigue funcionando (por ejemplo, mirando la fecha del último archivo).
Y si tu hosting usa Syspanel, recuerda que el acceso es por el puerto 2106 y que la configuración es prácticamente idéntica.
Con esto, tu base de datos estará protegida y podrás dormir tranquilo sabiendo que, pase lo que pase, siempre tendrás una copia reciente para restaurar. ¿Te animas a configurarlo ahora?
