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