Backup automatico in MySql

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

mysql

Il blog si è trasferito su www.blog.tugulab.org

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
Crontab

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:

Il blog si è trasferito su www.blog.tugulab.org

    Annunci

    Azioni

    Information

    6 responses

    27 03 2008
    nikaflow

    bello!!!!!!

    28 03 2008
    Antonio

    Complimenti,
    un ottimo lavoro da cui sto prendendo spunto per il mio backup.
    Grazie spero di poter ricambiare un giorno!

    Antonio Angrisani

    28 03 2008
    markus2889

    Grazie ragazzi per i complimenti! Mi fa piacere sapere di essere utile per qualcuno! 😉

    16 04 2008
    Lorenzo

    Semplice, chiaro efficace …e già pronto =) !

    grazie mille.

    13 01 2011
    Cesare

    Grazie la tua guida mi è stata utilissima!! Ciao

    15 03 2012
    Andrea Di Michele

    Grazie molto utile 🙂

    sai mica come posso fare in modo che il dump non si salvi sul mio hardisk ma su un server sftp remoto ?
    il comando per mandare un file al server è:
    scp dump.sql username@username.your-backup.de:dump.sql

    grazie 😀




    %d blogger hanno fatto clic su Mi Piace per questo: