KheperlabKheperlab
Tutoriales

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"
Seguridad: nunca dejes la contraseña escrita directamente en el script si vas a subirlo a un repositorio de código. Usa variables de entorno o un archivo de configuración separado que esté excluido del control de versiones con .gitignore.

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.

Base de datos en producción
→
Backup comprimido local
→
Copia subida a almacenamiento externo

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

Ejecuta el script manualmente una vez
Y verifica que el archivo comprimido se genera correctamente en la carpeta esperada.
Descarga ese backup y restáuralo
En un entorno de prueba separado, nunca directamente en producción.
Confirma que los datos restaurados son correctos
Revisa que la información esté completa y sin corrupción.
Repite esta prueba de restauración cada pocos meses
Un backup que nunca se probó es una suposición, no una garantía real de recuperación.
EscenarioSin backup automatizadoCon backup automatizado y probado
El servidor falla hoySe pierde todo desde el último backup manual, si es que existeSe pierde como máximo un día de datos
Alguien borra datos por errorDepende de si alguien recordó respaldar antesExiste 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 →