mysqldump è un programma molto utile per effettuare un backup logico di uno o più database MySQL o MariaDB. Tutto quello che fa è esportare una successione di query (come INSERT INTO ..) leggendo rigo-per-rigo le tabelle e scriverle in un file .sql
che può essere poi importato in seguito in un altro database. Naturalmente con mysqldump possiamo scegliere anche un formato diverso, come CSV
o XML
: uno dei vantaggi è che, avendo un singolo file, possiamo modificarlo prima di importarlo o prima di effettuare qualche test.
A livello di performance, fare un backup con mysqldump non è un processo che impegna a fondo la CPU perché usa un single thread. Significa, cioè, che possiamo effettuare un backup anche con un server in produzione, anche sotto carico pesante senza problemi.
Backup di un singolo database
La sintassi del comando base, da usare nella shell, è:
mysqldump [opzioni] > file.sql
Vedremo, in questo articolo, vari esempi per diverse condizioni di utilizzo. Ricordiamoci che sarà sempre necessario fornire l’username e la password dei database che stiamo esportando.
mysqldump -u UTENTE_DATABASE -pPASSWORD_DATABASE NOME_DATABASE > backup.sql
In questo esempio stiamo effettuando il backup del database NOME_DATABASE
. Da notare che è necessario specificare l’utente UTENTE_DATABASE
che ha i permessi di accesso al NOME_DATABASE
e la password che va indicata senza spazio -pPASSWORD_DATABASE
.
Non avendolo specificato nel comando, di default mysqldump si connetterà a localhost
.
In questo caso, nel file backup.sql
avremo un backup completo.
Backup di tutti i database
Nel caso vogliamo fare il backup di tutti database possiamo indicare l’opzione --all-databases
:
mysqldump -u UTENTE_DATABASE -pPASSWORD_DATABASE- all-databases > backup.sql
Backup di database selezionati
Nel caso vogliamo fare il backup di più database possiamo indicare l’opzione ---databases
seguita dai nomi dei database separati da spazio:
mysqldump -u UTENTE_DATABASE -pPASSWORD_DATABASE- --databases NOME_DATABASE1 NOME_DATABASE2 > backup.sql
Backup di un database remoto
Negli esempi precedenti abbiamo dato per scontato che il server fosse localhost
, in sostanza abbiamo eseguito mysqldump sullo stesso server su cui si trova il database. Ci viene data, però, la possibilità anche di eseguire il backup di un database remoto. Questo è molto utile quando vogliamo, per esempio dal nostro computer, eseguire velocemente il backup di un database che si trova, appunto, in remoto e avere il file già sul nostro computer. Per farlo, è sufficiente specificare l’hostname del server con l’opzione --host=HOSTNAME_DATABASE
:
mysqldump -u UTENTE_DATABASE -pPASSWORD_DATABASE- all-databases --host=HOSTNAME_DATABASE > backup.sql
Attenzione: è necessario che il server database accetti connessioni dall’esterno!
Anche se i tre casi proposti copriranno probabilmente il 90% delle vostre esigenze, sono disponibili molte altre opzioni sulla documentazione ufficiale.
Buon backup!