[Linux] Il backup intelligente… spero…

binbashIn questi giorni mi sto divertendo un mondo a scriptare la shell 🙂 . La cosa più difficile è sicuramente decidere la procedura giusta! Nella gestione di un’applicazione web il cui database contiene dati sensibili, cosa è meglio fare dei backup?

Ha senso tenere una miriade di backup sul server? A mio parere no. Conservare i file di backup all’interno dell’applicazione backuppata rompe il paradigma di controllato <=> controllante che sta alla base del buon funzionamento di un sistema. E’ un po’ come il firewall interno di windows: ci si può fidare di un sistema che controlla se stesso?

Allo stesso modo: se faccio un backup è perchè il server potrebbe "rompersi". Conservare tutto sul server può essere rischioso. Fra l’altro non voglio riempire la mia home di backup.

La soluzione scelta è la seguente: fare un backup, mantenendo solo l’ultimo backup sul server ed inviandolo via mail ad una casella di posta esterna (che scarico in locale su un’altra macchina).

Per inviare una mail con allegato da shell si può utilizzare il comando:

mail email@dominio.it -s "subject" < /path/file.ext

Ma questo crea problemi, dato che l’allegato /path/file.ext verrà inserito nel corpo del messaggio. Va bene se inviamo un log, ma se dobbiamo inviare dati binari (ed un backup sql compresso gzip lo è) dobbiamo usare un client apposito. Fortunatamente ci viene in soccorso mutt che con l’opzione -a ci permette di allegare al messaggio un qualsiasi file binario!

Di seguito lo script.

#!/bin/bash
DATE=`date +%d-%m-%Y`

#Se esiste un file di backup precedente lo elimino
if test -e /root/backup/backup.sql.gz
then
rm /root/backup/backup.sql.gz
fi

#Faccio il backup del database
mysqldump nomeDB -u -p | gzip -c – > /root/backup/backup.sql.gz

#Scrivo nel file mail.txt il testo della mail
echo "Mail backup database datato $DATE.
Inviata in automatico dal sistema.

Si prega di non rispondere." > mail.txt

#Invio la mail con l’allegato
mutt -s "Backup" -a /root/backup/mandala.sql.gz davide@mandala-tour.com -i /root/mail.txt < /dev/null

#Svuoto il file mail.txt
#Forse inutile, ma lo spazio
#costa e l’uso del file è volatile 🙂
cat /dev/null > mail.txt

exit

Non sarà il massimo, ma per ora è quello che mi è venuto in mente e sembra funzionare 😉

2 thoughts on “[Linux] Il backup intelligente… spero…”

  1. Non so se hai mai sentito parlare di backUp incrementale ; in sostanza la tecnica funziona in questo modo :

    – una volta al mese si fa un backUp completo del DB (montly backup )

    – una volta al giorno si fa il backup dei soli dati aggiunti o modificati rispetto al giorno prima ( daily snapshot )

    – una volta alla settimana si fa il backup dei soli dati che sono variati durante la settimana precedente (weekly snapshot )

    In questo modo si ottengono due obiettivi : 1. si risparmia spazio perche’ il backup dell’intero DB non viene fatto troppo frequentemente
    2. in caso di problemi al DB, è sempre possibile ripristinare lo stato in cui si trovava nel giorno precedente.

    Saluti ; - )

  2. Per database di grandi dimensioni può andare.
    Per il mio non va, dato che parliamo di pochi (fondamentali) kb 🙂

    Però è bellino! Grazie mille. Felicissimo di avere feedback del genere 🙂

Comments are closed.