🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo hacer backup automático de una base de datos MySQL en cPanel

Actualizado el 10 de marzo de 2026

¿Por qué necesitas un backup automático de tu base de datos MySQL?

Si tienes una web dinámica (WordPress, PrestaShop, una tienda online o cualquier aplicación que guarde información), tu base de datos MySQL es el cerebro de tu proyecto. Contiene los usuarios, los pedidos, los artículos del blog, las configuraciones y todo lo que hace que tu web sea única.

Perder esa información por un error humano, un hackeo o un fallo del servidor puede ser catastrófico. Por eso, automatizar las copias de seguridad no es un lujo, es una necesidad. Y la buena noticia es que, si usas cPanel, tienes varias formas de hacerlo sin necesidad de ser un experto en programación.

En esta guía extensa y práctica, te voy a enseñar cómo hacer backup automático de una base de datos MySQL en cPanel usando tres métodos diferentes: el programador de tareas (Cron Job), un script PHP y un script en Bash. Al final, también resolveré las dudas más frecuentes (FAQ) sobre este tema.


Método 1: Backup automático con Cron Job y el comando mysqldump (El más recomendado)

Este es el método más limpio, eficiente y el que usan la mayoría de administradores de servidores. Básicamente, vamos a crear una tarea programada (Cron Job) que ejecute un comando para volcar el contenido de la base de datos a un archivo comprimido.

¿Qué es un Cron Job?

Un Cron Job es un "despertador" que le dice al servidor: "ejecuta este comando a esta hora, todos los días". Es la forma nativa de automatizar tareas en sistemas Linux, y cPanel nos da una interfaz gráfica para gestionarlos sin tocar la terminal.

Paso 1: Encuentra tus datos de acceso a MySQL

Antes de nada, necesitas saber tres cosas:

  1. El nombre de tu base de datos.
  2. El nombre de tu usuario de la base de datos.
  3. La contraseña de ese usuario.

Puedes encontrarlos en cPanel, en la sección "Bases de datos MySQL". Normalmente, tanto el nombre de la base de datos como el usuario llevan un prefijo con el nombre de tu cuenta (por ejemplo, usuarioweb_bdventas y usuarioweb_admin). Anota estos datos, los necesitarás para el comando.

Paso 2: Accede al área de Cron Jobs

Dentro de cPanel, busca la sección "Tareas programadas" o "Cron Jobs". Está en la categoría "Avanzado" o directamente en la pantalla principal, dependiendo de la versión de cPanel.

Paso 3: Configura la tarea programada (Cron Job)

En la pantalla de Cron Jobs, verás un formulario para añadir una nueva tarea. Vamos a configurarla paso a paso:

  1. Configuración común (opcional): Puedes ponerle un nombre descriptivo, como "Backup diario BD". Esto es útil para identificarla luego.

  2. Configuración del momento: Aquí defines cada cuánto tiempo se ejecuta. Para un backup diario, selecciona:

    • Minuto: 0 (se ejecutará en el minuto 0, es decir, en punto).
    • Hora: 3 (a las 3 de la mañana, cuando el tráfico es bajo).
    • Día del mes: * (todos los días).
    • Mes: * (todos los meses).
    • Día de la semana: * (cualquier día).

    Si prefieres usar la interfaz sencilla de "Configuración común", elige "Una vez al día (0 0 * * *)" y luego ajusta la hora a 3 si quieres. La expresión cron resultante sería: 0 3 * * *.

  3. El comando a ejecutar: Este es el corazón del asunto. Vamos a usar el comando mysqldump, que es la herramienta estándar para exportar bases de datos MySQL.

El comando básico es este:

mysqldump --opt --user=TU_USUARIO --password=TU_CONTRASEÑA TU_BASE_DE_DATOS > /home/TU_CUENTA/backups/backup_$(date +\%Y-\%m-\%d).sql

Pero te recomiendo que lo hagamos un poco más robusto y comprimido para ahorrar espacio. Vamos a usar gzip:

mysqldump --opt --user=TU_USUARIO --password=TU_CONTRASEÑA TU_BASE_DE_DATOS | gzip > /home/TU_CUENTA/backups/backup_$(date +\%Y-\%m-\%d).sql.gz

Desglose del comando:

  • mysqldump: La herramienta de exportación.
  • --opt: Activa un conjunto de opciones óptimas para hacer el backup rápido y consistente.
  • --user=TU_USUARIO: Tu usuario de MySQL.
  • --password=TU_CONTRASEÑA: Tu contraseña de MySQL. Importante: No dejes espacios entre --password= y tu contraseña.
  • TU_BASE_DE_DATOS: El nombre de tu base de datos.
  • | gzip: Toma la salida del mysqldump y la comprime.
  • >: Redirige la salida a un archivo.
  • /home/TU_CUENTA/backups/backup_$(date +\%Y-\%m-\%d).sql.gz: La ruta absoluta donde quieres guardar el archivo. La parte $(date +\%Y-\%m-\%d) genera automáticamente la fecha actual (por ejemplo, backup_2025-05-20.sql.gz). Es fundamental que la carpeta backups exista dentro de tu directorio principal (/home/TU_CUENTA/). Si no, el comando fallará. Puedes crearla desde el "Administrador de archivos" de cPanel.

