Curso de servidores linux

🎯 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


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

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


🧩 PARTE 3 – Automatizar con CRON (lo importante)

5️⃣ 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

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

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