Cómo hacer backup de una base de datos MySQL en DirectAdmin con cron
¡Hola! Si estás leyendo esto, seguramente ya sabes que tener una copia de seguridad de tu base de datos es como tener un seguro de vida para tu web.
En el mundo del hosting, los imprevistos pasan: un error humano al borrar una tabla, un ataque malintencionado o un fallo del servidor. Si no tienes un backup, perderás toda tu información para siempre.
La buena noticia es que DirectAdmin (uno de los paneles de control más usados) nos permite automatizar esta tarea por completo. Olvídate de entrar cada semana a hacer clic en "Exportar". Vamos a programar un cron que haga el trabajo pesado por ti, usando una herramienta llamada mysqldump.
En esta guía, paso a paso y sin tecnicismos innecesarios, te voy a enseñar a configurar un backup mysql directadmin automático y seguro.
Vamos a ello.
¿Qué es un Cron y por qué es tan útil?
Antes de ensuciarnos las manos, vamos a entender la lógica. Un cron es un "despertador" que tiene tu servidor. Le dices: "Todos los días a las 3:00 AM, ejecuta este comando". Y el servidor lo hace solo, sin que tú tengas que mover un dedo.
Combinando un cron con el comando mysqldump (la herramienta oficial de MySQL para crear copias de seguridad), conseguimos una automatización backup mysql total.
Imagina que gestionas una tienda online. Si haces un backup diario, en el peor de los casos, perderás solo las ventas de las últimas 24 horas. Si no lo haces, podrías perderlo todo.
Requisitos Previos
Para seguir esta guía, necesitas tener:
- Acceso a DirectAdmin (obviamente). Normalmente se accede por
https://tu-dominio.com:2222. - Acceso SSH (Terminal). Aunque lo configuraremos desde DirectAdmin, necesitaremos la contraseña de SSH de tu cuenta de hosting para algunos trucos. Si no sabes qué es esto, no te preocupes, te explico cómo obtenerlo.
- Datos de tu Base de Datos: El nombre de la base de datos, el usuario y la contraseña. Los tienes en la sección "MySQL Management" de DirectAdmin.
[INFO]: Si tu hosting es de tipo compartido, es posible que el acceso SSH esté deshabilitado por seguridad. En ese caso, puedes configurar el cron directamente desde el panel de DirectAdmin sin necesidad de terminal, como veremos más adelante.
Método 1: La forma sencilla (Solo DirectAdmin)
Esta es la vía más fácil para principiantes. DirectAdmin tiene un sistema de backups integrado, pero a veces es un poco "generalista" (copia todo tu hosting). Nosotros queremos algo más quirúrgico: solo la base de datos.
Paso 1: Crear un script de backup
Un script es un archivo de texto con instrucciones. Vamos a crear uno que haga el backup.
- Entra a tu Administrador de Archivos (File Manager) en DirectAdmin. Normalmente está en la sección "File Manager".
- Ve a tu carpeta principal (suele llamarse
domainsopublic_html). Te recomiendo crear una carpeta llamadabackupspara tenerlo todo ordenado. - Dentro de la carpeta
backups, crea un nuevo archivo llamadobackup_db.sh. - Haz clic derecho sobre el archivo y selecciona Edit (Editar).
Paso 2: Escribir el código mágico
Dentro del archivo, pega el siguiente código. IMPORTANTE: Cambia los valores por los tuyos.
#!/bin/bash
# --- CONFIGURACIÓN ---
# Cambia estos datos por los tuyos
DB_NAME="tu_base_de_datos"
DB_USER="tu_usuario_bd"
DB_PASS="tu_contraseña_bd"
BACKUP_DIR="/home/tu_usuario/backups" # Ruta donde guardaremos el backup
# --- FECHA PARA EL NOMBRE DEL ARCHIVO ---
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# --- COMANDO DE BACKUP ---
# Esto crea un archivo .sql con el backup
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$DATE.sql"
# --- MENSAJE DE ÉXITO (Opcional) ---
echo "Backup de $DB_NAME completado en $BACKUP_DIR/$DB_NAME-$DATE.sql"
Explicación rápida del código:
mysqldumpes el comando que exporta la base de datos.-ues el usuario,-pes la contraseña (sin espacio entre-py la contraseña).>redirige la salida a un archivo.$DATEañade un sello de tiempo para que no se sobrescriban los backups. Esto es clave para tener un historial.
Paso 3: Hacer ejecutable el script (Importante)
En Linux, un archivo no se ejecuta solo. Necesitamos darle permisos.
- En el File Manager, haz clic derecho sobre
backup_db.sh. - Selecciona Change Permissions (Cambiar permisos).
- Marca la casilla de Execute (Ejecutar) para el propietario (Owner). Debe quedar como
755o750. - Guarda los cambios.
Paso 4: Configurar el Cron en DirectAdmin
Ahora vamos a programar la hora.
- En el menú principal de DirectAdmin, busca el icono que dice Cron Jobs (o "Cron Schedule").
- Verás un formulario con campos para la hora, el día, el mes, etc.
- Para ejecutarlo todos los días a las 4:00 AM, rellena así:
- Minuto:
0 - Hora:
4 - Día del mes:
* - Mes:
* - Día de la semana:
*
- Minuto:
- En el campo de "Command" (Comando), escribe la ruta completa a tu script:
/home/tu_usuario/backups/backup_db.sh - Haz clic en Add Crontab.
¡Listo! Ya tienes tu cron backup base de datos funcionando.
[TIP]: Si no sabes cuál es tu ruta de usuario, mira la barra de direcciones del File Manager. Normalmente es /home/tu_usuario/.
Método 2: El método Pro (Usando SSH y Cron)
Este método es más robusto porque nos permite hacer cosas avanzadas, como borrar backups antiguos para no llenar el disco duro del servidor.
Paso 1: Conectar por SSH
Abre tu terminal (si usas Windows, puedes usar PowerShell o un programa como PuTTY).
ssh usuario@tu-dominio.com -p 2222
Te pedirá tu contraseña de SSH (no la de DirectAdmin, aunque a veces son la misma).
Paso 2: Crear el script avanzado
Vamos a crear un script que no solo haga el backup, sino que también borre los que tengan más de 7 días. Esto es crucial para el rendimiento del servidor.
nano ~/backups/backup_db_avanzado.sh
Pega este contenido:
#!/bin/bash
# --- CONFIGURACIÓN ---
DB_NAME="tu_base_de_datos"
DB_USER="tu_usuario_bd"
DB_PASS="tu_contraseña_bd"
BACKUP_DIR="/home/tu_usuario/backups"
RETENTION_DAYS=7 # Número de días que quieres conservar los backups
# --- CREAR DIRECTORIO SI NO EXISTE ---
mkdir -p "$BACKUP_DIR"
# --- FECHA ---
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# --- BACKUP ---
mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$DATE.sql"
# --- COMPRIMIR EL BACKUP (Opcional pero recomendado) ---
gzip "$BACKUP_DIR/$DB_NAME-$DATE.sql"
# --- BORRAR BACKUPS ANTIGUOS ---
find "$BACKUP_DIR" -name "$DB_NAME-*.sql.gz" -mtime +$RETENTION_DAYS -delete
# --- LOG (Registro de actividad) ---
echo "$(date) - Backup de $DB_NAME completado" >> "$BACKUP_DIR/backup.log"
Ventajas de este script:
- Compresión: Con
gzipel archivo ocupa 10 veces menos espacio. - Limpieza automática: Con
find -deleteborramos los backups de hace más de 7 días. - Log: Guarda un registro de cuándo se hizo el backup, perfecto para verificar que todo funciona.
Paso 3: Dar permisos y probar
chmod +x ~/backups/backup_db_avanzado.sh
Para probar si funciona, ejecuta el script manualmente:
~/backups/backup_db_avanzado.sh
Si no ves errores, revisa la carpeta backups con ls -la ~/backups y verás tu archivo .sql.gz.
Paso 4: Programar el cron desde la terminal
En lugar de usar la interfaz gráfica, podemos hacerlo desde la terminal.
crontab -e
Esto abrirá un editor. Si es la primera vez, te preguntará qué editor quieres usar (elige nano). Añade esta línea al final:
0 4 * * * /home/tu_usuario/backups/backup_db_avanzado.sh
Guarda y sal. Ya tienes el cron activo.
Verificando que tu backup funciona
[WARNING]: Un backup que no se prueba, es un backup que no existe.
No te confíes. Una vez al mes, intenta restaurar un backup en una base de datos de prueba.
- Ve a MySQL Management en DirectAdmin.
- Crea una base de datos nueva (ej:
prueba_restauracion). - Entra a phpMyAdmin.
- Selecciona la base de datos nueva y haz clic en Importar.
- Sube tu archivo
.sql(si está comprimido, súbelo como.sql.gz). - Si el proceso termina sin errores, tu backup es válido.
Solución de problemas comunes (FAQ)
Aquí te dejo las dudas más frecuentes que me encuentro como técnico de soporte:
1. Me sale el error "mysqldump: command not found"
Esto significa que el sistema no encuentra el programa. En algunos servidores, mysqldump está en una ruta especial. Prueba a cambiar el comando en el script por:
/usr/bin/mysqldump ...
O busca la ruta exacta con el comando which mysqldump (si tienes acceso SSH).
2. ¿Puedo hacer backup de varias bases de datos a la vez?
Sí, solo tienes que repetir el comando mysqldump dentro del script por cada base de datos que quieras, o usar --all-databases (aunque esto requiere permisos de root, que normalmente no tienes en hosting compartido).
3. ¿Qué pasa si mi hosting usa Syspanel (HestiaCP) en lugar de DirectAdmin?
Si tu proveedor usa Syspanel (antes conocido como HestiaCP), el acceso es por el puerto 2106 (https://tu-dominio.com:2106). La lógica es similar, pero la ubicación de los archivos y la interfaz cambian. En Syspanel, el directorio de backups suele estar en /home/usuario/backups. El comando crontab -e funciona igual, así que el Método 2 de esta guía te servirá perfectamente.
4. El cron se ejecuta, pero no crea el archivo.
Revisa los permisos de la carpeta backups. El usuario que ejecuta el cron (tu usuario) debe tener permisos de escritura en esa carpeta.
chmod 755 ~/backups
5. ¿Cómo restauro un backup si todo falla?
Es el momento de usar tu seguro.
- Accede a phpMyAdmin.
- Selecciona la base de datos original.
- Haz clic en la pestaña Importar.
- Sube tu archivo
.sqly ejecuta. - ¡Listo! Tu web vuelve a la vida.
Conclusión
Automatizar el backup mysql directadmin con un cron no es solo una buena práctica, es una necesidad absoluta. Con los dos métodos que te he mostrado, puedes elegir entre la comodidad de la interfaz gráfica o el control total de la terminal.
No esperes a que sea demasiado tarde. Configura tu cron hoy mismo y duerme tranquilo sabiendo que tus datos están a salvo. Si tienes alguna duda, revisa los logs del script o contacta con tu proveedor de hosting, que para eso estamos.
¡Un saludo y buena suerte con tus backups!
