Все бэкапы сваливаются в `/media/backups`; своя директория на каждый сервер.
# Извлечение данных
## Просмотр списка бэкапов
Смотрим список доступных директорий, находим нужную и подсовываем её в команду `borg list`:
# borg list /media/backups/center-elite_ml/backup/
получаем что-то вроде:
mysql-2019-09-05T17:21:56 Thu, 2019-09-05 11:21:58 [04caef1df47eaf6d7e1af693423cb18aaf08b0f935355881e9baa3afc6232f03]
files-www-2019-09-05T17:21:59 Thu, 2019-09-05 11:21:59 [7d5ae617d5760588f73436e2cb2b6021893c32e447a50da9963295376e495444]
mysql-2019-09-05T17:34:15 Thu, 2019-09-05 11:34:16 [ebadadf674924aeeb416412c07899dfc9c66fac302c138e2e3fa937c95232aee]
files-www-2019-09-05T17:34:18 Thu, 2019-09-05 11:34:19 [536d5684fd81a58b95637b914ac76c7130c6418c1e175ae50f143f8555e03095]
## Извлечение бэкапа
Переходим в директорию, в которую надо распаковать данные. Выполняем `borg extract`, подкладывая путь к архиву и через двойное двоеточие (`::`) имя бэкапа, который нужно извлечь, из списка выше:
# borg extract /media/backups/center-elite_ml/backup::mysql-2019-09-05T17:34:15
Смотрим извлечённые файлы в текущей директории.
# Раскатка на новые серверы
Выбираем имя для нового сервера (например, домен с точками, заменёнными на `_`). Дальше в примере это будет `example_com`.
## Подготовка сервера, который нужно бэкапить
Переключаемся под `root`:
$ sudo -i
Кладём [скрипт отсюда][link-external] ([внутренний адрес][link-internal]) в `/usr/local/bin`. Проверяем, чтобы он был `+x`:
# chmod 750 /usr/local/bin/incbackup
По умолчанию бэкапятся все базы MySQL и всё содержимое `/var/www`. Если нужно сохранять ещё какие-либо директории, дописываем их в верху скрипта.
[link-external]: https://git.rating.kz/KIsakov/cli/raw/master/scripts/backup/incbackup
[link-internal]: http://192.168.50.220/KIsakov/cli/raw/master/scripts/backup/incbackup
### Настройка автоматического выполнения
Добавляем скрипт в `cron`. Желательно разносить серверы на разное время, чтобы они не начинали пересылать бэкапы одновременно:
# crontab -e
30 2 * * * /usr/local/bin/incbackup
### Настройка заливки на удалённый сервер
Создаём новый SSH-ключ, отвечая "да" на всё:
# ssh-keygen -t ed25519
Пишем в SSH-конфиг параметры подключения к серверу бэкапов, не забывая заменить юзера на того, который выбрали выше:
# mkdir -p ~/.ssh && chmod 750 ~/.ssh
# cat >~/.ssh/config
Host backup-server
HostName backups.rating.kz
Port 21000
User example_com
Ctrl+D
Разок подключаемся и отвечаем `yes`, чтобы сервер добавился в `authorized_keys`:
# ssh backup-server
### Настройка бэкапов MySQL
Создаём `~/.my.cnf` и помещаем туда юзера и пароль для подключения к СУБД. Юзер должен иметь [достаточно прав](https://subscription.packtpub.com/book/big_data_and_business_intelligence/9781783284399/1/ch01lvl1sec14/creating-a-backup-user), проще всего использовать `root`:
# cat >~/.my.cnf
[mysql]
user=root
password=l337h4xx0r
[mysqldump]
user=root
password=l337h4xx0r
Ctrl+D
## Подготовка сервера бэкапов
Создаём нового юзера с домашней директорией в `/media/backups` и пустым паролём:
# useradd --create-home --base-dir /media/backups example_com