Corsi on-line

Fare il backup di un database MySQL con mysqldump

  • CommentiScrivi un commento
  • ForumDiscuti sul forum
  • Prev
  • NextSELECT con unioni di tabelle utilizzando INNER JOIN

Esistono diversi modi per fare il backup di un database MySQL ma il più diffuso di questi è basato sul'utilizzo dell'utility mysqldump. Si tratta di un programma, nato dal lavoro dello sviluppatore russo Igor Romanenko, grazie al quale è possibile effettuare il dump di un database o di una collezione di database.

Con mysqldump, infatti, è possibile fare una esatta fotografia della struttura e del contenuto del nostro database che ci sarà molto utile in caso di crash, di perdite di dati o qualora vi sia la necessità di trasferire i nostri preziosi dati su un nuovo server. Il dump generato da mysqldump è un insieme di tutte le istruzioni SQL necessarie per ricreare le tabelle e/o popolarle di dati. E' bene ricordare, tuttavia, che mysqldump può anche essere usato per esportare i dati di un database all'interno di file CSV o XML.

L'articolo continua dopo la pubblicità

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 posto di user il nostro utente di MySQL e al posto di db_da_copiare il 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 --databases facendola 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 posto 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
Corsi
  • Corso MS Access
    Corso MS Access
    Impara a creare e gestire database in maniera semplice e veloce. A partire da 29 €
  • Corso MySQL
    Corso MySQL
    Gestione del database open-source. A partire da 49 €
  • Corso SQL e Database
    Corso SQL e Database
    Creazione e gestione di database relazionali. A partire da 29 €
Vedi anche...
Guide