Инкрементальный бэкап удаленного веб сервера с Mysql с помощью rsnapshot (CentOS, RHEL)
3. Настройка rsnapshot
Для начала установим rsnapshot на сервере бэкапов:
1 2 | backup: yum install rsync rsnapshot -y server: yum install rsync -y |
Конфигурационный файл хранится в /etc/rsnapshot.conf. rsnapshot по сути является perl скриптом-оболочкой, которая в свою очередь работает через rsync. Внимание! rsync должен быть установлен и на клиенте и на сервере бэкапов. Очень важный момент, что отступы в конфигурационном файле должны прописываться табами, в противном случае будет ошибка. В rsnapshot можно настроить бэкапы для разных периодов — по часам, дням, неделям, месяцам. Довольно удобная система, где нам важно делать бэкап как актуальных данных, так и тех данных, что были сделаны месяц, год назад. Если мы настроим, что у нас хранится 5 почасовых бэкапов и 2 дневных, то если за день было сделано более 5 бэкапов — мы не сможем видеть снэпшот данных на начало дня, т.к. у нас стоит ограничение. Однако, бэкап по дням решит эту проблему и у нас будет храниться снэпшот за прошлый и позапрошлый день. Для нас важны следующие части конфигурации:
1 2 | # All snapshots will be stored under this root directory. snapshot_root /mnt/snapshots |
Данный параметр указывает на корень в файловой системе, относительно которого будут записываться наши снэпшоты.
1 2 3 4 | interval hourly 15 interval daily 10 interval weekly 4 interval monthly 3 |
Параметры для ssh, в котором мы указываем файл ключа для авторизации:
1 2 | #ssh_args -p 22 ssh_args -i /root/.ssh/backup_key_dsa |
В данном случае мы как раз настраиваем количество бэкапов для каждого вида. Далее нам нужно описать конфигурацию бэкапа:
1 2 3 4 | backup root@client:/var/www/ www_server/ exclude_file /root/rsnapshot.exclude.web_server backup_script /usr/bin/ssh -i /root/.ssh/backup_key_dsa backup@client "/root/rsnapshot.mysql.sh" unused1/ backup_script /usr/bin/scp -r -i /root/.ssh/backup_key_dsa backup@client:/tmp/rsnapshot/mysql/ /tmp/mysql_backups mysql/ |
1 строка указывает нам, что мы по scp заходим на сервер client, забираем с него папку /var/www/ и гладем ее в /mnt/snapshots/daily.0/www_server, где /mnt/snapshots/ — это указанный нами корень для снэпшотов, а daily.0 — это тип бэкапа и его нумерация. 2 строка — т.к. у нас есть данные, которые нам не нужны в бэкапе, например — файлы логов, кэша, то мы можем исключить их. В этой строке мы указываем файл, в котором прописаны исключения для синхронизации. Пример файла —
1 2 3 | /var/www/*/logs/* /var/www/*/*.cache /var/www/*/*.log |
3 строка — мы выполняем скрипт /root/rsnapshot.mysql.sh на удаленном сервере client. unused1 — это заглушка, которую оставляем без внимания.
4 строка — мы переносим файлы дампов с удаленного сервера client по scp из папки /tmp/rsnapshot/mysql/ (эту папку мы указывали в скрипте rsnapshot.mysql.sh) в папку /tmp/mysql_backups на сервере backup, затем переносим в /mnt/snapshots/daily.0/mysql в папку снэпшотов. Сохранив файл конфигурации — его можно проверить встроенной командой:
1 | rsnapshot configtest |
В 3-4 строке мы указали путь к файлу, т.к. ssh_args работают только на встроенные команды, а в данном случае мы вызываем внешние команды.
Последний шаг — необходимо поставить задания в cron, при том для каждого вида бэкапа — отдельное, что логично. Редактируем файл /etc/cron.d/rsnapshot, заносим в него:
1 2 3 4 | 0 */4 * * * root /usr/bin/rsnapshot hourly 30 3 * * * root /usr/bin/rsnapshot daily 0 3 * * 1 root /usr/bin/rsnapshot weekly 30 2 1 * * root /usr/bin/rsnapshot monthly |
Как мы видим — бэкап запускается каждые 4 часа, каждый день в 3:30, каждый понедельник в 3:00, каждый 1 день месяца в 2:30.Если нам какой-то из видов бэкапов не нужен — просто комментируем необходимую строчку. Напоследок несколько полезных команд — Проверка реально занимаемого места снэпшотами:
1 | rsnapshot du |
Вывод процесса (команд) бэкапа без выполнения:
1 | rsnapshot -t daily |
Ручной запуск обновления:
1 | rsnapshot daily |
Тестирование конфигурации:
1 | rsnapshot configtest |