Backup di un database MySql
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