Резервное копирование на веб-сервере


Расскажу о том, как я делаю резервное копирование. Приведу пример скрипта и распишу детально что, куда и как. Данный скрипт вы можете приспособить под собственные нужды, для меня он делает резервное копирование сайтов. Скрипт используется на сервере под управлением Debian GNU 6.0, думаю на любой другой *nix системе он будет работать исправно, хотя гарантий никаких дать не могу. Предполагаю проблемы могут возникнуть только при использовании опций команды find, за информацией отсылаю к man pages. И так приступим.

Собственно сам скрипт очень прост:

#!/bin/bash

# префикс по дате
PREFIX=`date +%F`

# создаем переменную и в качестве ее значения задаем путь
# к каталогу с сайтами, перед именем каталога (сайта) будет проставляться текущая дата
BU_WWW_DIR=/bu1/www/$PREFIX

# монтируем раздел на который будем складывать копии
mount /dev/sdb1/ /bu1/

# эта конструкция ищет файлы "старее" 7 суток и удаляет их
find /bu1/www/ -mtime +7 -print -mindepth 1 -delete >/dev/null 2>&1

# здесь собственно и создается архив при помощи "tar"
tar cpzf $BU_WWW_DIR-saturn.tgz /www/saturn/ >/dev/null 2>&1
tar cpzf $BU_WWW_DIR-apollon.tgz /www/apolon/>/dev/null 2>&1
tar cpzf $BU_WWW_DIR-kapeks.tgz /www/kapeks/ >/dev/null 2>&1
tar cpzf $BU_WWW_DIR-venera.tgz /www/venera/ >/dev/null 2>&1
tar cpzf $BU_WWW_DIR-upiter.tgz /www/upiter/ >/dev/null 2>&1
tar cpzf $BU_WWW_DIR-zemlya.tgz /www/zemlya/ >/dev/null 2>&1

# создаем переменную и в качестве ее значения задаем путь
# к каталогу с базами данных
BU_DB_DIR=/bu1/base/$PREFIX

# см. выше
find /bu1/base/ -mtime +7 -print -mindepth 1 -delete >/dev/null 2>&1

# создаем дампы наших баз не забывая задать пользователя и пароль,
# и при помощи конвейера "скармливаем" его gzip-у

mysqldump -q -u root -p1234567 -h localhost saturn | gzip -c > $BU_DB_DIR-saturn.sql.gz
mysqldump -q -u root -p1234567 -h localhost apolon | gzip -c > $BU_DB_DIR-saturn.sql.gz
mysqldump -q -u root -p1234567 -h localhost kapeks | gzip -c > $BU_DB_DIR-kapeks.sql.gz
mysqldump -q -u root -p1234567 -h localhost venera | gzip -c > $BU_DB_DIR-venera.sql.gz
mysqldump -q -u root -p1234567 -h localhost upiter | gzip -c > $BU_DB_DIR-upiter.sql.gz
mysqldump -q -u root -p1234567 -h localhost zemlya | gzip -c > $BU_DB_DIR-zemlya.sql.gz

# размонтируем раздел в целях сохранности наших копий
umount /bu1/


Далее вышеописанный скрипт нужно сделать исполняемым:
chmod +x bu.sh

и добавить его на ежедневный запуск в cron, у меня это выглядит так:
root@korvenserver:~# crontab -l
30 2 * * * /home/korven/bu
каждую ночь в 2.30 скрипт запускается на исполнение
В итоге на нашем разделе на который делали "бэкап" будет следующее содержимое:

root@korvenserver:~# ls -l /bu1/www/
итого 208095360
-rw-r--r-- 1 root root 18564289659 Июл 4 02:59 2011-07-04-saturn.tgz
-rw-r--r-- 1 root root 1471448 Июл 4 02:30 2011-07-04-apolon.tgz
-rw-r--r-- 1 root root 5577357780 Июл 4 03:08 2011-07-04-kapeks.tgz
-rw-r--r-- 1 root root 148313729 Июл 4 03:08 2011-07-04-venera.tgz
-rw-r--r-- 1 root root 111008500 Июл 4 03:08 2011-07-04-upiter.tgz
-rw-r--r-- 1 root root 9350722 Июл 4 03:09 2011-07-04-zemlya.tgz

root@korvenserver:~$ ls -l /bu1/base/
итого 231556
-rw-r--r-- 1 root root 22288 Июл 5 03:08 2011-07-05-apolon.sql.gz
-rw-r--r-- 1 root root 12305604 Июл 5 03:08 2011-07-05-kapeks.sql.gz
-rw-r--r-- 1 root root 6315895 Июл 5 03:08 2011-07-05-venera.sql.gz
-rw-r--r-- 1 root root 2493800 Июл 5 03:08 2011-07-05-upiter.sql.gz
-rw-r--r-- 1 root root 5866964 Июл 5 03:08 2011-07-05-zemlya.gz

И так мы получили довольно простую, но от этого не менее эффективную схему резервного копирования. Каждую ночь в 2.30 будут создаваться резервные копии сайтов и баз данных этих сайтов. Все файлы "старше" 7 суток будут удаляться, т.е. фактически мы будем иметь недельную резервную копию всех наших проектов. Не забываем расчитать свободное место на разделе для ваших "бэкапов".

http://www.artcom-ufa.ru/posts/2011/07/12/rezervnoe-kopirovanie-na-veb-servere

Обновлено: 13.03.2015