Backups incrementales con Borg

Hola,

Tras una semanas trabajando en ello, he conseguido sustituir los backups de imagen de VPS enteras por copias incrementales de los elementos clave usando el programa borg.

La ventaja de las copias de VPS enteras es que restaurar un servidor es superfácil. La ventaja de las copias incrementales con borg es que:

  1. Las copias ocupan mucho menos.
  2. Al copiar sólo los ficheros nuevos o modificados, la copia de seguridad se hace en mucho menos tiempo (lo que aligera los recursos requeridos).
  3. Podemos almacenar muchas más copias anteriores, lo que puede permitir corregir errores que lleven días acumulados.

He configurado copias de los siguientes servicios (marco los que he podido realizar una recuperación real):

  • Cloud :white_check_mark:
  • Audio
  • Picto
  • Video
  • Social
  • Forum
  • Mail :white_check_mark:
  • Site
  • Blog
  • Lutim

Aquí muestro como ejemplo el script para los backups del servidor cloud (he quitado contraseñas e IPs):

#!/bin/bash


sshfs anartist@XX.XXX.XXX.XX:/home/anartist/borgbackup /root/borgbackup/

export BORG_REPO=/root/borgbackup/cloud
export BORG_PASSPHRASE=''

info () { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

info "Entering Maintenance Mode"
sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --on

info "Starting DB backup"

dbdate=`date +"%Y%m%d-%H%M%S"`
mysqldump --opt --password=XXXXXXXXXX --user=root nextcloud | gzip > /backup/base/nextcloud-sqlbkp_${dbdate}.sql.gz

info "Starting Remote backup"

/usr/bin/borg create --verbose --stats ::backup_$(date +%Y%m%d) /usr/share/nginx/nextcloud-data /usr/share/nginx/nextcloud /backup/base/nextcloud-sqlbkp_${dbdate}.sql.gz /etc/nginx/conf.d/nextcloud.conf

backup_exit=$?

/usr/bin/borg prune --list --show-rc --keep-daily 7 --keep-weekly 4 --keep-monthly 6

prune_exit=$?

# use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit))

if [ ${global_exit} -eq 0 ]; then
    info "Backup and Prune finished successfully"
elif [ ${global_exit} -eq 1 ]; then
    info "Backup and/or Prune finished with warnings"
else
    info "Backup and/or Prune finished with errors"
fi

fusermount -u /root/borgbackup/

info "Eliminating old db"
ls /backup/base/* -trd | head -n -2 | xargs --no-run-if-empty rm

info "Deactivating Maintenance Mode"
sudo -u www-data php /usr/share/nginx/nextcloud/occ maintenance:mode --off

info "Backup Finished"

exit ${global_exit}

Aquí podéis encontrar el código de todos los scripts de backup:

Un saludo!

4 Me gusta

¡Gracias, Marcel!

2 Me gusta

Mil gracias!

1 me gusta

Gràcies, maco!

1 me gusta