itaeng

Come ti faccio un backup automatico dei database e lo salvo su dropbox

In questo fine settimana mi sono posto un problema non da poco per un webcoso freelance come me: e se il pc si rompe?

Faccio (quasi) abitualmente il backup dei dati che mi servono, ma il salvataggio dei database è sempre una rottura di scatole e lo faccio... solo quando mi ricordo di farlo. Questo non va bene perchè è un'operazione tediosa e troppo spesso finivo per trascurarla, così dopo aver scritto un piccolo script in bash per un altro motivo, ho deciso di sfruttare la comodità di questo strumento insieme alla figosità di Dropbox per avere un comando che faccia il lavoro sporco per me, lo faccia in automatico e lo faccia in modo sicuro, salvandolo anche online.

In sostanza, quello che fa questo script è effettuare il dump di tutti i database presenti sul mio mysql, eccetto le tabelle "sue", come information_schema, phpmyadmin e mysql, comprimerle tramite bzip2, controllare (basandosi sulla dimensione del file compresso) se ci sono stati dei cambiamenti dall'ultimo salvataggio ed eventualmente salvare il nuovo backup nella mia cartella su dropbox... poca spesa, tanta resa!

Ecco il codice:

#!/bin/bash

##################################
# Mysql backup automatizzato con salvataggio dove ti pare (io uso dropbox).
# Di Emanuele "ToX" Toscano - http://emanuele.itoscano.com/vedi/95

# Requisiti: linux o qualche adattamento per farlo funzionare su windows, non ho idea di come si faccia per mac
# Consigliabile usare dropbox per salvare il file online da qualche parte, ma se non vuoi buon per te
# Utilizzo: Mettilo nella directory in cui vuoi salvare il backup e lancialo. Al resto penserà lui da solo
# Configurazione: la riga numero 20, quella con scritto mysql --user=root è l'unica che forse dovrai toccare per adattarlo alle tue necessità... se hai dubbi google è un portento
##################################

if [ -d "$1" ];
then
	PERCORSO="$1"
else
	PERCORSO=./mysql/
fi

dbs="$(mysql -u root -Bse 'show databases')"

for db in $dbs
do
	if [ $db != "information_schema" ] && [ $db != "mysql" ] && [ $db != "phpmyadmin" ] && [ $db != "performance_schema" ] && [ $db != "test" ];
	then
		# ATTENZIONE: aggiusta i dati della connessione
		mysqldump --user=root $db | bzip2 -c > /tmp/$db.sql.bz2
		mv /tmp/$db.sql.bz2 $PERCORSO
	fi
done

Comodo vero? Se qualcuno avesse consigli su come migliorarlo, naturalmente, i commenti sono li per questo... se qualcuno decidesse di riutilizzarlo in qualche modo faccia pure, ti pregherei solamente di lasciare il mio contatto in cima allo script (ma non verrò a tirarti le coperte la notte se non vorrete farlo, sta a te essere corretto :)