MySQL: Backup e Restore

Come effettuare il backup ed il restore dei database gestiti con MySQL.

BACKUP  
I principali tool messi a disposizione all'amministratore di MySQL per effettuare il backup dei propri dati sono due: mysqlhotcopy e mysqldump.

mysqlhotcopy
mysqlhotcopy è uno script, scritto in linguaggio Perl, che, basandosi sul comando cp, effettua la copia "grezza" di un database, semplicemente copiando il contenuto della relativa directory dati, in un altro luogo sullo stesso sistema. La sua caratteristica principale è la velocità.  
Esempio:  
[root@vagante /]# mysqlhotcopy arnaldoz /backup-db/

In questo esempio il contenuto del database arnaldoz presente in /var/lib/mysql/arnaldoz viene copiato nella directory /backup-db   

mysqldump
Mysqldump è un'utility che presenta alcuni vantaggi rispetto a mysqlhotcopy, ed quindi è maggiormente utilizzata. Essa genera un file ASCII contentente istruzioni SQL (CREATE TABLE, CREATE DATABASE ecc.) che permettono di ricreare completamente un database. Questo metodo permette di utilizzare lo script su qualsiasi piattaforma, ottenendo quindi una soluzione portabile. La seconda importante caratteristica è la flessibilità, modificando lo script prodotto, è possibile il ripristino anche di una sola tabella. Infine mysqldump permette di effetture il dump di un database da remoto.  
Esempi:
[root@vagante backup-db]# mysqldump arnaldoz > arnaldoz_dump_db.sql -u root -p  
Enter password: db3mendo
  
In questo caso viene eseguito il dump del database arnaldoz generando le relative instruzioni nel file arnaldo_dump_db.sql. E' necessario comunicare a mysqldump che si utilizzerà l'utente amministratore -u root con la relativa password -p  
[root@vagante backup-db]# mysqldump --database arnaldoz mysql > arnaldoz_mysql_new_db.sql -u root -p  
Enter password: db3mendo
  
Utilizzando l'opzione --database si esegue il dump dei detabase indicati, in questo caso arnaldoz e mysql   
[root@vagante backup-db]# mysqldump --all-database > arnaldoz_new_db.sql -u root -p  
Enter password: db3mendo
  
Con l'opzione --all-database viene generato lo script per la creazione di tutti i database presenti sul server  

E' importante notare che utilizzando l'opzione --database o --all-database nello script sql generato vengono incluse anche le istruzioni per creare il database (CREATE DATABASE), mentre negli altri casi, si presuppone che il database sia gia' esistente, di conseguenza viene generato uno script SQL che si occupa solamente di ricreare le tabelle.

Per effettuare la copia di un database nel modo più veloce ed affidabile possibile, è consigliato di utilizzare l'opzione di mysqldump --opt, la quale abilita automaticamente diverse altre opzioni quali --quick, --add-drop-table,--add-locks,--extended-insert, e--locktables:  
[root@vagante backup-db]# mysqldump --opt arnaldoz > arnaldoz_dump_db.sql -u root -p  
Enter password: db3mendo
  
--quick: effettua il dump direttamente sullo standard output;  
--add-drop-table: inserisce le istruzioni di eliminare le tabelle esistenti prima di ricrearle;  
--add-locks: blocca momentaneamente gli eventuali inserimenti;  
--extended-insert: utilizza un metodo per velocizzare l'inserimento dei dati;  
--lock-tables: blocca momentanteamente le tabelle in lettura;  


RESTORE  
Qualora il backup del database sia stato fatto con mysqlhotcopy, il restore avviene, dopo aver fermato il server, copiando il contenuto del file di backup nella directory dati di MySQL:  
[root@vagante /]# cp -R /backup-db/arnaldoz /var/lib/mysql

Per il restore di un database di cui si è fatto il backup con mysqldump è possibile utilizzare l'utility di console mysql.

Alcuni esempi:  
[root@vagante backup-db]# mysql < arnaldoz_dump_db.sql -u root -p  
Enter password: db3mendo
  
Come utente root, si passa a mysql in input lo script che permette di ripristinare il contenuto del database  
[root@vagante backup-db]# mysql --one-database arnaldoz < all_db_joker.sql -u root -p   
In questo caso sebbene lo script serva per ripristinare un elenco di database, tramite l'opzione --one-database viene specificato solo un database

Privacy Policy