Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Utilità MySQL: Backup e Restore

MySQL: Backup e Restore

E-mail Stampa PDF

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@linux /]# mysqlhotcopy miodatabase /backup-db/

In questo esempio il contenuto del database miodatabase presente in /var/lib/mysql/miodatabase 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@linux backup-db]# mysqldump miodatabase > miodatabase_dump_db.sql -u root -p 
Enter password: miapass 
In questo caso viene eseguito il dump del database miodatabase 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@linux backup-db]# mysqldump --database miodatabase mysql > miodatabase_mysql_new_db.sql -u root -p 
Enter password: miapass 
Utilizzando l'opzione --database si esegue il dump dei detabase indicati, in questo caso miodatabase e mysql  
[root@linux backup-db]# mysqldump --all-database > miodatabase_new_db.sql -u root -p 
Enter password: miapass 
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 già' 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@linux backup-db]# mysqldump --opt miodatabase > miodatabase_dump_db.sql -u root -p 
Enter password: miapass 
--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@linux /]# cp -R /backup-db/miodatabase /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@linux backup-db]# mysql < miodatabase_dump_db.sql -u root -p 
Enter password: miapass 
Come utente root, si passa a mysql in input lo script che permette di ripristinare il contenuto del database 
[root@linux backup-db]# mysql --one-database miodatabase < 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