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*" -deletecož 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:
- MySql dump jako sql.gz - pomocí dump v transakci, pro obnovení bude možná nutné uvést přepínač --max_allowed_packet=4M nebo 4M nastavit dočasně v 'my.cnf'. Dobré si odzkoušet funkčnost zálohy. Pozor zálohuje i tabulky 'mysql', takže po obnovení se zálohy je asi vhodné flushnou oprávnění :).
- www adresář jako tar.gz umístněné v adresáři /srv/
- ftp adresář jako tar.gz umístněné v adresáři /srv/. Pozor se specifickým nastavením. Zálohuje jen složky "*mega"
- /etc adresář jako tar.gz
- /home a /root adresář jako tar.gz - každý ať si zváží sám zálohu adresáře /root
- /var/spool/cron adresář jako tar.gz (+ /var/adm)
- SVN repositorry jako tar.gz pomocí svnadmin dump
#!/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
