Premessa: Tempo fa persi diversi database di siti che stavo sviluppando, rimanendo con solo dei backup di qualche giorno prima, così qualche giorno fa ho deciso di provare a fare uno script che, all'avvio, mi effettui il backup di tutti questi database mettendoli in una directory sincronizzata con dropbox.
Lo script funzionava bene ma mi creava un unico file gigante con dentro il backup di tutti i database messi insieme. Tutto bello ma se mi fosse servito uno solo di quei database era un casino ripristinarlo...
Così ho riscritto lo script, che funziona fin troppo bene... vorrei escludere alcuni database però
Questo è lo script:
I backup li fa correttamente ed è di una comodità inverosimile utilizzato insieme a dropbox, però c'è modo di dire allo script di ignorare i database "di sistema" come information_schema, mysql e phpmyadmin? Non per altro, ma lanciandolo da riga di comando si incazza sempre un po' quando trova information_schema...codice:dbs="$(mysql -u root -Bse 'show databases')" for db in $dbs do # ATTENZIONE: aggiusta i dati della connessione mysqldump --user=root $db | bzip2 -c > /tmp/$db.sql.bz2 # Se non era mai stato fatto un backup di questo database lo sposto senza pensarci troppo if [ ! -f ./mysql/$db.sql.bz2 ]; then mv /tmp/$db.sql.bz2 ./mysql/ else # Altrimenti prendo le dimensioni del vecchio file di backup e di quello nuovo FILEOLD=$(stat --printf="%s" ./mysql/$db.sql.bz2) FILENEW=$(stat --printf="%s" /tmp/$db.sql.bz2) # Se le dimensioni sono le stesse cancello il nuovo backup e lascio il vecchio, per non far lavorare inutilmente dropbox, altrimenti sovrascrivo quello vecchio if [ $FILENEW = $FILEOLD ]; then rm /tmp/$db.sql.bz2 else rm ./mysql/$db.sql.bz2 mv /tmp/$db.sql.bz2 ./mysql/ fi fi done