[WARNING]
Recuerda reemplazar TU_USUARIO, TU_CONTRASEÑA, TU_BASE_DE_DATOS y TU_CUENTA con tus datos reales. Si usas la contraseña directamente en el comando, ten en cuenta que cualquier persona con acceso a ver los procesos del servidor podría verla. Para una seguridad óptima, es mejor usar el método 3 (script con archivo de credenciales), que veremos más adelante.

Paso 4: Guarda y verifica

Pulsa el botón "Agregar nueva tarea programada" o "Añadir nuevo cron job". ¡Ya está! Tu servidor ejecutará ese comando a las 3 de la mañana todos los días.

Para verificar que funciona, puedes ir al "Administrador de archivos" y comprobar si al día siguiente aparece el archivo .sql.gz en la carpeta backups. También puedes ejecutar el comando manualmente desde la opción "Ejecutar ahora" que te ofrece cPanel en la lista de Cron Jobs, pero ten en cuenta que la fecha se generará con el comando date, así que se creará un archivo con la fecha actual.


Método 2: Script PHP para automatizar el backup (Ideal si quieres guardarlo en otro sitio)

Si te sientes más cómodo con PHP o quieres tener la flexibilidad de, por ejemplo, enviar el backup por correo o moverlo a un servicio de almacenamiento en la nube, un script PHP es una gran opción.

Paso 1: Crea el archivo PHP

Ve al "Administrador de archivos" de cPanel, entra en la carpeta de tu sitio (normalmente public_html) y crea una nueva carpeta llamada scripts. Dentro de esa carpeta, crea un archivo llamado backup.php.

Paso 2: Pega el siguiente código

<?php
// Configuración de la base de datos
$db_host = 'localhost'; // Normalmente es 'localhost'
$db_user = 'TU_USUARIO';
$db_pass = 'TU_CONTRASEÑA';
$db_name = 'TU_BASE_DE_DATOS';

// Configuración del backup
$backup_dir = '/home/TU_CUENTA/backups/'; // Asegúrate de que esta carpeta exista
$backup_file = $backup_dir . 'backup_' . date('Y-m-d_H-i-s') . '.sql';

// Comando mysqldump
$command = "mysqldump --opt --host=$db_host --user=$db_user --password=$db_pass $db_name > $backup_file";

// Ejecutar el comando
system($command, $output);

// Comprobar si se ha creado el archivo y mostrar mensaje
if (file_exists($backup_file) && filesize($backup_file) > 0) {
    echo "Backup completado con éxito. Archivo: " . $backup_file;
} else {
    echo "Error: No se pudo crear el backup. Comprueba tus credenciales y permisos.";
}
?>

Paso 3: Configura el Cron Job para ejecutar el script

Ahora, en lugar de poner el comando mysqldump directamente, el Cron Job ejecutará PHP para que procese nuestro script.

En la configuración del Cron Job, en el campo "Comando", escribe:

php /home/TU_CUENTA/public_html/scripts/backup.php

Configura la hora y la frecuencia como en el método anterior. Este método es más fácil de leer y modificar, y puedes añadir más lógica al script, como enviar un correo de confirmación o borrar backups antiguos.

[TIP]
Para borrar automáticamente backups de más de 7 días y no llenar el disco duro, puedes añadir esta línea al final de tu script PHP:

$files = glob($backup_dir . 'backup_*.sql');
foreach ($files as $file) {
    if (is_file($file) && time() - filemtime($file) >= 7 * 24 * 3600) {
        unlink($file);
    }
}

Método 3: Script Bash con archivo de credenciales (El más seguro)

Este es el método más profesional y seguro, ya que evita poner la contraseña en la línea de comandos, donde podría quedar registrada en el historial del servidor.

Paso 1: Crea un archivo de configuración con tus credenciales

Crea un archivo llamado .my.cnf en tu directorio principal (/home/TU_CUENTA/). Puedes hacerlo desde el "Administrador de archivos" o con un editor de texto. Asegúrate de que el nombre empiece con un punto para que sea un archivo oculto.

Pega este contenido:

[client]
user=TU_USUARIO
password=TU_CONTRASEÑA
host=localhost

Paso 2: Protege el archivo de credenciales

Es crucial que este archivo no sea legible por otros usuarios del servidor. En el "Administrador de archivos", haz clic derecho sobre .my.cnf, selecciona "Cambiar permisos" y pon 600 (solo lectura y escritura para el propietario).

Paso 3: Crea el script de backup

