Backup di un database MySql

mysql-0

Uno dei metodi più diffusi per effettuare un backup di un database MySql è sicuramente tramite l'utility mysqldump, utility fornita con l'installazione del server MySql e realizzata da Igor Romanenko.

Dopo aver parlato delle query più comuni vediamo come eseguire il backup di un database MySql ed il suo successivo ripristino (restore).

Per la trattazione completa di tutti i comandi, vi rimando alla documentazione ufficiale https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html in questo articolo esamineremo solamente i comandi principali.

Backup di un database MySql

Per effettuare una copia del nostro database è necessario sul nostro server aprire la shell (oppure il prompt dei comandi in caso di server Windows) ed eseguire:

mysqldump -u utente -p database_da_copiare > nomedelbackup.sql

Al posto di utente dovremo inserire il nome utente con cui abbiamo accesso al database, al posto di database_da_copiare il nome del database di cui vogliamo fare la copia, e infine al posto di nomebackup.sql il nome del file dove verrà creata la copia.

In questo file testuale che verrà creato, troveremo tutti i comandi SQL per la ricostruzione dei dati contenuti nel database.

Se vogliamo anche ricreare la struttura del database dobbiamo utilizzare il parametro --databases.

mysqldump -u utente -p --databases database_da_copiare > nomedelbackup.sql

In caso di database di tipo InnoDb consiglio l'aggiunta del parametro --single-transaction in modo da avere una copia consistente dei dati. Se il database invece è di tipo MyIsam bisogna essere sicuri che i dati non vengano modificati durante la procedura di backup e in questo caso il parametro --lock-all-tables viene in nostro aiuto.

Dopo aver confermato questo comando, vi verrà chiesto di inserire la password di accesso al database, è possibile specificarla senza doverla inserire in un secondo momento, basterà inserirla subito dopo il parametro -p, questo metodo è utile se vogliamo ad esempio schedulare una procedura di backup, anche se ovviamente non è una soluzione accettabile in fatto di sicurezza perchè in questo modo esponiamo la password senza nessun criterio di sicurezza. Per questo aspetto vi consiglio di dare una lettura alla documentazione ufficiale https://dev.mysql.com/doc/refman/5.6/en/password-security-user.html dove viene spiegato come proteggere la password di accesso.

mysqldump -u utente -ppassword database_da_copiare > nomedelbackup.sql

Backup di più database MySql

Possiamo eseguire il backup di più database in una sola volta tramite il parametro --all-databases oppure tramite --databases.

mysqldump -u utente -p --all-databases > nomedelbackup.sql

oppure

mysqldump -u utente -p --databases database1 database2 database3 > nomedelbackup.sql

Backup della sola struttura di un database MySql

Possiamo eseguire il backup della sola struttura del database, quindi senza i dati contenuti al suo interno tramite il parametro --no-data

mysqldump -u utente -p database_da_copiare --no-data > nomedelbackup.sql

Backup di una singola tabella di un database MySql

Possiamo eseguire il backup di una singola tabella del database

mysqldump -u utente -p database_da_copiare nome_tabella_da_copiare > nomedelbackup.sql

Altri parametri utili:

  • --no-create-db nel file di backup vengono omessi i comandi di creazione del database.

  • --add-drop-database nel file di backup viene aggiunto il comando di elimiazione del database prima di ricrearlo.

  • --add-drop-table nel file di backup viene aggiunto il comando di cancellazione delle tabelle, prima di ricrearle.

Ripristino (restore) di un backup MySql

Se il backup contiene le informazioni per creare il database o tutti i database digitare

mysql -u utente -p < nomedelbackup.sql

Se invece abbiamo un backup di tutti i database, ma ne vogliamo ripristinare solamente uno, digitiamo

mysql -u utente -p --one-database nome_del_db < nomedelbackup.sql

In caso il database sia già presente, ed abbiamo effettuato una copia dei soli dati, digitare

mysql -u utente -p nome_del_db < nomebackup.sql

Articolo di Alessio