Cómo hacer backup automático de base de datos en cPanel (y restaurarlo)
¿Por qué necesitas un backup automático de tu base de datos?
Si tienes una web con WordPress, una tienda online o cualquier aplicación que use MySQL, la base de datos es el corazón de tu proyecto. Contiene tus artículos, productos, pedidos, usuarios y configuraciones. Perderla por un error humano, un ataque o un fallo del servidor puede ser catastrófico.
Por eso, configurar un backup automático es una de las tareas más importantes que puedes hacer en tu cPanel. No se trata de hacer una copia manual cuando te acuerdas (que suele ser tarde), sino de programar una copia de seguridad periódica que se ejecute sola, sin que tengas que hacer nada.
En esta guía te voy a explicar, paso a paso y sin tecnicismos, cómo crear un sistema de copias de seguridad automáticas de tu base de datos usando los cron jobs de cPanel. Además, te enseñaré a restaurar esas copias cuando las necesites. Al final, tendrás un sistema a prueba de balas.
Requisitos previos para empezar
Antes de lanzarnos a configurar nada, asegúrate de tener lo siguiente:
- Acceso a cPanel: Necesitas las credenciales de tu cuenta de hosting. Normalmente accedes a través de
tudominio.com/cpanelotudominio.com:2083. - Datos de la base de datos: Necesitas saber el nombre de tu base de datos, el usuario y la contraseña. Lo puedes encontrar en la sección "Bases de Datos MySQL" de tu cPanel.
- Un lugar donde guardar las copias: Lo ideal es que no guardes las copias en el mismo servidor (si el disco falla, pierdes todo). Te recomiendo tener una carpeta en tu cuenta de cPanel o, mejor aún, un servicio externo como Google Drive o Dropbox (aunque eso lo veremos más adelante).
[INFO] Si tu hosting usa Syspanel (antes conocido como HestiaCP), el acceso se realiza a través del puerto 2106 (por ejemplo,
tudominio.com:2106). El concepto es similar, pero la interfaz es diferente. En esta guía nos centraremos en cPanel, que es el más común.
Paso 1: Entender qué es un Cron Job y cómo funciona
Un cron job es un programador de tareas del servidor. Piensa en él como un despertador que le dice a tu servidor: "cada día a las 3 de la mañana, ejecuta este comando". Es la forma estándar de automatizar tareas en sistemas Linux (que es el sistema que usa la mayoría de los hosting).
En nuestro caso, el comando que vamos a programar será el que haga la copia de seguridad de la base de datos. No te asustes, no necesitas ser un programador para hacer esto, solo tienes que copiar y pegar un par de líneas.
Paso 2: Crear un script de backup en PHP (el archivo mágico)
La forma más sencilla y compatible de hacer un backup de MySQL sin ser un experto es usar un pequeño script en PHP. Este script se conectará a tu base de datos, hará un volcado (dump) de toda la información y la guardará en un archivo .sql comprimido.
Vamos a crear este archivo dentro de tu cPanel.
2.1. Accede al Administrador de Archivos
- Entra en tu cPanel.
- Busca la sección "Archivos" y haz clic en "Administrador de Archivos".
- Se abrirá una ventana. Asegúrate de que estás en la carpeta raíz de tu dominio (normalmente se llama
public_htmlohtdocs). Haz clic en "Configuración" (arriba a la derecha) y marca la opción "Mostrar archivos ocultos (dotfiles)" para asegurarte de que ves todo.
2.2. Crea la carpeta y el archivo del script
- Haz clic en "+ Carpeta" en la barra de herramientas superior.
- Nombra la carpeta como
backups. (Puedes usar otro nombre, pero este es claro y fácil de recordar). Recuerda que esta carpeta será visible en tu dominio, así que es buena idea protegerla (veremos cómo más adelante). - Entra en la carpeta
backupsque acabas de crear. - Haz clic en "+ Archivo".
- Nombra el archivo como
backup.phpy haz clic en "Crear nuevo archivo".
2.3. Edita el script con tus datos
- Haz clic derecho sobre el archivo
backup.phpy selecciona "Editar" (o códigofuente). - Se abrirá un editor de texto. Borra todo el contenido y pega el siguiente código:
<?php
// --- CONFIGURACIÓN ---
// Datos de tu base de datos (los encuentras en cPanel -> Bases de Datos MySQL)
$db_host = 'localhost'; // Este valor casi siempre es 'localhost'
$db_name = 'tu_usuario_tu_base'; // Ejemplo: 'usuario_miweb'
$db_user = 'tu_usuario_usuario'; // Ejemplo: 'usuario_miweb'
$db_pass = 'TU_CONTRASEÑA_DB'; // La contraseña de la base de datos
// Directorio donde se guardarán los backups (relativo a este script)
// En este caso, estamos en /public_html/backups y queremos guardar aquí mismo.
$backup_dir = __DIR__ . '/';
// --- FIN DE LA CONFIGURACIÓN ---
// No editar nada de aquí en adelante
$date = date('Y-m-d_H-i-s');
$filename = 'backup_' . $db_name . '_' . $date . '.sql.gz';
// Comando para hacer el backup y comprimirlo
$command = "mysqldump --host={$db_host} --user={$db_user} --password={$db_pass} {$db_name} | gzip > {$backup_dir}{$filename}";
// Ejecutar el comando y capturar la salida (si hay errores)
$output = [];
$return_var = 0;
exec($command, $output, $return_var);
// Verificar si se ejecutó correctamente
if ($return_var === 0) {
echo "Backup completado con éxito: {$filename}";
} else {
echo "Error al hacer el backup. Revisa los datos de conexión.";
print_r($output);
}
?>
[WARNING] Es MUY importante que reemplaces
tu_usuario_tu_base,tu_usuario_usuarioyTU_CONTRASEÑA_DBcon los datos reales de tu base de datos. Si no lo haces, el script fallará. Una forma fácil de ver el nombre de tu base de datos es ir a cPanel -> "Bases de Datos MySQL". Verás una lista con los nombres completos.
2.4. Protege la carpeta de backups (Opcional pero recomendado)
Como esta carpeta estará accesible desde internet (ej: tudominio.com/backups), es una buena práctica protegerla con una contraseña para que nadie pueda descargar tus copias de seguridad.
- Vuelve a la carpeta
public_htmlen el Administrador de Archivos. - Busca la carpeta
backupsque creaste. - Haz clic derecho sobre ella y selecciona "Proteger con contraseña".
- Ponle un nombre (ej: "Mis Backups") y crea un usuario y contraseña.
- Guarda los cambios. Ahora, si alguien intenta acceder a
tudominio.com/backups, le pedirá usuario y contraseña.
Paso 3: Configurar el Cron Job en cPanel
Ahora viene la parte mágica: programar la ejecución automática de este script.
3.1. Encuentra la sección de Cron Jobs
- En tu cPanel, busca la sección "Avanzado" y haz clic en "Cron Jobs".
3.2. Configura el comando
En la pantalla de Cron Jobs, verás dos partes: una para configurar cuándo se ejecuta y otra para el comando.
-
Configura el horario: Se te presentan 5 campos (Minuto, Hora, Día, Mes, Día de la semana). Para una web normal, un backup diario es perfecto.
- Minuto:
0(para que se ejecute en el minuto 0). - Hora:
3(por ejemplo, a las 3 de la madrugada, cuando hay menos tráfico). - Día:
*(todos los días). - Mes:
*(todos los meses). - Día de la semana:
*(todos los días). - Esto resultará en:
0 3 * * *. Significa que se ejecutará todos los días a las 3:00 AM.
- Minuto:
-
El comando a ejecutar: En el campo "Comando", escribe lo siguiente:
php /home/TU_USUARIO_CPANEL/public_html/backups/backup.php
[INFO] Necesitas reemplazar
TU_USUARIO_CPANELcon tu nombre de usuario de cPanel. Puedes verlo en la esquina superior derecha de tu cPanel o en la ruta del Administrador de Archivos (ej: si la ruta es/home/miUsuario/public_html, entonces el comando seríaphp /home/miUsuario/public_html/backups/backup.php).
- Haz clic en "Agregar nuevo cron job".
¡Y eso es todo! Ya tienes un sistema de backup automático funcionando. Cada día a las 3 de la mañana, el servidor ejecutará tu script y creará una copia comprimida de tu base de datos en la carpeta backups.
[TIP] Puedes probar si el script funciona manualmente. Para ello, en la lista de Cron Jobs que aparece abajo, verás tu tarea. Haz clic en el icono de "Ejecutar ahora" (generalmente un botón de play). Luego, ve a tu carpeta
backupsen el Administrador de Archivos y comprueba si se ha creado un archivo.sql.gz.
Paso 4: Cómo restaurar un backup desde cPanel
El momento de la verdad llega cuando tu web falla y necesitas recuperar los datos. No te preocupes, el proceso de restauración es sencillo.
4.1. Localiza el archivo de backup
- Ve al Administrador de Archivos de tu cPanel.
- Entra en la carpeta
backups. - Verás una lista de archivos con nombres como
backup_tu_usuario_tu_base_2024-05-20_03-00-01.sql.gz. - Descarga el archivo que quieras restaurar a tu ordenador y descomprímelo (con WinRAR, 7-Zip o el descompresor de tu sistema). Obtendrás un archivo con extensión
.sql.
4.2. Restaura el archivo .sql en tu base de datos
Tienes dos opciones principales: usar phpMyAdmin o usar la función de importar de cPanel. Te explicaré la más común, que es con phpMyAdmin.
Opción A: Restaurar con phpMyAdmin (recomendado)
- En tu cPanel, busca la sección "Bases de Datos" y haz clic en "phpMyAdmin".
- En el panel de la izquierda, haz clic en el nombre de tu base de datos para seleccionarla.
- En la parte superior, haz clic en la pestaña "Importar".
- Haz clic en "Elegir archivo" y selecciona el archivo
.sqlque descomprimiste antes. - Deja el resto de opciones por defecto y haz clic en "Continuar".
- phpMyAdmin importará los datos. Si no hay errores, verás un mensaje de éxito.
[WARNING] Este proceso sobrescribirá los datos actuales de tu base de datos con los del backup. Si tienes datos nuevos que no estaban en la copia, se perderán. Asegúrate de que realmente quieres restaurar esa versión.
Opción B: Restaurar desde cPanel (Importar/Exportar)
- En tu cPanel, busca la sección "Bases de Datos" y haz clic en "Bases de Datos MySQL" (o "Asistente de MySQL").
- En la parte inferior, busca la sección "Importar" o "Subir".
- Haz clic en "Examinar" o "Elegir archivo" y selecciona tu archivo
.sql. - Haz clic en "Importar".
Este método es más directo, pero a veces menos fiable que phpMyAdmin para archivos grandes.
Paso 5: Automatización avanzada y buenas prácticas
Tu sistema de backup ya funciona, pero siempre puedes mejorarlo.
5.1. ¿Cuántos backups debo conservar?
Si haces backups diarios, en un mes tendrás 30 archivos. Eso puede ocupar bastante espacio en tu hosting. Te recomiendo que, periódicamente (una vez al mes, por ejemplo), borres los backups antiguos y te quedes solo con los últimos 7-10 días. Puedes hacerlo manualmente desde el Administrador de Archivos o, si te atreves, añadir un segundo cron job que borre archivos con más de X días de antigüedad.
5.2. La regla del 3-2-1
Es la regla de oro de los backups: 3 copias de tus datos, en 2 medios de almacenamiento diferentes, y 1 copia fuera del sitio. Es decir, no te conformes solo con las copias en tu hosting. Descarga una copia a tu ordenador o, mejor aún, configura tu script para que envíe el backup a un servicio en la nube como Google Drive o Dropbox. Hay plugins y scripts que lo hacen, pero eso ya es un nivel más avanzado.
5.3. ¿Qué pasa si mi hosting usa Syspanel?
Como mencioné antes, si tu proveedor usa Syspanel (HestiaCP en el puerto 2106), la interfaz es diferente, pero el concepto es el mismo. En Syspanel, la sección de cron jobs suele estar en "Cron" o "Tareas programadas". El comando que usarías sería el mismo, solo que la ruta al archivo backup.php podría variar. En Syspanel, la raíz del dominio suele ser public_html o web. Tendrás que ajustar la ruta en el comando del cron job.
Preguntas frecuentes (FAQ)
¿Puedo usar este método para hacer backup de varias bases de datos?
Sí. Solo tienes que duplicar el script backup.php (por ejemplo, backup2.php) y cambiar las variables de conexión al inicio del archivo. Luego, creas otro cron job que ejecute ese nuevo archivo.
¿Qué hago si el cron job no se ejecuta?
Primero, prueba a ejecutar el script manualmente desde tu navegador (accediendo a tudominio.com/backups/backup.php). Si ves un mensaje de error, es que los datos de conexión son incorrectos. Si ves "Backup completado con éxito", el problema está en el cron job. Revisa que el comando sea exactamente el correcto, especialmente la ruta.
¿Es seguro tener un archivo PHP con la contraseña de mi base de datos?
No es 100% seguro, pero es una práctica común. Al proteger la carpeta con contraseña, reduces mucho el riesgo. Otra opción es mover el archivo de backup fuera de public_html, pero eso requiere más conocimientos de servidor.
¿Cada cuánto tiempo debo hacer un backup?
Depende de la frecuencia con la que actualices tu web. Si publicas contenido a diario, un backup diario es lo mínimo. Si es una tienda online con pedidos cada hora, quizás deberías hacerlo cada 6 o 12 horas. Puedes ajustar el horario del cron job fácilmente.
¿Puedo restaurar un backup en una base de datos con un nombre diferente?
Sí, pero tendrás que editar el archivo .sql antes de importarlo. Busca y reemplaza el nombre de la base de datos antigua por el nuevo. Esto es un poco más avanzado, pero con un editor de texto como Notepad++ se puede hacer.
¿El backup incluye los archivos de mi web (imágenes, plugins, etc.)?
No.
