Cómo hacer un respaldo de base de datos con Bash: tutorial paso a paso

DUGLAS MORENODUGLAS MORENO 👁 32

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 SELECT y LOCK TABLES (por ejemplo, root o 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.

  1. 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
  1. 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 mail dentro del bloque else).
  • Asegurate de que el disco donde guardás los backups tenga suficiente espacio; podés usar df -h para monitorearlo.

Errores comunes y buenas prácticas

Errores comunes

  1. Credenciales en texto plano: dejar la contraseña visible en el script es un riesgo de seguridad. Mejor usá un archivo .my.cnf con permisos 600 o variables de entorno.
  2. Olvidar comprimir: los dumps sin comprimir ocupan mucho espacio; siempre pipe a gzip o xz.
  3. No probar la restauración: un backup que no se puede restaurar no sirve. Hacé pruebas de restauración en un entorno de staging.
  4. No rotar backups: dejar que los archivos crezcan indefinidamente agota el disco. La línea find ... -mtime +7 -delete elimina los más viejos; ajustá el tiempo según tu política.
  5. 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 gpg antes 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 logwatch o 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!

Comentarios (1)

  • J
    Jesus Rangel

    Buena material, me ayudó mucho a entender 😊

Dejá tu comentario