×
FAQ: Технические вопросы

Организация резервного копирования в *nix‑системах

В том случае если вы администрируете свой сервер самостоятельно, вы можете воспользоваться данной инструкцией для организации схемы резервного копирования.

Для резервного копирования воспользуемся утилитой FSBACKUP.

Для этого заходим на сервер и скачиваем архив программы с помощью команды:

wget http://www.opennet.ru/dev/fsbackup/src/fsbackup-1.2pl2.tar.gz

Распаковываем его и переходим в директорию fsbackup-1.2pl2:

tar -zxvf fsbackup-1.2pl2.tar.gz
cd fsbackup-1.2pl2

Устанавливаем программу резервного копирования, для этого необходимо иметь права root:

./install.pl -prefix=/usr/local/fsbackup

Для настройки параметров резервного копирования переходим в каталог, в который только что была установлена программа, и создаем 2 дополнительные директории:

cd /usr/local/fsbackup
mkdir archive
mkdir sql_backup

Настраиваем конфигурационный файл, для чего выполняем следующие команды:

cp cfg_example my_cfg
vim my_cfg

Изменяем значения параметров, исходя из нижеприведенного примера конфигурационного файла (рекомендуем вам ознакомиться с основными командами в текстовом редакторе Vi):

$cfg_backup_name = "server_backup";
$cfg_cache_dir = "/usr/local/fsbackup/cache";
$prog_md5sum    = "/usr/bin/md5sum -b";
$prog_tar       = "/bin/tar";
$prog_ssh       = "/usr/bin/ssh";
$prog_rm        = "/bin/rm";
$prog_gzip      = "/bin/gzip";
$prog_pgp       = "/usr/bin/gpg";
$cfg_checksum = "timesize";
$cfg_backup_style = "backup";
$cfg_increment_level = 7;
$cfg_save_old_backup = 1;
$cfg_type = "remote_ftp";
$cfg_remote_host = "uXXXXX.ftp.masterhost.ru";
$cfg_remote_login = "uXXXXX";
$cfg_remote_path = "";
$cfg_remote_ftp_mode = 0;
$cfg_remote_password = "пароль_к_вашей_backup-площадке";
$cfg_local_path = "/usr/local/fsbackup/archive";
$cfg_time_limit = 0;
$cfg_size_limit = 0;
$cfg_maximum_archive_size = 0;
$cfg_root_path = "/";
$cfg_verbose = 2;
$cfg_stopdir_prune=0; 1;
__DATA__
/var/www/vhosts
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/usr/local/fsbackup/sql_backup

Затем редактируем скрипт create_backup.sh, выполнив команду:

vim create_backup.sh

Необходимо изменить значение «config_files». После редактирования строка должна выглядеть следующим образом:

config_files="my_cfg"

Если нужно, чтобы при резервном копировании сохранялся бекап базы данных, изменяем значение: «backup_mysql» с 0 на 1. Ниже приведен фрагмент правильно отредактированного скрипта:

#--------------------------------------
# Директория где установлена программа.
#--------------------------------------

backup_path="/usr/local/fsbackup"

# Список файлов конфигурации, разделенных пробелом.
# Директории для сохранения бэкапа в каждом конфигурационном
# файле должны отличаться ($cfg_remote_path, $cfg_local_path),
# сохранение в одной и той же директории нескольких,
# описанных разными .conf файлами, бэкапов не допустимо.
#--------------------------------------

config_files="my_cfg"

#--------------------------------------
# 1 - run mysql_backup.sh script (you need edit
# mysql_backup.sh first!), 0 - not run.
# Флаг бэкапа MySQL таблиц, запускается требующий
# предварительной настройки скрипт ./scripts/mysql_backup.sh,
# 1 - запускать, 0 - не запускать.
#--------------------------------------

backup_mysql=1

#--------------------------------------
# 1 - run pgsql_backup.sh script (you need edit
# pgsql_backup.sh first!), 0 - not run.
# Флаг бэкапа PostgreSQL таблиц, запускается требующий
# предварительной настройки скрипт ./scripts/pgsql_backup.sh,
# 1 - запускать, 0 - не запускать.
#--------------------------------------

backup_pgsql=0

#--------------------------------------
# 1 - run sqlite_backup.sh script (you need edit
# sqlite_backup.sh first!), 0 - not run.
# Флаг бэкапа SQLite таблиц, запускается требующий
# предварительной настройки скрипт ./scripts/sqlite_backup.sh,
# 1 - запускать, 0 - не запускать.
#--------------------------------------

backup_sqlite=0

#--------------------------------------
# 1 - run sysbackup.sh script
# you need edit sysbackup.sh first!), 0 - not run.
# Флаг бэкапа параметров системы, запускается требующий
# предварительной настройки скрипт ./scripts/sysbackup.sh,
# 1 - запускать, 0 - не запускать.
#--------------------------------------

backup_sys=0

Для резервного копирования баз данных необходимо отредактировать файл scripts/mysql_backup.sh, для чего выполняем команду:

vim ./scripts/mysql_backup.sh

Значения параметров изменяем, исходя из нижеприведенных данных:

host_mysql="localhost"
backup_name="sql_backup"
backup_method="full"
backup_db_list=""
backup_mysqluser="admin (пользователь_базы_данных)"
backup_mysqlpassword="пароль_к_базе_данных"
backup_path="/usr/local/fsbackup/sql_backup"
backup_progdump_path="/usr/bin"
extra_mysqldump_flag="--complete-insert --host=$host_mysql"

После того, как параметры резервного копирования будут заданы, проверяем — правильно ли мы все сделали. Для этого выполняем команду:

./create_backup.sh

После того как выполнение команды будет завершено, заходим на площадку и проверяем — были ли на backup-площадке созданы файлы с резервными данными:

  • файл XXXXXXX.list содержит перечень сохраненных файлов и директорий, которые содержатся в архиве XXXXXXXX.tar.gz;
  • файл XXXXXXX.dir содержит структуру директорий, права (chmod), группу (chgrp) и их пользователя (chown).

Для того, чтобы резервное копирование данных производилось регулярно, создаем соответствующее задание в cron. Для этого на сервере выполняем команду:

crontab -e
и добавляем следующие строки:
MAILTO=Ваш контактный e-mail
0 3 * * * /usr/local/fsbackup/create_backup.sh

Данное задание означает, что резервное копирование будет производиться ежесуточно в три часа ночи.

Ссылки по теме: