Организация резервного копирования в *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
Данное задание означает, что резервное копирование будет производиться ежесуточно в три часа ночи.