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