A tutti sarà capitato di dover fare un backup di un database o di una tabella, il modo più immediato per farlo è attraverso l’esporta di phpMyAdmin che però a volte non è sufficiente per le nostre esigenze.
Se avete bisogno di un backup via riga di comando, o di backuppare grandi moli di dati mysqldump fa al caso vostro.
In realtà esiste un tool più veloce che è mysqlhotcopy ma non è altrettanto versatile, per esempio si possono salvare solo tabelle MyIsam, quindi noi andremo a vedere solo mysqldump.
MySqlDump
Il suo utilizzo è molto semplice, ecco un esempio:
mysqldump dbname > nome_file.sql -u tuo_username -p
Questo esempio fa il dump del database "dbname" sul file "nome_file.sql" con username "tuo_username". Vi verrà richiesto l’username.
Se fate il backup di grandi tabelle vi consiglio di usare queste due opzioni:
mysqldump dbname tablename --skip-extended-insert --quick > file_name.sql -u root -p
–skip-extended-insert serve per far creare un singolo insert per ogni record, questo renderà il dump di dimensioni maggiori ma vi sarà molto comodo per reimportare il db, per esempio attraverso bigdump.
–quick è un’opzione indispensabile per tabelle molto grandi (per esempio 2 Gb), infatti evita di mettere in cache i record prima di salvarli sul file di dump, e li scrive direttamente. Questo aiuta molto per la RAM.
tablename: questa non è un’opzione ma è solo per farvi vedere che è possibile specificare quale tabella del db bisogna salvare. E’ una cosa comoda per tabelle di applicazioni diverse o di grandi dimensioni.
Per importare un backup che avete fatto potete eseguire il comando:
mysql < nome_file.sql -u root -p
Se un errore vi segnala che nel dump non è selezionato il database bisogna specificarlo in questo modo:
mysql < nome_file.sql --database db_name -u root -p
Inoltre se state utilizzando windows dovete entrare tramite riga di comando nella cartella bin all’interno della folder in cui è installato mysql e quindi specificare la root completa del file da importare, per esempio:
mysql < C:nome_file.sql --database db_name -u root -p
Potete trovare altri esempi su come copiare l’intero db o come importare i dati da qui: MySql: Backup e Restore
Qui trovate la documentazione ufficiale di mysqldump.
Compressione .tar
Arriviamo ad una parte interessante, meno per altri che hanno già usato questa utility, la compressione con tar.
Prima di tutto vi segnalo che tar di default crea un "archivio" per i file indicati ma non li comprime se non lo specificate!
Compressione .tar.gz (gzip)
tar -czvf nome_archivio_compresso.tar.gz file_da_comprimere.sql
tar è l’utility che stiamo utilizzando per l’archiviazione
-c indica che bisogna creare un nuovo archivio
z indica che vogliamo una compressione gzip
v ci aggiorna sull’andamento della compressione (utile se archiviamo più di un file)
f indica che andreamo a specificare il nome del file
Se non ci fosse stata la z il file sarebbe stato archiviato senza compressione, nel nostro caso sarebbe stato totalmente inutile.
Compressione .tar.bz2 (bzip2)
tar -cjvf nome_archivio_compresso.tar.bz2 file_da_comprimere.sql
j indica che questo file dovrà essere compresso in bzip2
Decompressione
tar -xvfz nome_archivio.tar.gz
x indica che stiamo estraendo un archivio
z indica che stiamo decomprimendo da gzip, togli z e metti j se invece l’archivio era bz2
Meglio gzip o bzip2?
Grazie ai preziosi benchmarks di Lasse Collin possiamo trovare una risposta a questa domanda.
Come al solito… dipende! Direi che in generale gzip è la migliore forma di compressione visto la sua velocità mentre bzip2, che risulta notevolmente più lento come metodo, riesce ad ottenere risultati di compressione migliori, seppur in più tempo.
Se avete bisogno di prestazioni direi gzip, se non vi preoccupate della CPU optate per bzip2 ma avrete una compressione migliore del solo 5%.
Bene, ora sarete in grado di fare un backup tramite mysqldump, comprimerlo e metterlo dove volete.
Buon lavoro!