Backup di un database con mysqldump
Vediamo di seguito come utilizzare questo programma per effettuare una copia SQL del nostro DB. Per utilizzare mysqldump entriamo nella shell del nostro server e digitiamo:
mysqldump -u user -p db_da_copiare > backup.sql
Ovviamente dobbiamo inserire al o di user il nostro utente di MySQL e al o di db_da_copiareil nome esatto del database di cui vogliamo fare il backup.
Il database verrà copiato all’interno del file .sql che abbiamo specificato (nell’esempio backup.sql); questo file non è nulla di più di un comune file di testo al cui interno troveremo, come anticipato nell’introduzione di questo articolo, le istruzioni SQL che serviranno per ricostruire le tabelle (CREATE TABLE…) e popolarle con i vecchi dati (INSERT INTO…).
Copiare più database in un colpo solo
Se vogliamo copiare più di un database in un colpo solo possiamo utilizzare l’opzione –databasesfacendola seguire dal nome dei diversi DB che vogliamo copiare separati da uno spazio:
mysqldump -u user -p --databases dbuno dbdue dbtre > backup_di_tre_db.sql
Per copiare tutti i database presenti sul nostro server DB, invece, non sarà necessario elencarli ma sarà sufficiente utilizzare l’opzione –all-databases in questo modo:
mysqldump -u user -p --all-databases > backup_tutti_i_db.sql
Backup di una singola tabella del database
Negli esempi visti sopra abbiamo effettuato il backup di interi database, ma avremmo potuto limitarci ad una sola tabella; in questo caso la sintassi da usare sarebbe stata:
mysqldump -u user -p db_da_copiare nome_tabella > backup.sql
Da segnalare inoltre che l’utility mysqldump per la copia di singole tabelle offre anche la possibilità di utilizzare la clausola WHERE, in questo modo:
mysqldump -u user -p --where="id > 10" db_da_copiare nome_tabella > backup.sql
Nell’esempio qui sopra, infatti, abbiamo effettuato il dump della sola tabella indicata e limitatamente ai record con ID maggiore di 10.
Se si desidera copiare più di una tabella è possibile specificarne un elenco avendo cura di separarle con uno spazio:
mysqldump -u user -p db_da_copiare nome_tabella1 nome_tabella2 nome_tabella3 > backup.sql
Comprimere il backup
Se la base dati da backuppare è molto grande può essere utile eseguire la compressione dell’output prodotto da mysqldump. Per farlo possiamo reindirizzare il risultato prodotto dal programma ad un utility di compressione come GZIP. Ad esempio:
mysqldump -u user -p db_da_copiare | gzip -9 > backup.sql.gz
Altre opzioni interessanti di mysqldump
Oltre a quelle già viste, mysqldump supporta diverse altre opzioni interessanti tra cui:
- –no-data
Effettua il backup solo della struttura (e non dei contenuti del DB); - –no-create-db
Elimina la query di creazione del nuovo database; - –add-drop-database
Aggiunge la sintassi DROP DATABASE prima della sintassi CREATE DATABASE; - –add-drop-table
Aggiunge la sintassi DROP TABLE prima della sintassi CREATE TABLE; - –insert-ignore
Utilizza la sintassi INSERT IGNORE al o di INSERT; - –skip-comments
Non scrive commenti all’interno del dump.
Ripristino di un backup
Una volta creata la copia di backup del nostro DB non ci resta che vedere come effettuare il ripristino. Se nel backup è presente la query per la ricreazione del database sarà sufficiente digitare:
mysql -u user -p < backup.sql
Con la medesima sintassi, ovviamente, è possibile ripristinare il backup di tutti i DB presenti sul server originario:
mysql -u user -p < backup_tutti_i_db.sql
Ovviamente se in fase di backup è stata utilizzata l’opzione –no-create-db bisognerà prima ricreare manualmente i database di destinazione.
Se da un backup contenente una pluralità di DB ne vogliamo ripristinare uno solo, possiamo farlo utilizzando l’opzione –one-database in questo modo:
mysql -u user -p --one-database nome_del_db < backup_tutti_i_db.sql
Per ripristinare i dati di un backup compresso con GZIP, infine, utilizzeremo una sintassi del genere:
gunzip < backup.sql.gz | mysql -u user -p