Tugulab Blog.

Backup automatico in MySql

author avatar

clacla

Un piccolo script per chi è pigro come me e non ha voglia di fare manualmente il backup!

Questo script può essere utile a un web server per fare un backup giornaliero oppure a quelli come me che preferiscono affidare tutto all’affidabilità di uno script!

Per fare tutto ciò utilizzo bash, crontab e la funzione mysqldump fornita con i pacchetti ufficiali di mysql. La sua sintassi è molto semplice:

mysqldump [nome database] -u [utente] > [nomefile]

Nel primo parametro bisogna specificare il nome del datadase di cui si vuole fare il backup, con il parametro -u specifichiamo l’utente con cui ci connettiamo nel nostro caso root. Il simbolo maggiore (>) trasferisce tutto l’output testuale nel file specificato. La funzione non genera un backup binario ma una serie di comandi SQL che sono in grado di ricreare la struttura del database.

Ecco il codice bash:
#!/bin/bash
database=”mysql”
percorso=”/Mysql_backup”
if [ “$database” = “” ] || [ “$percorso” = “” ]; then
echo “Parametro mancante impossibile continuare!”
exit
fi
#controllo esistenza della cartella
if test -d $percorso/$database/
then
# la directory esiste
echo “La directory “$database” esiste!”
else
echo “Creo la directory “$database
mkdir $percorso/$database/
fi
#controllo se il file esiste gia…
if test -f $percorso/$database/$database”_backup_del_`date +%d_%m_%Y-ore_%k_%M`.sql”
then
# errore il file esiste
echo “Impossibile eseguire il backup! Questo file esiste già!”
exit
else
# il file non esiste quindieseguo il baskup
echo “Eseguo il backup”
mysqldump $database -u root > $percorso/$database/$database”_backup_del_`date +%d_%m_%Y-ore_%k_%M`.sql”
fi

Un po’ di righe per controllare che non esista già un file con lo stesso nome e i parametri passati. Apriamo un editor di testo e incolliamoci dentro il codice, modifichiamo secondo le nostre esigenze le due variabili: la prima indica il nome del database la seconda il nome del percorso in cui salvare il file. Salviamo dunque il file come: “backup.sh” sul desktop. Con i privilegi di root creiamo una cartella nel file-sistem la chiameremo Mysql_backup, copiamo all’interno il file bash e diamogli i permessi di esecuzione:

sudo mkdir /Mysql_backup
sudo cp /home/marco/Desktop/backup.sh /Mysql_backup/
sudo chmod +x /Mysql_backup/backup.sh

Crontab è uno strumento molto interessante, è installato di default su tutte le distro, serve per eseguire un determinato comando a una data ora. Apriamo il terminale e scriviamo:

sudo crontab -e

I primi cinque campi su ogni riga specificano con che frequenza e quando eseguire un comando mentre l’ultimo e il percorso del file che dobbiamo eseguire. Ecco alcuni esempi:

‘min’ ‘ora’ ‘Giorno del mese’ ‘mese’ ‘giorno della settimana’ comando da eseguire

  • Per un backup giornaliero: 00 20 * * * /Mysql_backup/backup.sh
  • Per un backup settimanale: 00 20 * * 7 /Mysql_backup/backup.sh
  • Per un backup mensile: 00 20 1 * * /Mysql_backup/backup.sh

Salviamo con la combinazione di tasti Ctrl+O e usciamo Ctrl+X. Scriviamo ora sulla Shell:

sudo crontab -l

Se tutto è andato bene dovrebbe comparire la riga che avete scritto precedentemente su crontab questo significa che funziona correttamente!Bravi!

Ho strutturato lo script in modo che organizzi i file in cartelle, su ogni file è scritta l’ora e il nome del database. E’ possibile recuperare un backup con il seguente comando partendo da un installazione priva di dati (notare il simbolo minore!):

mysql [nome database] -u [utente] < [nomefile]

Fonti: