Скрипт резервного копирования данных с хостинга
Алгоритм
При каждом запуске скрипта:
- Создаем/Синхронизируем у себя локальное зеркало при помощи rsync
- Создаем tar-архив из синхронизированного зеркала
Скрипт выводит результаты работы в syslog.
Пользователь, под которым запускается скрипт должен иметь доступ на удаленный хост по ssh без пароля по ключу. Удаленный пользователь, под которым заходим, должен иметь доступ к файлам. Ниже приведен вариант настройки для пользователя root, что крайне не рекомендуется делать в реальной жизни.
Скрипт
/root/bin/archive_hosting.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #!/bin/bash # # Crated by VPS 29.01.2017 # # 1. Mirror data from hosting # 2. Create tar archive # export SHELL=/bin/bash RHOST='root@<IP>' RETENTION='90' # days LOG_FACILITY='local5' log_tag="$0" scriptname=$(basename "$0") say() { MESSAGE_PREFIX="$scriptname:" MESSAGE="$1" TIMESTAMP=$(date +"%F %T") echo -e "$TIMESTAMP $MESSAGE_PREFIX $MESSAGE" logger -t $log_tag -p $LOG_FACILITY.notice "$MESSAGE" } error() { MESSAGE_PREFIX="$scriptname:" MESSAGE="$1" TIMESTAMP=$(date +"%F %T") echo -e $TIMESTAMP $MESSAGE >&2 logger -t $log_tag -p $LOG_FACILITY.error "$MESSAGE" exit } # # 1. Mirror data from hosting # say "Starting mirroring from $RHOST" RPATH='/etc/' DST='/store/Hosting_Bkp/etc/' say "..mirror $RHOST:$RPATH to $DST" EXCLUDES="" OUT=`/usr/bin/rsync -aqz $RHOST:$RPATH $DST $EXCLUDES --delete 2>&1` || say "ERROR: Unable rsync $RPATH: $OUT" RPATH='/root/backup/dumps/' # В этой папке на хостинге должны лежать дампы базы, которые выполняются отдельным скриптом DST='/store/Hosting_Bkp/db_dumps/' say "..mirror $RHOST:$RPATH to $DST" EXCLUDES="" OUT=`/usr/bin/rsync -aqz $RHOST:$RPATH $DST $EXCLUDES --delete 2>&1` || say "ERROR: Unable rsync $RPATH: $OUT" RPATH='/var/www/' DST='/store/Hosting_Bkp/var/www/' say "..mirror $RHOST:$RPATH to $DST" EXCLUDES="--exclude=httpd-logs/*" OUT=`/usr/bin/rsync -aqz $RHOST:$RPATH $DST $EXCLUDES --delete 2>&1` || say "ERROR: Unable rsync $RPATH: $OUT" # # 2. Create archives # DATE=`date +%Y-%m-%d` DST="/store/Hosting_Bkp/ARCH" say "..create archives in $DST" pushd /store/Hosting_Bkp OUT=`/bin/tar -czf $DST/etc_$DATE.tar.gz ./etc/` || error "ERROR: Unable create archive of etc: $OUT" OUT=`/bin/tar --exclude='*.zip' --exclude='*.rar' --exclude='*.iso' -czf $DST/www_$DATE.tar.gz ./var/www/` || error "ERROR: Unable create archive of etc: $OUT" OUT=`/bin/find $DST/* -mtime +$RETENTION -delete` || say "ERROR: Unable delete old archives from $DST: $OUT" say "End mirror process from $RHOST" |
Сопутствующие настройки
Добавляем в cron /etc/cron.d/archhosting
:
PATH=/sbin:/usr/sbin:/bin:/usr/bin #m h dom mon dow user command 10 2 * * 1 root /root/bin/archive_hosting.sh
Выносим лог в отдельный файл:
echo "Local5.* /var/log/archive_hosting.log" > /etc/rsyslog.d/archive_hosting.conf /etc/init.d/rsyslog restart
Настраиваем ротацию лога, файл /etc/logrotate.d/archive_hosting
:
/var/log/archive_hosting.log { monthly sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
Скрипт для создания дампа БД на хостинге
/root/bin/database-backup.sh
:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash TIMESTAMP=`date +"%Y%m%d"` BACKUPSTORE=/root/backup/dumps FILENAME="mysql-full-dump.${TIMESTAMP}.bz2" BACKUP_OWNER=root RETENTION=90 # days /usr/bin/mysqldump --all-databases --flush-logs --force --add-drop-database | bzip2 -s > $BACKUPSTORE/$FILENAME chown $BACKUP_OWNER $BACKUPSTORE/$FILENAME find $BACKUPSTORE -ctime +$RETENTION -delete |
Enjoy!