Cómo hacer una copia de seguridad automática de una base de datos en cPanel
¿Por qué necesitas una copia de seguridad automática de tu base de datos?
Si tienes una web con WordPress, una tienda online o cualquier aplicación que use MySQL, tu base de datos es el corazón de tu negocio. Contiene tus artículos, los datos de tus clientes, tus pedidos y toda la configuración de tu sitio. Perder esa información sería un desastre.
Hacer copias de seguridad manuales es un buen hábito, pero la realidad es que nos olvidamos. La solución perfecta es automatizar este proceso. Así, cada día (o cada semana) el sistema crea una copia de seguridad sin que tengas que acordarte de hacerlo.
En este artículo te voy a enseñar, paso a paso, cómo configurar una copia seguridad cPanel automática usando los cron jobs y las herramientas que ya incluye tu panel de control. No necesitas ser un experto en programación, solo seguir las instrucciones con calma.
Qué necesitas antes de empezar
Antes de ponernos manos a la obra, asegúrate de tener lo siguiente:
- Acceso a cPanel con permisos de administrador.
- Los datos de acceso a tu base de datos (nombre de la base de datos, usuario y contraseña).
- Acceso a la carpeta raíz de tu web (normalmente
public_html) para subir un archivo. - Una cuenta de correo electrónico donde quieras recibir las notificaciones (opcional pero recomendable).
Si no tienes alguno de estos datos, contacta con tu proveedor de hosting para que te los facilite.
Paso 1: Entender qué es un cron job
Un cron job es una tarea programada que tu servidor ejecuta automáticamente a intervalos regulares. Piensa en ello como una alarma que se activa sola. Para nuestro caso, vamos a programar un cron job que ejecute un script PHP o un comando de MySQL para hacer el backup mysql cpanel.
La ventaja de usar cPanel es que no necesitas instalar nada extra. Solo tienes que crear un pequeño archivo con el código adecuado y programar cuándo quieres que se ejecute.
Paso 2: Crear el script de copia de seguridad
Vamos a crear un archivo PHP que se encargue de hacer la copia de seguridad de tu base de datos. Este archivo usará las funciones nativas de MySQL para exportar la base de datos a un archivo .sql.
- Abre un editor de texto en tu ordenador (puede ser el Bloc de notas, Visual Studio Code, etc.).
- Copia y pega el siguiente código:
<?php
// Configuración de la base de datos
$db_host = 'localhost';
$db_user = 'tu_usuario_bd';
$db_pass = 'tu_contraseña_bd';
$db_name = 'tu_nombre_bd';
// Directorio donde se guardarán las copias
$backup_dir = '/home/tu_usuario_cpanel/backups/';
// Crear el directorio si no existe
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
// Nombre del archivo de copia
$backup_file = $backup_dir . $db_name . '_' . date('Y-m-d_H-i-s') . '.sql';
// Comando para hacer el backup
$command = "mysqldump --host=$db_host --user=$db_user --password=$db_pass $db_name > $backup_file";
// Ejecutar el comando
system($command);
// Comprobar si el archivo se ha creado correctamente
if (file_exists($backup_file)) {
echo "Copia de seguridad creada correctamente: " . $backup_file;
} else {
echo "Error al crear la copia de seguridad.";
}
?>
-
Reemplaza los valores entre comillas por los datos reales de tu base de datos:
tu_usuario_bd: el usuario de tu base de datos.tu_contraseña_bd: la contraseña de ese usuario.tu_nombre_bd: el nombre de tu base de datos.tu_usuario_cpanel: el nombre de usuario de tu cuenta de cPanel (normalmente es el mismo que usas para entrar al panel).
-
Guarda el archivo con un nombre descriptivo, por ejemplo
backup_auto.php. -
Sube el archivo a la carpeta
public_htmlde tu web usando el Administrador de Archivos de cPanel o un cliente FTP como FileZilla.
[INFO] Si tu hosting usa una versión de PHP más moderna, este script funciona sin problemas. Es 100% compatible con las configuraciones estándar de cPanel.
Paso 3: Configurar el cron job en cPanel
Ahora viene la parte más importante: programar la ejecución automática. Sigue estos pasos:
- Inicia sesión en tu cPanel.
- Busca la sección Tareas Programadas o Cron Jobs. Normalmente está en el grupo "Avanzado".
- Haz clic en Nuevo Cron Job o Add New Cron Job.
Configuración del intervalo
Aquí debes decidir cada cuánto tiempo quieres que se haga la copia. Lo más común es hacerla una vez al día. Para ello:
- Minuto:
0(se ejecutará al minuto 0 de la hora, es decir, en punto). - Hora:
3(a las 3 de la madrugada, cuando el tráfico de tu web es menor). - Día del mes:
*(todos los días). - Mes:
*(todos los meses). - Día de la semana:
*(todos los días).
Esto se traduce en el comando: 0 3 * * *
Comando a ejecutar
En el campo Comando (o Command), escribe lo siguiente:
/usr/bin/php /home/tu_usuario_cpanel/public_html/backup_auto.php
[WARNING] Sustituye
tu_usuario_cpanelpor tu nombre de usuario real. Si no lo conoces, míralo en la esquina superior derecha de tu cPanel.
Guardar el cron job
Haz clic en Guardar o Add Cron Job. Verás que la tarea aparece en la lista de crons existentes.
Paso 4: Probar que funciona
No queremos esperar al día siguiente para saber si todo ha salido bien. Vamos a probarlo manualmente:
- Accede a tu web escribiendo en el navegador:
https://tudominio.com/backup_auto.php. - Deberías ver un mensaje como: "Copia de seguridad creada correctamente".
- Ve a la carpeta
backupsque has creado dentro de tu cuenta (puedes verla con el Administrador de Archivos de cPanel). Ahí debería estar el archivo.sqlcon la fecha y hora actuales.
Si ves el archivo, ¡enhorabuena! Tu backup mysql cpanel automático está funcionando.
Paso 5: Automatizar la limpieza de copias antiguas
Si haces copias diarias, en un mes tendrás 30 archivos. En un año, más de 365. Eso ocupa espacio en tu hosting y puede hacer que te cobren de más. Por eso, es buena idea borrar las copias antiguas automáticamente.
Vamos a modificar el script para que solo conserve las últimas 7 copias. Abre el archivo backup_auto.php y añade esta función al final, justo antes del cierre ?>:
// Limpiar copias antiguas (conservar solo las últimas 7)
$files = glob($backup_dir . $db_name . '_*.sql');
if (count($files) > 7) {
usort($files, function($a, $b) {
return filemtime($a) - filemtime($b);
});
$old_files = array_slice($files, 0, count($files) - 7);
foreach ($old_files as $old_file) {
unlink($old_file);
}
}
Guarda el archivo y vuelve a probarlo. Ahora, cada vez que se ejecute, se borrarán las copias más antiguas.
Paso 6: Recibir notificaciones por email (opcional)
¿Quieres saber si la copia se ha hecho bien sin tener que mirar el servidor? Puedes configurar que el script te envíe un correo electrónico al finalizar.
Añade este código al final del script, después de la limpieza:
// Enviar notificación por email
$to = 'tu-email@dominio.com';
$subject = 'Copia de seguridad completada';
$message = 'La copia de seguridad de la base de datos ' . $db_name . ' se ha creado correctamente en ' . $backup_file;
$headers = 'From: backup@tudominio.com' . "\r\n" .
'Reply-To: backup@tudominio.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
[TIP] Recuerda cambiar
tu-email@dominio.comytudominio.compor tus datos reales. Algunos hostings limitan el envío de emails desde scripts PHP, así que si no te llega el correo, no te preocupes: la copia sigue funcionando.
Paso 7: Alternativa sin PHP: usar mysqldump directamente
Si prefieres no crear un archivo PHP, puedes programar el cron job directamente con el comando mysqldump. Así:
/usr/bin/mysqldump --host=localhost --user=tu_usuario_bd --password=tu_contraseña_bd tu_nombre_bd > /home/tu_usuario_cpanel/backups/tu_nombre_bd_$(date +\%Y-\%m-\%d).sql
Esto guardará la copia con la fecha en el nombre. El único inconveniente es que no podrás borrar automáticamente las copias antiguas con este método, así que tendrás que hacerlo manualmente o crear otro cron job para ello.
Preguntas frecuentes (FAQ)
¿Cada cuánto tiempo debo hacer la copia de seguridad?
Depende de la frecuencia con la que actualices tu web. Si publicas contenido a diario, una copia diaria es lo ideal. Si tu web es más estática, con una copia semanal es suficiente.
¿Dónde se guardan las copias de seguridad?
En la carpeta backups que hemos creado dentro de tu cuenta de cPanel. Te recomiendo que, además, descargues una copia a tu ordenador de vez en cuando para tener una copia externa.
¿Puedo hacer una copia de seguridad de varias bases de datos?
Sí. Solo tienes que duplicar el script y cambiar el nombre de la base de datos, o crear un bucle en PHP para que recorra todas tus bases de datos.
¿Qué pasa si mi hosting usa Syspanel en lugar de cPanel?
Si tu proveedor usa Syspanel (antes conocido como HestiaCP), el proceso es similar, pero la interfaz es diferente. En Syspanel, el acceso se realiza a través del puerto 2106 (por ejemplo, https://tudominio.com:2106). La configuración de cron jobs se encuentra en la sección "Tareas Programadas" o "Cron". El resto del proceso (el script PHP y los comandos) es idéntico.
¿Puedo restaurar una copia de seguridad desde cPanel?
Sí. En cPanel tienes la herramienta Restaurar una copia de seguridad de MySQL dentro de la sección de bases de datos. Solo tienes que subir el archivo .sql y el sistema lo importará automáticamente.
¿Qué hago si el cron job no se ejecuta?
Comprueba lo siguiente:
- Que la ruta del archivo PHP sea correcta.
- Que el archivo tenga permisos de ejecución (755 suele ser suficiente).
- Que el usuario de la base de datos tenga permisos de lectura sobre la base de datos.
- Revisa el registro de cron jobs en cPanel para ver si hay errores.
Conclusión
Configurar una copia seguridad cPanel automática es mucho más fácil de lo que parece. Con un pequeño script y un cron job, tendrás tu base de datos protegida sin tener que acordarte de hacerlo manualmente. Es una inversión de tiempo mínima que te puede ahorrar un gran disgusto.
Recuerda que la copia de seguridad es solo la mitad del trabajo: también debes asegurarte de que puedes restaurarla cuando la necesites. Prueba a restaurar una copia en un entorno de pruebas antes de que ocurra una emergencia real.
Si has seguido todos los pasos, ya tienes tu backup mysql cpanel funcionando. Si tienes alguna duda, déjala en los comentarios y te ayudaré a resolverla. ¡Hasta la próxima!