Crea un archivo llamado backup_script.sh en la carpeta scripts que creamos antes. Pega este código:

#!/bin/bash
# Configuración
DB_NAME="TU_BASE_DE_DATOS"
BACKUP_DIR="/home/TU_CUENTA/backups"
DATE=$(date +\%Y-\%m-\%d_\%H-\%M-\%S)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql.gz"

# Crear el backup comprimido
mysqldump --defaults-extra-file=/home/TU_CUENTA/.my.cnf --opt $DB_NAME | gzip > $BACKUP_FILE

# Comprobar si el backup se ha realizado correctamente
if [ -s $BACKUP_FILE ]; then
    echo "Backup de $DB_NAME completado en $BACKUP_FILE"
else
    echo "ERROR: El backup no se ha podido crear" >&2
    exit 1
fi

# Borrar backups antiguos (más de 7 días)
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete

Paso 4: Configura el Cron Job

En cPanel, en la sección de Cron Jobs, en el campo "Comando" escribe:

bash /home/TU_CUENTA/scripts/backup_script.sh

Configura la frecuencia deseada. Este script es más robusto porque lee las credenciales del archivo .my.cnf (que no quedan expuestas en el cron), comprueba que el backup se ha creado correctamente y limpia los backups antiguos automáticamente.


Preguntas Frecuentes (FAQ) sobre el backup automático en cPanel

¿Puedo restaurar un backup de MySQL desde cPanel?

Sí. Para restaurar, puedes usar la herramienta "phpMyAdmin" dentro de cPanel. Entra en tu base de datos, ve a la pestaña "Importar" y sube tu archivo .sql o .sql.gz. También puedes hacerlo desde la sección "Backup" de cPanel si el backup se hizo desde ahí, pero para los backups que hemos creado con mysqldump, lo más directo es phpMyAdmin.

¿Cada cuánto tiempo debo programar el backup?

Depende de la actividad de tu web. Si tienes una tienda online, lo ideal es un backup diario. Si es un blog personal, un backup semanal puede ser suficiente. Te recomiendo que, como mínimo, hagas un backup diario.

¿Dónde debo guardar los backups para que estén seguros?

Lo ideal es que los backups no se guarden en el mismo servidor donde está tu web, porque si el servidor falla, lo pierdes todo. Puedes configurar tu script para que, además de guardarlo localmente, lo envíe a un servicio de cloud storage (como Amazon S3, Google Drive o Dropbox) mediante herramientas como rclone. Esto es un poco más avanzado, pero es la práctica recomendada.

¿Qué hago si el Cron Job no se ejecuta?

  1. Comprueba la ruta: Asegúrate de que la ruta del comando es correcta y que las carpetas existen.
  2. Mira los logs: cPanel suele tener un registro de los Cron Jobs. Puedes configurarlo para que envíe un correo con la salida del comando. Activa esa opción si no la tienes.
  3. Ejecuta el comando manualmente: Prueba a ejecutar el comando del cron desde la terminal (si tienes acceso SSH) o desde la opción "Ejecutar ahora" para ver si hay algún error.
  4. Permisos: Asegúrate de que la carpeta backups tiene permisos de escritura (normalmente 755 o 775).

¿El backup automático de cPanel (el que hace la propia herramienta) es suficiente?

La herramienta nativa de cPanel ("Backup") es muy buena, pero suele estar orientada a hacer copias completas de la cuenta (archivos + bases de datos) y suelen ser backups bajo demanda o programados a nivel de servidor, pero no siempre es fácil automatizarlos para que se guarden en un lugar externo. Los métodos que te he enseñado te dan un control total sobre qué se respalda, dónde se guarda y cómo se gestiona. Es una capa de seguridad extra muy recomendable.

¿Qué es mejor, mysqldump o hacer una copia de los archivos .frm e .ibd?

mysqldump es la mejor opción para la mayoría de los casos. Exporta la base de datos a un archivo SQL que es legible y fácil de importar en cualquier otro servidor MySQL, incluso si cambias de versión o de proveedor. Copiar los archivos físicos de la base de datos es más rápido pero es un método más frágil, ya que requiere que los archivos sean exactamente compatibles con la versión del servidor MySQL y no es tan portátil.

Si mi hosting usa Syspanel (antes conocido como HestiaCP), ¿cómo hago esto?

[INFO]
Si tu proveedor de hosting utiliza Syspanel (el panel de control al que se accede por el puerto 2106), la interfaz es diferente a cPanel. Sin embargo, la buena noticia es que Syspanel también tiene un gestor de Cron Jobs y acceso a la base de datos MySQL. Los comandos que te he enseñado (mysqldump, scripts PHP, etc.) funcionan exactamente igual porque se ejecutan a nivel de sistema operativo. Solo tendrás que adaptar la interfaz: en lugar de usar el Cron Job de cPanel, usarás el de Syspanel, pero el resultado

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel