Script per il backup di database e webroot
Da tempo ero alla ricerca di uno script semplice e funzionale per effettuare i backup dei propri siti internet in modo automatizzato, che non desse lavoro una volta installato (tipo "installa e dimentica"). Alla fine mi sono imbattuto in questo vecchio post e nel bellissimo script che ancora adesso potete ammirare su quelle pagine.
Naturalmente dovevo modificarlo per le mie necessità, cioè renderlo agnostico riguardo alla directory in cui è installato (basta creare una directory qualunque, buttarci dentro i due file qua sotto e al resto pensa lui) ed effettuare il dump dei database...
Ma bando alle ciance:
#!/bin/bash CURPATH=$( cd $( dirname $0 ) ; pwd ) DIR_BKP="$CURPATH" # ========== CONFIGURATION ============ # file con i pattern da escludere dal backup EXCLUDES="$CURPATH/excludes" # nr di giorni da consevare NDAY=14 # prefisso della directory del backup PRE="backup_dati" # directory da backuppare TARGET="$CURPATH/../" # configurazione dati di accesso al database DBUSERNAME="username" DBPASSWORD="password" DBHOST="host.com" # ==================================== echo "=> Fase 0 ($(date '+%d-%m-%Y %H:%M')): Backup database" mysqldump --opt --user="$DBUSERNAME" --password="$DBPASSWORD" --host="$DBHOST" --all-database | gzip -v > "$DIR_BKP/database.tar.gz" # ==================================== echo "=> Fase 1 ($(date '+%d-%m-%Y %H:%M')): Cambio \ permessi e rimozione del backup piu' vecchio <=" # cambio permessi chmod -R 700 "$DIR_BKP/$PRE."* # Viene eseguita solo alla prima esecuzione if [ -e "$DIR_BKP/$PRE.0" ]; then echo "*" else echo "Prima esecuzione !!!" mkdir "$DIR_BKP/$PRE.0" fi; # rimozione del backup più vecchio if [ -d "$DIR_BKP/$PRE.$NDAY" ] ; then echo " rm -rf $DIR_BKP/$PRE.$NDAY" rm -rf "$DIR_BKP/$PRE.$NDAY" fi # ==================================== echo "=> Fase 2 ($(date '+%d-%m-%Y %H:%M')): Shifto \ di una unita' i backup esistenti <=" while [ $NDAY -gt 1 ]; do NDAY2=$(($NDAY-1)) if [ -d "$DIR_BKP/$PRE.$NDAY2" ] ; then echo " mv $PRE.$NDAY2 $PRE.$NDAY" mv "$DIR_BKP/$PRE.$NDAY2 $DIR_BKP/$PRE.$NDAY" fi; NDAY=$NDAY2; done # ==================================== echo "=> Fase 3 ($(date '+%d-%m-%Y %H:%M')): Creo \ hard link del backup piu' recente <=" if [ -d "$DIR_BKP/$PRE.0" ] ; then echo "cp -al $PRE.0 $PRE.1" cp -al "$DIR_BKP/$PRE.0 $DIR_BKP/$PRE.1" fi; # ==================================== echo "=> Fase 4 ($(date '+%d-%m-%Y %H:%M')): Eseguo \ il backup <=" # Verifica se c'è il file per le esclusioni if [ -r $EXCLUDES ] ; then EXCL="--delete-excluded --exclude-from=$EXCLUDES" else EXCL="" fi; #Comando di backup rsync -av --delete $EXCL $TARGET "$DIR_BKP/$PRE.0" #Sposto il backup del database mv "$DIR_BKP/database.tar.gz" "$DIR_BKP/$PRE.0/database.tar.gz" echo "=> Fase 5 ($(date '+%d-%m-%Y %H:%M')): Cambio i permesi in sola lettura <=" chmod -R 500 "$DIR_BKP/$PRE."* # ==================================== echo "=> FINE ($(date '+%d-%m-%Y %H:%M')) <="
ed impostare nel file "excludes" i files e le directory che si vogliono escludere dal backup:
- backups/ - logs/ - Maildir/ - tmp/ - cms.tar.bz2 - .links/ - .ssh
Fatto! Ora basterà lanciare da shell (o da crontab) lo script in questo modo:
sh backups/bk_daily.sh e al resto penserà lui da solo...