chalda.it
14dic/093

Come effettuare backup di database mysql (Importazione ed Esportazione)

esportazione.mysql

Il metodo più semplice che si può utilizzare per un backup di MySQL è tramite phpMyAdmin oppure Navicat, un paio di click e si ha il proprio backup sul proprio disco fisso.

Il problema nasce quando il database in questione è di notevoli dimensioni. Tali processi possono durare decine di minuti, occupando tempo, banda e fegato :)

Infatti phpMyAdmin tende ad usare molta CPU e non ha nessun riscontro visivo, il che fa impazientire anche i più calmi. Inoltre se per sbaglio non mettiamo l'opzione "Scarica il file compresso" (succede molto spesso) phpMyAdmin ci mostrerà a video tutte le query, occupando una miriade di RAM del nostro PC e nella maggior parte dei casi crashando il nostro browser e quindi rendendo inutile tutto il tempo perso.Navicat invece, da bravo software,  ci mostra a video tutto il progresso, riga per riga. Legge ogni riga del DB e la salva in automatico nel nostro disco fisso. Il problema è che per migliaia e migliaia di dati questo processo risulta essere moooooooolto lento... ed inoltre ci occupa anche tantissima banda, bloccando de facto ogni possibile altro utilizzo di internet.

Quindi, come fare?

La risposta in questi casi è sempre la stessa: tramite terminale.

In pochi secondi possiamo creare un bel file del nostro db, zipparlo e scaricarlo in locale, sempre ricordandoci che un file di testo di 100MB  compresso occuperà massimo 10Mb, con un risparmio di tempo e risorse davvero notevole!

Esportazione / dump / backup di un database MySQL

Per l'esportazione ci viene incontro il comando mysqldump, che come si evince dal nome, crea un dump istantaneo di un database. La sintassi è semplice:

mysqldump -u NomeUtente MioDatabase > dump.`date +%Y%m%d`.sql

Con -u si specifica l'utente con il quale connettersi al vostro database di nome MioDatabase, e poi gli si dice di spedire tutto l'output del comando nel file dump.sql (il comando date inserisce in automatico la data, per dettagli puoi controllare un mio post precedente).

Una opzione carina è –all-databases, la quale crea un dump di tutti i database presenti. Ovviamente con questa opzione non serve specificare nessun database :-)

Sconsiglio di utilizzare l'opzione -p per specificare la password sulla riga di comando in quanto, come si sa, lo storico della bash viene salvato. Ma questo se proprio siete fissati con la sicurezza :-)
In ogni caso se la volete usare ricordatevi di non mettere la spazi tra -p e la password, poiché la sintassi non li vuole :P

Ora non ci resta che comprimerlo velocemente con gzip:

gzip -v9 dump.`date +%Y%m%d`.sql

E il gioco è fatto!

Importazione di un database MySQL

Per l'importazione usiamo il comando mysql. La sintassi è del tutto simile a quella precedente:

mysql -u NomeUtente MioDatabase < dump.sql

Dove dump.sql sarà il nostro file di backup precedentemente generato da mysqldump.
Anche qui valgono le stesse considerazioni per l'opzione -p

Tutto qui, semplice no?

Aggiornamento

Se dovessero presentarsi problemi con le lettere accentate nell'importazione provare con il seguente comando, il quale interpreta il file come utf8:

mysql --default_character_set utf8 -u NomeUtente MioDatabase < dump.sql
Be Sociable, Share!
Commenti (3) Trackback (0)
  1. Ciao, intanto complimenti per l’articolo, volevo chiederti una cosa però, non mi è chiaro come scaricare in locale il file zip generato… riesci mica a spiegarmi meglio?
    Grazie!

  2. non riesco a copiare un dischetto perche mi dice che non è supportato da un database (grazie)

  3. Grazie per la guida! Ho trovato un tool che fa ciò che cercavo: http://www.mysqlsaver.com. Dovendo fare il backup di molti siti mi evita di eseguire la procedura che ho fatto grazie alla tua guida una volta per ogni db…


Leave a comment

Ancora nessun trackback.