Tag: mysql

  • Dump database Mysql/Maria DB in file separati

    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.

  • Backup di tutti i database mysql

    Backup di tutti i database mysql

    Talvolta capita di dover cambiare pc o semplicemente cambiare versione del proprio virtual web server locale preferito. Sia esso Xamp, Mamp o Wamp il concetto è sempre lo stesso. Dobbiamo trasportare i database da un posto ad un altro.

    Problema

    Ho più database sul mio mysql (locale o remoto) di cui devo ottenere un backup. Il comando che segue ci consente di effettuare questa operazione da linea di comando è il seguente:

    mysqldump -u NOME_UTENTE -p NOME_DATABASE > /percorso/dove/salvare/ildatabase.sql

    Come si può facilmente notare in questo modo sarà creato un dump del singolo database mysql in un file .sql.

    Tuttavia talvolta è necessario esportare tutti i database presenti su mysql. A tale scopo si rende indispensabile creare uno script.

    Soluzione

    È possibile creare uno script che con pochi comandi adempia al compito desiderato: esportare tutti i database mysql con uno script.

    Lo script verrà inserito in un file con estensione .sh, che è possibile eseguire sia su Windows, sia ovviamente su Linux e Mac.

    Su Windows è possibile farlo con la bash di git o cygwin, in linux eseguendo da riga di comando

    sh nomescript.sh
    
    oppure
    
    bash nomescript.sh

    a seconda dell’interprete che si desidera utilizzare.

    Ma veniamo alla soluzione riportata direttamente dal blog di Daniel Dvorkin:

    #!/bin/bash
     
    USER="DATABASE_USERNAME"
    PASSWORD="DATABASE_PASSWORD"
    OUTPUT="/path/to/backup/folder/"
     
    rm "$OUTPUT/*gz" > /dev/null 2>&1
     
    databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
     
    for db in $databases; do
        if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then
            echo "Dumping database: $db"
            mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
            gzip $OUTPUT/`date +%Y%m%d`.$db.sql
        fi
    done

    Una volta inserito in un file di testo, con estensione “sh”, lanciando questo script consentirà di creare un file tar.gz contentente un file .sql per ciascun database presente nel proprio mysql.

    È possibile ottenere file zippati con un altro sistema o non compressi affatto semplicemente intervenendo sulla riga dello script che comincia con “gzip” (cancellandola ad esempio si otterrà un file .sql non compresso).

    Si noti che la cartella di destinazione deve esistere prima di lanciare lo script, che altrimenti potrebbe fallire miseramente.

    Ho testato la soluzione e devo dire che mi è stata molto utile in quanto pratica e veloce.

    Ora devo cercare/scrivere uno script per caricare tutti i database siffatti da una cartella ai database veri e propri, ma questo sarà un’altro post.