Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # параметры FTP сервера, кудась заливаем бэкапы
- FTP_HOST="10.10.10.10"
- FTP_USER="user"
- FTP_PASSWD="12345"
- # день полного бэкапа, если не указан, то определяется автоматом при первом
- # запуске для некой балансировки нагрузки (чтобы все сервера не ломились
- # на FTP с полными бэкапами в один день)
- #FULL_BACKUP_WEEK_DAY="1"
- # сколько полных бэкапов хранить на FTP
- KEEP_FULL_BACKUPS="2"
- # если нужно бэкапить базы
- #DB_NAMES="db1 db2 db3..."
- DB_NAMES="wiki"
- DB_ROOT_USER="root"
- DB_ROOT_PASS="12345"
- DB_KEEP_BACKUPS="7"
- #set -x
- BACKUP_NAME=`date +'%Y-%m-%d'`
- # определяем день полного бэкапа, если он не задан
- if [ "${FULL_BACKUP_WEEK_DAY}" == "" ] ; then
- [ ! -e "/var/tmp/backup-full_backup_week_day" ] && echo $((RANDOM%7+1)) > /var/tmp/backup-full_backup_week_day
- FULL_BACKUP_WEEK_DAY=`cat /var/tmp/backup-full_backup_week_day`
- fi
- # определяем вид бэкапа: полный или инкрементный
- if [ "`date +%u`" == ${FULL_BACKUP_WEEK_DAY} -o ! -e "/var/tmp/backup-dumpinfo" ] ; then
- rm -f /var/tmp/backup-dumpinfo
- BACKUP_NAME="${BACKUP_NAME}-full"
- fi
- # бэкапим файлы
- ( nice tar --create --gzip --sparse --listed-incremental=/var/tmp/backup-dumpinfo \
- --exclude='/proc/*' \
- --exclude='/sys/*' \
- --exclude='/tmp/*' \
- --exclude='/var/log/*.gz' \
- --exclude='/home/*' \
- / | ncftpput -c -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V ${FTP_HOST} "/${BACKUP_NAME}.tgz" ) 2>&1 | \
- grep -v "socket ignored" | grep -v "Removing leading" | \
- grep -v "Cannot stat: No such file or directory" | \
- grep -v "file changed as we read it" | \
- grep -v "File removed before we read it" | \
- grep -v "Удаляется начальный .* из имен объектов" | \
- grep -v "Error exit delayed from previous errors"
- # удаляем старые бэкапы файлов
- COUNTER_FULL=0
- for NAME in `ncftpls -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 ftp://${FTP_HOST} | sort -r`; do
- # пропускаем все файлы в других форматах
- [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}(-full)?.tgz$ ]] || continue
- [ ${COUNTER_FULL} -ge ${KEEP_FULL_BACKUPS} ] && \
- ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM ${NAME}" ${FTP_HOST} / /etc/hosts
- [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}-full.tgz$ ]] && COUNTER_FULL=`expr ${COUNTER_FULL} + 1`
- done
- # бэкапим базы
- for DATABASE in ${DB_NAMES} ; do
- mysqldump -u${DB_ROOT_USER} -p${DB_ROOT_PASS} --events --quick --force --routines --triggers --create-options --single-transaction ${DATABASE} | gzip | \
- ncftpput -c -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V ${FTP_HOST} "/`date +'%Y-%m-%d'`-${DATABASE}.sql.gz"
- # удаляем старые бэкапы базы данных
- COUNTER=0
- for NAME in `ncftpls -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 ftp://${FTP_HOST} | sort -r`; do
- # пропускаем все файлы в других форматах
- [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}-${DATABASE}.sql.gz$ ]] || continue
- [ ${COUNTER} -ge ${DB_KEEP_BACKUPS} ] && \
- ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM ${NAME}" ${FTP_HOST} / /etc/hosts
- COUNTER=`expr ${COUNTER} + 1`
- done
- done
- # удаляем файл hosts
- ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM hosts" ${FTP_HOST} / /etc/hosts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement