Go to content Go to menu Go to search

Скрипт резервного копирования данных с хостинга

Алгоритм

При каждом запуске скрипта:

  1. Создаем/Синхронизируем у себя локальное зеркало при помощи rsync
  2. Создаем 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!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved