Borg backup и mariadb-backup на таймерах systemd

📅 15 Сен 2025 01:38 | 👁 14 | 🕐 4 мин.

Появилась задача по созданию бэкапов на одной из своих VPS. Решил собрать решение на Borg Backup для хранения и на MariaDB-Backup для бэкапа БД. Borg выбран ввиду того, что он умеет делать инкрементальные бэкапы и дедупликацию, что в рамках ограниченного места на VPS очень актуально. А еще есть возможность создавать защищенные бэкапы.

По итогу, все это дело автоматизировано в два скрипта, службу и таймер systemd.

Устанавливаем необходимые пакеты:

Если у вас не MariaDB, а MySQL, то можно использовать Percona-XtraBackup, фактически аналогична MariaDB-Backup, так как одно форк другого.

Создаем сервис:

Тут стоит обратить внимание, что указание HOME необходимо для MariaDB-Backup для корректного поиска .my.cnf, но это не обязательно, в скрипте предусмотрены варианты указать путь дерктивой в команде или непосредственно в скрипте.

Теперь создаем таймер:

Применяем изменения в сервисах systemd:

Проверить расписание запуска можно командой:

Запуск будет производиться каждый день в 00:00.

Теперь сами скрипты. Скрипт бэкапа MariaDB:

Бэкап БД делается на горячую, без остановки.

Скрипт для бэкапа файлов:

Скрипт сам создаст и сгенерирует пароль если репозиторий не найден, если был аналогичный файл с паролем, сделается бэкап. В скрипте помимо запуска бэкапа MariaDB, еще делается бэкап x-ui, это частный случай, просто мне так надо было, если кому то не нужно, можно убрать команды остановки и запуска x-ui. Репозиторий создается с encryption repokey, так как это позволяет автоматизировать создание репозитория если его нет. Если вам вообще не нужно шифрования, можно использовать none.

Ротация бэкапов у нас следующая:

  • сохраняется 7 ежедневных бэкапов
  • сохраняется 4 недельных бэкапа
  • сохраняется 6 месячных бэкапа

Скрипты можно запускать как в ручную, так и через systemd:

Теперь самое главное, восстановление бэкапов. Для восстановление так же требуется установленный Borg, восстанавливается следующим образом:

Для репозиториев с encryption repokey, для восстановления нужен только ваш пароль. Для encryption none, пароли не требуются. Для encryption keyfile потребуется ключ репозитория. Ключ хранится вне репозитория, в файле key (обычно в $HOME/.config/borg/keys/). Для keyfile необходим предварительный бэкап ключа:

Восстановление следующим образом:

Дополнительные варианты восстановления.

Вариант восстановления в определенный каталог:

Вариант частичного восстановления:

Для восстановления бэкапа БД необходимо распаковать каталог БД, остановить сервер БД и переместить в /var/lib/mysql(если используется стандартное хранилище) бэкап, после запустить БД. Примерная последовательность команд:

mariadb-backup —copy-back — можно зменить обычным mv или cp. Так же стоит иметь ввиду, что версии sql сервера на источнике и таргете должны быть идентичными.

 

Данная статья носит характер заметки, если у кого то возникнут вопросы, задавайте в комментариях к статье.

Поделиться

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

(Required)