Этот скрипт бэкапит каталоги файловой системы описанные в файле FILES_SRC, исключая шаблоны описанные в файле EXCLUDE_FILES_PATTERN, но включая шаблоны из файла INCLUDE_FILES_PATTERN. Файлы синхронизируются в каталог BACKUP_DIR. Старые изменившиеся и удаленные файлы копируются в каталог, с текущей датой месяца. То есть можно откопать все изменения файлов за любой из 30 последних дней.
Точно так же в каталог BACKUP_DB_DIR бэкапится база данных mysql с 30-дневной ротацией по дням.
Скрипт запускается по cron 1 раз в день.
[root@www adm]# cat /root/adm/backup.sh
#!/bin/sh
# cron: 0 3 * * * root /root/adm/backup.sh
BACKUP_DIR=/backup/fs
FILES_SRC=/root/adm/backup_src.lst
INCLUDE_FILES_PATTERN=/root/adm/backup_include.lst
EXCLUDE_FILES_PATTERN=/root/adm/backup_exclude.lst
BACKUP_DB_DIR=/backup/db
DB_BACKUP_PREFIX=db
MYSQL_HOST=localhost
MYSQL_USER=user
MYSQL_PASSWD=password
TIMESTAMP=`date '+%Y%m%d-%H%M%S'`
DAY=`date '+%d'`
FULL_BACKUP_DIR=$BACKUP_DIR/current
INC_BACKUP_DIR=$BACKUP_DIR/$DAY\_$TIMESTAMP
rm -f -R $BACKUP_DIR/$DAY\_*
nice -n 10 rsync -r --force --ignore-errors --delete --delete-excluded -av \
--backup --backup-dir=$INC_BACKUP_DIR \
--exclude-from=$EXCLUDE_FILES_PATTERN \
--include-from=$INCLUDE_FILES_PATTERN \
--files-from=$FILES_SRC \
/ $FULL_BACKUP_DIR
rm -f $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_$DAY\_*
nice -n 10 /usr/bin/mysqldump --complete-insert --all-databases --force --all --add-drop-table \
--host=$MYSQL_HOST \
--password=$MYSQL_PASSWD \
--user=$MYSQL_USER \
| gzip >$BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_$DAY\_$TIMESTAMP.gz
nice -n 10 /usr/bin/mysqldump --complete-insert --all-databases --force --no-data --all --add-drop-table \
--host=$MYSQL_HOST \
--password=$MYSQL_PASSWD \
--user=$MYSQL_USER \
| gzip >$BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_$DAY\_struct\_$TIMESTAMP.gz
rm -f $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_current*
ln -s $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_$DAY\_$TIMESTAMP.gz $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_current.gz
ln -s $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_$DAY\_struct\_$TIMESTAMP.gz $BACKUP_DB_DIR/$DB_BACKUP_PREFIX\_current\_struct.gz
rm -f $BACKUP_DIR/current\_*.tar.gz
cd $BACKUP_DIR
nice -n 10 tar -zcf $BACKUP_DIR/current\_$TIMESTAMP.tar.gz *
[root@www adm]# cat /root/adm/backup_src.lst
/etc
/home
[root@www adm]# cat /root/adm/backup_exclude.lst
*.log
*.rpm
*access_log*
*_log*
*.tar.gz
*.tar.bz2
*.run