Cómo hacer un respaldo de base de datos con Bash: tutorial paso a paso
Introducción
En este tutorial vas a aprender a crear un respaldo automático de una base de datos MySQL/MariaDB usando solo líneas de Bash. El objetivo es que al final tengas un script que podés programar con cron para que se ejecute cada noche, garantizando que tus datos estén seguros sin intervención manual.
Requisitos previos
- Un servidor Linux con acceso a la terminal.
- MySQL o MariaDB instalado y en ejecución.
- Usuario de la base de datos con privilegios de
SELECTyLOCK TABLES(por ejemplo,rooto un usuario dedicado). - Espacio en disco suficiente para guardar los archivos de respaldo.
Paso 1: Crear el script de respaldo
Primero, vamos a escribir un script Bash que haga el volcado (dump) de la base de datos y lo comprima con gzip.
- Abrí tu editor favorito y creá un archivo llamado
backup_db.sh:
#!/usr/bin/env bash
# Configuración
DB_NAME="mi_base"
DB_USER="usuario_backup"
DB_PASS="tu_contraseña_secreta"
BACKUP_DIR=\"${HOME}/db_backups\"
TIMESTAMP=\"$(date +%Y%m%d_%H%M%S)\"
FILE_NAME=\"${DB_NAME}_${TIMESTAMP}.sql.gz\"
# Crear el directorio de destino si no existe
mkdir -p \"${BACKUP_DIR}\"
# Ejecutar mysqldump y comprimir
mysqldump --user=\"${DB_USER}\" --password=\"${DB_PASS}\" \"${DB_NAME}\" | gzip > \"${BACKUP_DIR}/${FILE_NAME}\"
# Verificar que el comando haya tenido éxito
if [[ $? -eq 0 ]]; then
echo \"Respaldado con éxito: ${FILE_NAME}\"
else
echo \"Error al realizar el respaldo\" >&2
exit 1
fi
# Opcional: eliminar backups más antiguos de 7 días
find \"${BACKUP_DIR}\" -name \"${DB_NAME}_*.sql.gz\" -type f -mtime +7 -delete
- Guardá el archivo y dale permisos de ejecución:
chmod +x backup_db.sh
Paso 2: Probar el script manualmente
Antes de automatizarlo, ejecutá el script para asegurarte de que funciona:
./backup_db.sh
Deberías ver un mensaje como "Respaldado con éxito: mi_base_20250926_023015.sql.gz" y el archivo aparecerá en ~/db_backups/. Descomprimí uno para verificar su contenido:
zcat ~/db_backups/mi_base_20250926_023015.sql.gz | head -20
Paso 3: Automatizar con cron
Para que el respaldo se ejecute todos los días a las 02:30 am, agregá una entrada en tu crontab:
crontab -e
Y añadí la siguiente línea:
30 2 * * * /ruta/al/script/backup_db.sh >> /var/log/db_backup.log 2>&1
Esto redirige tanto la salida estándar como el error a un archivo de log, útil para depurar problemas.
Paso 4: Verificación y monitoreo
- Revisá periódicamente el log:
tail -f /var/log/db_backup.log. - Configuré una notificación por correo si el script falla (por ejemplo, usando
maildentro del bloqueelse). - Asegurate de que el disco donde guardás los backups tenga suficiente espacio; podés usar
df -hpara monitorearlo.
Errores comunes y buenas prácticas
Errores comunes
- Credenciales en texto plano: dejar la contraseña visible en el script es un riesgo de seguridad. Mejor usá un archivo
.my.cnfcon permisos 600 o variables de entorno. - Olvidar comprimir: los dumps sin comprimir ocupan mucho espacio; siempre pipe a
gzipoxz. - No probar la restauración: un backup que no se puede restaurar no sirve. Hacé pruebas de restauración en un entorno de staging.
- No rotar backups: dejar que los archivos crezcan indefinidamente agota el disco. La línea
find ... -mtime +7 -deleteelimina los más viejos; ajustá el tiempo según tu política. - Ejecutar como root innecesario: usá un usuario dedicado con los mínimos privilegios requeridos.
Buenas prácticas
- Encriptar: si los backups contienen datos sensibles, considera encriptarlos con
gpgantes de guardarlos. - Almacenamiento externo: copia los archivos a un servidor remoto (rsync, scp) o a un servicio de almacenamiento en la nube inmediatamente después de crearlos.
- Monitoreo de salud: integra la verificación del log con un sistema de alertas (por ejemplo, usando
logwatcho una herramienta como Prometheus + Alertmanager). - Documentar: mantené un README dentro del directorio de backups que explique la frecuencia, retención y procedimiento de restauración.
- Versionar el script: guardá el script en un repositorio Git para poder rastrear cambios y volver atrás si algo sale mal.
Conclusión
Con estos pasos ya tenés un respaldo de base de datos confiable, automatizado y mantenible usando solo Bash. Recuerda siempre probar la restauración y revisar los logs; la verdadera seguridad de un backup se mide por su capacidad de ser recuperado cuando más lo necesitás. ¡Éxitos con tus copias de seguridad!
DUGLAS MORENO
Buena material, me ayudó mucho a entender 😊