Come eseguire un export su file di tutti i database su un server Mysql da riga di comando.
Avevamo già parlato di come effettuare il backup di tutti i database mysql per mezzo di uno script bash, ma di recente un mio collega mi ha segnalato una soluzione, che secondo me è molto più elegante.
Si tratta di un singolo comando da eseguire sulla linea di comando con i pipe (questo è il pipe “|”).
Ecco il comando:
mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; [[ $? -eq 0 ]] && gzip "$dbname".sql; done
Vediamo i comandi nel dettaglio; per farlo scriviamo sulla cli quanto segue:
mysql --help
-N, –skip-column-names
Don’t write column names in results.
L’opzione -N non fornisce in output il nome della colonna, nel nostro caso la lista dei database sarà quindi priva di intestazione ed utilizzabile nel while successivo al primo pipe.
-e, –execute=name Execute command and quit. (Disables –force and history
file.)
L’opzione -e, consente di eseguire il comando tra apici, ovvero “‘show databases'”.
La parte che segue il pipe (“|”) prende come input l’output di quello che lo precede, consentendo di effettuare un ciclo while sul nome di ogni database e di fare un dump con il comando mysqldump.
Forse si può fare meglio, ma il kata-programming non va abusato e chi si accontenta gode!
Detto questo se vi mettete a smanettare con quello script, postate tutto nei commenti.