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:
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
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...