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