Backup mysql database automatico

Hai bisogno di eseguire un backup mysql del tuo database giornalmente e vorresti anche copiare il file in un server remoto in modo da essere certo di avere sempre una copia di sicurezza del tuo ambiente.

Bene ti spiegherò come farlo.

Per prima cosa il comando da eseguire per fare il dump è simile a questo:

mysqldump -u USERNAME -pPASSWORD NOMEDB > ./backup_NOMEDB$(date +"%Y-%m-%d").sql

Dove USERNAME è l’utente del db, PASSWORD è la password dell’utente, NOMEDB è il nome dello schema. E infine backup_NOMEDB$(date +”%Y-%m-%d”).sql è il nome del file di backup.

Il file verrà prodotto con la data nel formato anno mese, giorno.

Se vogliamo comprimere il nostro dump con gzip potremo modificare lo script in questo modo

mysqldump -u USERNAME -pPASSWORD NOMEDB | $(which gzip) -9 > ./backup_NOMEDB$(date +"%Y-%m-%d").sql.gz

A questo punto abbiamo il nostro file e con il comando scp possiamo copiarlo su un server linux remoto.

Per automatizzare la copia remota e non richiedere la password devi configurare SSH per accedere senza password utilizzando le chiavi SSH. Leggi il mio articolo a riguardo SSH senza password

Lancia ora il comando di copia

scp ./backup_NOMEDB$(date +"%Y-%m-%d").sql.gz userremoto@ipserverremoto:./backup_NOMEDB$(date +"%Y-%m-%d").sql.gz

A questo punto per automatizzare il processo possiamo per esempio attivare un crontask all’una di notte che segue il dump e effettua la copia.

Il comando da aggiungere al crontab è una cosa del tipo:

0 1 * * * mysqldump -u USERNAME -pPASSWORD NOMEDB > ./backup_NOMEDB$(date +"%Y-%m-%d").sql | scp ./backup_NOMEDB$(date +"%Y-%m-%d").sqluserremoto@ipserverremoto:./backup_NOMEDB$(date +"%Y-%m-%d").sql

In questo modo molte semplice ci preveniamo nel caso fortuito di crash completo del db mysql e quindi perdita dell’intero blog.