Se nel nostro scenario di backup con Borg abbiamo necessità di eseguire anche il backup dei nostri database, possiamo seguire uno dei due modi presenti in questa guida.
Premessa importante
Anzitutto è necessario fare un piccolo preambolo. Un metodo, che ho visto spesso applicare, è quello di copiare la directory dove il DBMS salva i dati interni del database. Mi sento di NON consigliare questa strategia in quanto non è sicuro eseguire una copia di quei file mentre il servizio del DBMS è in esecuzione. Quindi, a meno che non si voglia stoppare preventivamente il database service durante il backup (creando così un’interruzione del servizio), è meglio considereare un altro approccio. Vediamo qui di seguito come poter fare.
Backup del DB utilizzando Borgmatic e il suo Database Hook
Nel caso si stia già utilizzando il binomio Borg con Borgmatic e il database è di grandi dimensioni, è consigliabile utilizzare i Database Hook integrati in Borgmatic per scaricarne il contenuto e includerlo nel backup.
Per eseguire il dump di tutti i DB MySQL e Postgres prima di ogni backup utilizzare il seguente snippet:
hooks:
postgresql_databases:
- name: all
mysql_databases:
- name: all
Il vantaggio dell’applicare questa tecnica è che il dump del DB viene letto tramite una pipe e quindi mai scritto su disco, rendendo questo processo eseguibile anche negli scenari in cui lo spazio su disco della macchina di cui si esegue il backup non è sufficiente per contenere il backup stesso.
Riferimenti
Backup del DB utilizzando uno script di dump
/var/lib/automysqlbackup
. Possiamo quindi eseguire questo script prima del backup con Borg e includendo la cartella che contiene i file di dump. Ipotiziamo quindi di eseguire il dump del DB ogni giorno alle 2:00 del mattino ed eseguire successivamente alle 2:15 del mattino il backup con Borg. Per fare ciò la nostra crontab sarebbe la seguente:
00 02 * * * /usr/sbin/automysqlbackup
15 02 * * * /home/alessandro/borg_launcher.sh
Ed il nostro script di backup assomiglierebbe al seguente:
#!/bin/bash
export BORG_REPO=ssh://...
export BORG_PASSPHRASE=your-borg-passphrase
export BORG_RSH='ssh -oBatchMode=yes -i /home/alessandro/.ssh/[your-borg-ssh-key]'
date=$(date +%Y%m%d-%H%M)
archive_name="$date-full-backup"
echo "$(date +%Y-%m-%d) $(date +%H:%M) BACKUP STARTED"
echo "$(date +%Y-%m-%d) $(date +%H:%M) ARCHIVE NAME $archive_name"
borg create --stats ::$archive_name \
/var/www/ \
/var/lib/automysqlbackup/
echo "$(date +%Y-%m-%d) $(date +%H:%M) BACKUP FINISHED"
echo