В продолжение статьи о восстановлении MySQL cегодня опишу настройку сервера для архивации сайтов на базе rsnapshot.
Постановка задачи
Необходимо архивировать все сайты на поддержке,требования:
1) Удобная и быстрая настройка
2) Архивы должны хранится 7 дней и быть циклическими.
3) Решили что классическая архивация с помощью rsync и mysqldump надежней
Реализация
Раньше у нас уже был опыт решения подобной задачи, написали кучу скриптов на bash'e в результате процесс настройки был сложноват. На этот раз решили пойти другим путем, а именно воспользоваться программой rsnapshot, которая в свою очередь может удовлетворить все наши требования без какого-либо страшного программирования.
Настройка
Теперь после небольшой вводной части можно перейти непосредственно к настройке. Настройку выполняем на Debian 7.
Установка rsnapshot достаточно проста:
aptitude install rsnapshot
Настраиваем общий конфиг для всех сайтов /etc/rsnapshot.common, наша версия конфига выглядит так:
################################################# # rsnapshot.conf - rsnapshot configuration file # ################################################# # # # PLEASE BE AWARE OF THE FOLLOWING RULES: # # # # This file requires tabs between elements # # # # Directories require a trailing slash: # # right: /home/ # # wrong: /home # # # ################################################# ####################### # CONFIG FILE VERSION # ####################### config_version 1.2 ########################### # SNAPSHOT ROOT DIRECTORY # ########################### # All snapshots will be stored under this root directory. # snapshot_root /var/snapshots/ ################################# # EXTERNAL PROGRAM DEPENDENCIES # ################################# # LINUX USERS: Be sure to uncomment "cmd_cp". This gives you extra features. # EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility. # # See the README file or the man page for more details. # cmd_cp /bin/cp # uncomment this to use the rm program instead of the built-in perl routine. # cmd_rm /bin/rm # rsync must be enabled for anything to work. This is the only command that # must be enabled. # cmd_rsync /usr/bin/rsync # Uncomment this to enable remote ssh backups over rsync. # cmd_ssh /usr/bin/ssh # Comment this out to disable syslog support. # cmd_logger /usr/bin/logger # Uncomment this to specify the path to rsnapshot-diff. # cmd_rsnapshot_diff /usr/bin/rsnapshot-diff ######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # ######################################### retain daysago 7 ############################################ # GLOBAL OPTIONS # # All are optional, with sensible defaults # ############################################ # Verbose level, 1 through 5. # 1 Quiet Print fatal errors only # 2 Default Print errors and warnings only # 3 Verbose Show equivalent shell commands being executed # 4 Extra Verbose Show extra verbose information # 5 Debug mode Everything # verbose 2 # Same as "verbose" above, but controls the amount of data sent to the # logfile, if one is being used. The default is 3. # loglevel 3 # If you enable this, data will be written to the file you specify. The # amount of data written is controlled by the "loglevel" parameter. # logfile /home/admin/log/rsnapshot.log # If enabled, rsnapshot will write a lockfile to prevent two instances # from running simultaneously (and messing up the snapshot_root). # If you enable this, make sure the lockfile directory is not world # writable. Otherwise anyone can prevent the program from running. # lockfile /home/admin/rsnapshot.pid # Default rsync args. All rsync commands have at least these options set. # rsync_short_args -avz rsync_long_args --delete --numeric-ids --delete-excluded --chmod=a+rwx,g+rwx
Для каждого сайта добавляем конфигурационный файл в папке ~/config, например /home/user/config/drupal-admin.ru:
#Подключение общего файла конфигурации include_conf /etc/rsnapshot.common #Архивация папки сайта backup user@drupal-admin.ru:~/domains/drupal-admin.ru/html/ drupal-admin.ru/ #Архивация базы данных backup_script /usr/bin/ssh user@drupal-admin.ru mysqldump -uuser -ppassword --default-character-set=utf8 drupal-admin.ru > drupal-admin.sql drupal-admin.ru/mysql
Теперь создаем общий файл конфигурации rsnapshot ~/backup_allsites, в который добавляем все файлы сайтов, например:
include_conf /home/user/config/drupal-admin.ru include_conf /home/user/config/supportsite1.ru include_conf /home/user/config/supportsite2.ru
После этого добавляем задание cron команда crontab -e:
#Архивация сайтов ежедневно в 00:30 30 00 * * * /usr/bin/rsnapshot -c /home/user/backup_allsites daysago #Сжатие всех каталогов архивов сайтов ежедневно в 00:59 и отправка отчета на email 59 00 * * * /usr/local/bin/rsnaptar support@initlab.ru
Теперь у нас всё готово. Архивы делаются ежедневно и есть архив сайтов за 7 дней.