Hasta ahora hemos visto por separado cómo hacer copias de seguridad de archivos con rsync, de bases de datos con mysqldump y cómo automatizarlas con cron. Aquí juntamos las piezas en un script que hace una copia completa del servidor.
El script crea un directorio con la fecha del día, vuelca la base de datos y copia los archivos del sitio:
#!/bin/bash
FECHA=$(date +%Y-%m-%d)
DESTINO="/mnt/backup/$FECHA"
DB_USUARIO="root"
DB_PASSWORD="contraseña"
DB_NOMBRE="nombre_bd"
mkdir -p "$DESTINO"
mysqldump -u "$DB_USUARIO" -p"$DB_PASSWORD" "$DB_NOMBRE" | gzip > "$DESTINO/bd.sql.gz"
rsync -a /var/www/ "$DESTINO/www/"
Guardamos el script en /usr/local/bin/backup.sh y le damos permisos de ejecución:
chmod 755 /usr/local/bin/backup.sh
Y lo añadimos a cron para que se ejecute cada noche:
0 2 * * * /usr/local/bin/backup.sh
Para que el script funcione en cron sin problemas, conviene usar rutas absolutas para todos
los comandos. Si el disco externo no está montado en /mnt/backup/, mkdir -p fallará
silenciosamente y no se creará la copia. Podemos añadir una comprobación al inicio del
script:
if [ ! -d /mnt/backup/ ]; then
echo "Disco de backup no disponible" && exit 1
fi
Para las copias remotas en lugar de un disco externo, rsync sobre SSH con clave pública funciona de la misma manera.