Contact me sending an e-mail (antispam defense activated) |
Title: Import ed export/backup di un database Author: Sandro Tosi Last modified: 2007-08-26 (2004-11-13) L'import e l'export sono attivita` importanti della gestione di un database MySQL: consentono, rispettivamente, di caricare dati salvati da altri database (e quindi, per esempio, di mantenere aggiornate piu` server con gli stessi dati) e di effettuarne una copia di backup. Export & Backup =============== Se e` possibile spegnere il database, allora un modo semplice per effettuare il backup dei dati e`: 1. /etc/init.d/mysqld stop 2. cp /var/lib/mysql /path/to/backup-dir 3. /etc/init.d/mysqld start al posto di 'cp', possono essere utilizzati altri comandi, come 'tar', 'bzip2', etc. Se si vuole prendere un backup online del database (per esempio per i backup giornalieri, o perche' non e` possibile spegnere il db) ci sono alcuni comandi che possono essere utilizzati. Il primo di essi e` il comando ``mysqldump'' che consente di salvare un database in un file: # mysqldump -u [user] -p [database] > [script].sql che, dati utente e database, chiedera` la password (si puo` omettere ``-p'' se non e` necessario) e salvera` [database] in un file di testo in cui sono contenute le SQL statements per ricreare la struttura ed i dati del database sorgente Dal momento che il file generato potrebbe essere molto grande, e` possibile comprimerlo "al volo": # mysqldump -u [user] -p [database] | gzip [script].sql.gz E` opportuno uscire da tutte le sessioni sul database prima di eseguire questo comando, in quanto altrimenti potrebbero esserci problemi di consistenza dei dati (in generale, dovrebbe essere in grado di ottenere i lock del caso ed effettuare il dump); e` possibile (a volte consigliato) effettuare un flush dei dati sul disco: # mysql -u [user] -p --silent -e "FLUSH TABLES;" Se, invece, si vuole eseguire una copia ``a caldo'' del database, si puo` utilizzare questo comando: # mysqlhotcopy --user=<user> --password=<secret> \ --allowold <database> <backup_dir> il quale consente di effettuare un backup a db aperto: e` possibile in quanto effettua il lock delle tabelle. In questo caso avremo nella <backup_dir> una nuova directory, di nome <database> che contiene esattamente gli stessi file nella directory del db sulla macchina. Perche' possa essere eseguito, bisogna avere l'accesso ai file delle tabelle che si stanno esportando, ed i privilegi di SELECT e RELOAD su quelle tabelle. L'ultimo comando e` ``mysqlsnapshot'': # mysqlsnapshot -u <user> -p <password> -s <destination-dir> --split -n ("--split" per fare un tar di per ogni database). Purtroppo, sia mysqlhotcopy che mysqlsnapshot effettuano il backup solo delle tabelle ISAM e MyISAM. mysqldump, dal momento che effettua un dump ASCII del database, puo` essere eseguito con qualsiasi tipo di tabella (quindi anche InnoDB) Esempio di uno script di backup ------------------------------- Questo script e` quello che uso ogni notte per effettuare i backup dei miei database: >>> DESTDIR=/home/morph/backup/`date --iso-8601` mkdir -p $DESTDIR # for any db in the db server for db in `mysql -u morph --skip-column-name --silent --exec "show databases"` do mysqldump -u morph --opt $db > $DESTDIR/mysql_$db.sql # --force to overwrite existing files gzip --force --best $DESTDIR/mysql_$db.sql done <<< Non ha controllo degli errori, ma non ha mai dato problemi. Ovviamente, al posto della mia DESTDIR e del mio utente, utilizzate quelli opportuni per la vostra configurazione. Import ====== Una volta fatto l'export, diventa utile conoscere come fare l'import dei dati salvati. Una volta ottenuto il file [script].sql con mysqldump, si puo` importare semplicemente con: # mysql -u [user] -p [database] < [script].sql |