Ukázka zálohování "důležitých" data


Doplnění k Zálohování XEN strojů Záloha vytváří adresář pro každý den obsahující jednotlivé zálohy.
Záloh je v tomto případě uchováno bezpečně 14dí starých ... 14 někdy může být 15 adresářů (dle času spuštění viz 'man find' a '/-atime') :)
Zálohy se promazávají pomocí přkazu
find ./ -depth -mtime +13 -path "./2*" -delete
což znamená smaž všecho starší 14ti dnů (13 je v tomto případě 14 - heč a viz 'man find'). Zápise ja takový krkolomný a jakože bezpečný, fungující ale jen v 3. tisíciletí. Prostě kdyby náhodou, smaže jen to co začíná './2' a zálohy začínají rokem :).
Soubory mají novější datum a nemusí být (teroteticky, ¡anebo! při testech v různých časech) vyhodnoceny ke smazání, ale nadřazený adresář ano (obecný trouble kombinace parametrů -delete a -xtime), tudíž to zklame, proto je možná lepší použít zápis:
find ./ -maxdepth 1 -type d -mtime +13 -path "./2*" -exec rm -rf {} \;
mně automatické 'rm -rf' na root-a děsí :o).
Optimistická volba je přistoupit k nevyhodnocování následné návratové hodnoty tohoto příkazu a případný 'exit' odstranit. Pokud je vše správně nastaveno, smaže se to následný den :)

V případě neúspěchu je zapsáno do logu a odeslán email pomoci '/usr/bin/mailx'.
Jedná se o zálohu: Někdo by ještě doplnil zálohu '/usr/local/' případně nějakého podadresáře (kde je třeba umístněn i tento skript :)).
#!/bin/bash
ADMIN="jmeno@domena.primarni jmeno@domena.zalozni"
HOSTNAME=`/bin/hostname`
FROM="backup@$HOSTNAME"
NOWDATE=`date +%F`
HOMEBCKP="/nejaky/treba/nfs/disk"
COUNTBCKP=14

myexit(){
 logger -p error "backup: Failure. Message: $1"
  echo "BACKUP ERROR !!! on ${HOSTNAME} Message: $1" | /usr/bin/mailx \
    -s "BACKUP ERROR: ${HOSTNAME}" -r ${FROM} ${ADMIN}
 exit $2
}

#to backup directory
cd $HOMEBCKP
if [ $? != 0 ]; then
  myexit "Error: directory $HOMEBCKP not exists" 1
fi

let "COUNTBCKP = $COUNTBCKP - 1"

#delete old backups, '2*' - only directory begin '2' - for sure :)
find ./ -depth -mtime +$COUNTBCKP -path "./2*" -delete
if [ $? != 0 ]; then
  myexit "Error: delete old backups " 109
fi

mkdir $NOWDATE
if [ $? != 0 ]; then
  myexit "Error: create backup directory " 2
fi

cd $HOMEBCKP/$NOWDATE
if [ $? != 0 ]; then
  myexit "Error: directory $HOMEBCKP/$NOWDATE not exists" 3
fi


#dump Sql
mysqldump --user=dumpuser --password=heslo  --add-drop-database --add-drop-table --add-locks --all-databases --comments --create-options --disable-keys --flush-logs --hex-blob --routines --single-transaction --max_allowed_packet=4M > $HOSTNAME-mysql-$NOWDATE.sql
if [ $? != 0 ]; then
  myexit "Error: sql dump error" 10
fi

gzip -9  $HOSTNAME-mysql-$NOWDATE.sql
if [ $? != 0 ]; then
  myexit "Error: gzip sql  error" 11
fi

#www
cd /srv
if [ $? != 0 ]; then
  myexit "Error: cd /srv/" 21
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-www.tar.gz www
if [ $? != 0 ]; then
  myexit "Error: tar -czf www" 22
fi

#ftp
cd /srv/ftp
if [ $? != 0 ]; then
  myexit "Error: cd /srv/" 31
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-ftp-mega-only.tar.gz *mega
if [ $? != 0 ]; then
  myexit "Error: tar -czf *mega" 32
fi

#etc
cd /
if [ $? != 0 ]; then
  myexit "Error: cd /" 41
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-etc.tar.gz etc
if [ $? != 0 ]; then
  myexit "Error: tar -czf etc" 42
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-home.tar.gz home root
if [ $? != 0 ]; then
  myexit "Error: tar -czf etc" 62
fi

#var - only selected dirs
cd /var
if [ $? != 0 ]; then
  myexit "Error: cd /var" 71
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-var-adm_spoolcron.tar.gz adm spool/cron
if [ $? != 0 ]; then
  myexit "Error: tar -czf etc" 72
fi


#repository SVN
svnadmin dump /srv/svn/ > /tmp/$HOSTNAME-svn-repository-$NOWDATE
if [ $? != 0 ]; then
  myexit "Error: svnadmin dump" 81
fi

cd /tmp
if [ $? != 0 ]; then
  myexit "Error: cd /tmp" 82
fi

tar -czf $HOMEBCKP/$NOWDATE/$HOSTNAME-svn-repository-$NOWDATE.tar.gz $HOSTNAME-svn-repository-$NOWDATE
if [ $? != 0 ]; then
  myexit "Error: tar repository" 83
fi
rm ./$HOSTNAME-svn-repository-$NOWDATE

logger -p info "backup: OK"

exit 0

Good luck