Backup с rsnapshot на Ubuntu

В статье я настрою backup с двух VPS (там стоит Ubuntu) на локальный комп с Ubuntu. На одной VPS стоит apache, mysql, на второй VPS запущено Node.js приложение и mongodb. Использовать буду rsnapshot, который основан на rsync. rsnapshot позволяет задать периодичность копирования и количество бэкапов (часовых, дневных, недельных, месячных и т.д.). rsnapshot не создает N копий данных на диске, а использует символические ссылки на предыдущие backup (по сути инкрементальный бэкап).

Создаю на VPS пользователей backup

adduser backup

Далее настраиваю авторизацию по ключу по инструкции. Копируем приватный ключ (~/.ssh/id_rsa) на локальном компьютере (куда делаем бэкап) из папки пользователя в папку /root/.ssh

Это делается потому, что rsnapshot будет выполнятся из под root пользователя. Теперь если выполнить следующую команду из под пользователя root, мы должны попасть на сервер без пароля:

ssh backup@yourremotevps1.ru

Настройка rsnapshot

На локальном компьютере, на котором будем хранить бэкапы ставим rsnapshot.

sudo apt-get install rsnapshot
sudo nano /etc/rsnapshot.conf

указываем куда складировать бэкапы:

snapshot_root /home/local_user/backup/

расскоментировать строчку:

cmd_ssh /usr/bin/ssh

Ищем строчки с retain и добавляем

retain  daily   7
retain  monthly 12

что означает, будем хранить 7 бэкапов daily и 12 бэкапов monthly. Когда будет настраивать cron — вы поймете как оно работает. Пока настраиваем дальше.

Настройка бэкапа осуществляется командой backup <откуда> <куда>:

backup backup@example.com:/home/ example.com/

что означает заходим на сервер example.com под пользователем backup и копируем содержимое каталога /home в локальный подкаталог example.com в корневой каталог snapshot_root (указанный выше в файле).

ВАЖНО: используйте табы, а не пробелы между параметрами.

Приведу параметры конфига для создания бэкапа mysql и копирования каталогов /home/, /var/www, /etc/:

backup backup@yourremotevps1.ru:/home/ yourremotevps1.ru/
backup backup@yourremotevps1.ru:/var/www/ yourremotevps1.ru/
backup backup@yourremotevps1.ru:/etc/ yourremotevps1.ru/

Чтобы сделать backup mysql, на сервере в папке пользователя backup (/home/backup) создаем файл .my.cnf и вставляем туда данные пользователя mysql, который имеет доступ на чтение ко всем нужным базам:

[mysqldump]
user=mysqluser
password=mysqluserpassword

Теперь выполнив команду на сервере от имени пользователя backup

mysqldump -A > /home/backup/mysql-backup.sql

будем создан файл с полным бэкапом всех бд. Вернемся к конфигу rspanshot. Перед копированием каталогов вызовем команду бэкапа бд:

backup_exec     ssh backup@yourremotevps1.ru "mysqldump -A > /home/backup/mysql-backup.sql"

ВАЖНО: перед ssh — таб, после ssh — пробел, после адреса сервера — таб, между кавычками — везде пробелы.

Для второй VPS будет все аналогично.

В итоге конфиг должен получится такого вида:

backup_exec     ssh backup@yourremotevps1.ru "mysqldump -A > /home/backup/mysql-backup.sql"
backup  backup@yourremotevps1.ru:/home/    yourremotevps1.ru/
backup  backup@yourremotevps1.ru:/var/www/ yourremotevps1.ru/
backup  backup@yourremotevps1.ru:/etc/     yourremotevps1.ru/

backup_exec     ssh backup@yourremotevps2.ru "mongodump -o /home/backup/mongo.backup"
backup  backup@yourremotevps2.ru:/home/    yourremotevps2.ru/
backup  backup@yourremotevps2.ru:/etc/     yourremotevps2.ru/

На второй VPS я делаю дамп mongodb, а потом копирую необходимые мне каталоги.

Чтобы проверить конфиг выполняю от root:

rsnapshot configtest

Если возвращает Syntax OK — значит все правильно, если ошибки — читаем, смотрим, проверяем пробелы и табы.

Теперь можно сделать первый бэкап (пока вручную) из под root пользователя

rsnapshot daily

Добавляем в cron раписание запуска бэкапов. Я хочу делать ежедневный бэкап каждую полночь, и месячный каждого 1 числа. Под root’ом выполняем:

crontab -e

и дописываем в конец:

@daily /usr/bin/rsnapshot daily
@monthly /usr/bin/rsnapshot monthly

 

Добавить комментарий