MySQL - Backup e ripristino di un database da linea di comando

E' possibile effettuare un semplice backup di un database mysql utilizzando l'opzione mysqldump da riga di comando. In un secondo tempo, per ripristinare un database dal backup (ma anche semplicemente per importare un database da un precedente dump) è sufficiente utilizzare il comando mysql.

Per effettuare un backup (dump) del database mioddb nel file miodb.sql è sufficiente scrivere al prompt dei comandi:

mysqldump -u root -p --lock-tables --databases miodb > miodb.sql

L'utilizzo dell'opzione --databases durante il dump anche nel caso di un singolo database, aggiunge in cima al file esportato i comandi di creazione e selezione del DB:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `miodb` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `miodb`;

cosa che può risultare comoda quando poi andiamo ad importare il dump del database. In effetti tale opzione è pensata per esportare un elenco di database:

mysqldump -u root -p --lock-tables --databases miodb1 miodb2 miodb3 > mieidbs.sql

Per quanto riguarda invece l'mportazione od il ripristino del database, niente di più semplice:

mysql -u root -p < miodb.sql

Possiamo specificare il database in cui importare il dump (nel caso il dump sia stato effettuato senza l'opzione --databases) utilizzando l'opzione -D o --database=

mysql --database=miodb -u root -p < miodb.sql

Per fare un backup di tutti i database presenti nel nostro server, l'opzione da usare è la seguente:

mysqldump -u root -p --lock-tables --all-databases > backup.sql

Se si desidera invece esportare solo alcune tabelle (in particolare tab1 tab2 e tab3) del database miodb, il comando da usare è il seguente:

mysqldump -u root -p --lock-tables --databases miodb tab1 tab2 tab3 > backup_tables_miodb.sql

Se invece si desidera esportare l'intero database ad eccezione di alcune tabelle, l'opzione da utilizzare è --ignore-table=database.table; è necessario ripetere tale opzione per ciascuna tabella che si desidera escludere. Se riscriviamo l'esempio precedente ipotizzando di voler escludere le tabelle tab1, tab2 e tab3 del database miodb si ottiene:

mysqldump -u root -p --lock-tables --databases miodb --ignore-table=miodb.tab1 --ignore-table=miodb.tab2 --ignore-table=miodb.tab3 > backup_tables_miodb.sql

Le opzioni utilizzabili con mysqldump sono parecchie, quindi è sempre bene dare un'occhiata all'help, mysqldump --help.