Cómo automatizar respaldos de tu base de datos con un script simple
Un backup manual depende de que alguien se acuerde de hacerlo. Uno automatizado corre solo, todos los días, sin excepciones ni memoria de por medio.
Por qué el backup manual falla, tarde o temprano
No es un problema de disciplina, es un problema de probabilidad. Si un respaldo depende de que una persona lo recuerde cada semana o cada mes, eventualmente habrá una semana donde no se hace: un feriado, una emergencia, simplemente el olvido. El día que el servidor falla suele ser justo ese día. Automatizar el proceso elimina esa dependencia por completo.
La base: un script que respalda y comprime
Este script en bash respalda una base de datos MySQL o MariaDB, la comprime para ahorrar espacio en disco, y nombra el archivo con la fecha exacta del respaldo, así siempre es claro cuándo se generó cada copia:
#!/bin/bash
FECHA=$(date +%Y-%m-%d)
BACKUP_DIR="/backups"
DB_NAME="mi_base_datos"
mysqldump -u usuario -p'CONTRASENA' $DB_NAME | gzip > $BACKUP_DIR/backup_$FECHA.sql.gz
echo "Backup completado: backup_$FECHA.sql.gz"
Prográmalo para que corra solo, todos los días
En Linux, cron ejecuta tareas en horarios programados sin intervención humana. Para correr el script todos los días a las 2:00 AM, la hora de menor uso típica de un servidor:
crontab -e
# Agrega esta linea al final del archivo:
0 2 * * * /ruta/completa/al/script_backup.sh
El formato 0 2 * * * se lee como minuto 0, hora 2, cualquier día del mes, cualquier mes, cualquier día de la semana. En otras palabras, todos los días a las 2:00 AM en punto.
Por qué el backup local no es suficiente
Esta es la regla de respaldo conocida como 3-2-1: al menos 3 copias de tus datos, en 2 tipos de almacenamiento distintos, con 1 copia fuera del sitio físico donde vive el servidor principal. Guardar el respaldo únicamente en el mismo servidor que respalda no protege nada si ese servidor completo falla o es comprometido.
El siguiente paso natural es subir automáticamente cada backup a un almacenamiento externo, usando una herramienta como rclone, que se conecta a servicios como Google Drive, Backblaze o Amazon S3:
# Despues de generar el backup, agregar al mismo script:
rclone copy $BACKUP_DIR/backup_$FECHA.sql.gz remoto:carpeta-backups/
Elimina automáticamente los backups viejos
Sin esta limpieza, la carpeta de backups crece indefinidamente hasta llenar el disco completo. Esta línea elimina backups locales con más de 30 días de antigüedad, conservando espacio sin perder respaldos recientes:
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete
El script completo, de principio a fin
#!/bin/bash
FECHA=$(date +%Y-%m-%d)
BACKUP_DIR="/backups"
DB_NAME="mi_base_datos"
# 1. Crear el backup comprimido
mysqldump -u usuario -p'CONTRASENA' $DB_NAME | gzip > $BACKUP_DIR/backup_$FECHA.sql.gz
# 2. Subir a almacenamiento externo
rclone copy $BACKUP_DIR/backup_$FECHA.sql.gz remoto:carpeta-backups/
# 3. Eliminar backups locales de mas de 30 dias
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete
echo "Backup $FECHA completado y respaldado externamente."
Cómo confirmar que realmente funciona, en lugar de asumirlo
Y verifica que el archivo comprimido se genera correctamente en la carpeta esperada.
En un entorno de prueba separado, nunca directamente en producción.
Revisa que la información esté completa y sin corrupción.
Un backup que nunca se probó es una suposición, no una garantía real de recuperación.
| Escenario | Sin backup automatizado | Con backup automatizado y probado |
|---|---|---|
| El servidor falla hoy | Se pierde todo desde el último backup manual, si es que existe | Se pierde como máximo un día de datos |
| Alguien borra datos por error | Depende de si alguien recordó respaldar antes | Existe una copia reciente lista para restaurar |
Cuándo conviene ir un paso más allá
Para negocios con datos críticos o volúmenes grandes, vale la pena considerar además réplicas en tiempo real de la base de datos, no solo backups periódicos. Eso reduce aún más la ventana de datos que se podría perder ante una falla, aunque añade complejidad de infraestructura que no todo negocio necesita todavía.
¿Tu base de datos no tiene un respaldo automático corriendo?
Configurémoslo →