Automatización de Copias de Seguridad (Backups) y Cron
1. Objetivo de la práctica #
✔ Crear un script de backup ✔ Guardar los backups con fecha ✔ Automatizarlo cada día ✔ Comprobar que funciona ✔ (Extra) Rotar backups antiguos
2. PARTE 1 - Preparar el entorno #
Crear carpeta para los backups #
Hazlo como root o con sudo:
1sudo mkdir -p /backups/mysql 2sudo chown $USER:$USER /backups/mysql
Comprobamos:
1ls -ld /backups/mysql
3. PARTE 2 - Script de backup manual #
Crear el script #
1nano ~/backup_mysql.sh
Contenido del script:
1#!/bin/bash 2 3 # Variables 4FECHA=$(date +%Y-%m-%d) 5BACKUP_DIR="/backups/mysql" 6DB_USER="root" 7DB_PASS="TU_PASSWORD" 8DB_NAME="TU_BASE_DE_DATOS" 9 10 # Crear backup 11mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/${DB_NAME}_$FECHA.sql 12 13 # Comprobación 14if [ $? -eq 0 ]; then 15 echo "Backup realizado correctamente: $FECHA" 16else 17 echo "❌ Error en el backup: $FECHA" 18fi
⚠️ Ojo didáctico: Aquí estamos poniendo la contraseña en claro → vale para prácticas, pero luego te explico cómo hacerlo bien en producción.
Dar permisos de ejecución #
1chmod +x ~/backup_mysql.sh
Probar el script a mano #
1./backup_mysql.sh
Comprueba:
1ls /backups/mysql
Deberías ver algo como:
1mi_bd_2026-02-09.sql
✔ Si esto funciona, el 80% del trabajo está hecho
4. PARTE 3 - Automatizar con CRON (lo importante) #
Editar el cron del usuario #
1crontab -e
Añadir tarea diaria #
Ejemplo: todos los días a las 02:00 de la madrugada
10 2 * * * /home/angel/backup_mysql.sh >> /backups/mysql/backup.log 2>&1
📌 Traducción:
0 2→ 02:00* * *→ todos los días>> backup.log→ guardamos el resultado
Ver cron activo #
1crontab -l
5. PARTE 4 - Comprobaciones (muy importante en prácticas) #
Forzar ejecución de cron (simulación) #
1run-parts --test /etc/cron.daily
O espera al día siguiente y revisa:
1cat /backups/mysql/backup.log
6. PARTE 5 - Limpieza automática (rotación) #
Borrar backups de más de 7 días #
Añade al final del script:
1# Eliminar backups de más de 7 días 2find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -delete
Resumen del tema
Conceptos clave #
- Volcado Lógico con
mysqldump: extracción de la estructura y datos en formato SQL (mysqldump -u $USER -p$PASS $DB > archivo.sql). - Versionado Temporal: uso de variables de fecha (
$(date +%Y-%m-%d)) para generar nombres de archivo únicos e identificables. - Automatización con Cron: configuración de tareas periódicas mediante
crontab -econ sintaxis de 5 campos (minuto, hora, día del mes, mes, día de la semana) y redirección de logs (>> backup.log 2>&1). - Rotación y Retención Automática: depuración de volcados obsoletos con el comando
find /ruta -type f -name "*.sql" -mtime +7 -delete.
Qué debes recordar #
Un plan de respaldo sólido combina scripts de volcado (mysqldump), programación desatendida con cron y políticas de retención con find -mtime.