Prima di tutto creamoci una cartella /backup, dove raccogliere tutti i backup di tutti i database. Lo spazio deve essere abbastanza grande per accogliere 8 backup per tutti i database che vogliamo aggiungere.
Poi inseriamo in un file nuovo (ad esempio: /etc/cron.d/mysql_backup) lo script seguente:
Codice:
#!/bin/sh
test -x /usr/bin/mysqldump || exit 0
# Rotate and Backup databases
for f in mysql newsletter support sviluppo tools joomla
do
# 1. Delete last backup
src=/backup/$f.sql.8.gz
test -f $src && rm $src
# 2. Rotate old backup
for j in 7 6 5 4 3 2 1; do
k=$(($j+1))
src=/backup/$f.sql.$j.gz
dst=/backup/$f.sql.$k.gz
test -f $src && mv $src $dst
done
# 3. Backup & zip
dst=/backup/$f.sql.1.gz
/usr/bin/mysqldump -uroot -ppassword --databases $f | gzip > $dst
done
exit 0
Nel ciclo for si assegna alla variabile f tutti i nomi dei database dopo in comando in. Il ciclo reale inizia da do e termina con done. Come prima operazione (per ogni database) si elimina l'eventuale ultimo file della serie (8). Così si fa spazio per spostare tutti i file più recenti per una posizione, nel ciclo successivo. Nel ciclo interno, che inizia con 7 e termina con 1, si spostano quindi i file più vecchi verso i più recenti per una posizione. Di conseguenza, un file che si chiama ad esempio mysql.sql.7.gz si chiamerà poi mysql.sql.8.gz e così via.
Infine, si accede al database con un account globale, normalmente root, e si comprime al volo con gzip. Sotto Linux, questo metodo è molto efficiente e non richiede la generazione di file intermedi. Al termine di tutte le operazioni si esce dallo script con l'errore 0. Questo è necessario per evitare che il sistema generi un errore in script successivi o interrompe lo svolgimento di altri script da parte del chiamante.
Salviamo e poi assegniamo il diritto di esecuzione:
Codice:
chmod 755 /etc/cron.d/mysql_backup
Codice:
0 4 * * * root /etc/cron.d/mysql_backup


Sezioni
Categorie