devdev / in the loop

Esportare un database da riga di comando con mysqldump

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!

Questo articolo ti è stato utile?
Database – LETTURA 3 MINUTI Spostare una colonna in MySQL
Possiamo facilmente spostare una colonna in un database MySQL senza perdere il suo contenuto, grazie al comando ALTER TABLE [..]…
Database – LETTURA 4 MINUTI Rinominare una colonna in MySQL
Se volessimo rinominare il campo di una tabella in un database MySQL, perché magari il nostro progetto è in evoluzione…
Database – LETTURA 4 MINUTI Aggiungere una colonna ad una tabella in MySQL
Per aggiungere una colonna ad una tabella in un database MySQL, dobbiamo utilizzare il comando ALTER. Partiamo creando innanzitutto una…
Database – LETTURA 4 MINUTI Importare backup di un database da riga di comando
Abbiamo visto come fare un backup di MySQL o MariaDB con mysqldump nell’articolo dedicato ed ottenere un backup pronto in…
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.