Бэкап PostgreSQL по расписанию в restic
Sard сохраняет базу PostgreSQL логическим дампом pg_dump (формат custom) потоком прямо в репозиторий restic. Дамп не ложится на диск хоста, а данные не проходят через сервер Sard.
Что сохраняется
- Одна база: pg_dump в формате custom, потоком в restic, без временного файла.
- Роли и другие глобальные объекты кластера (pg_dumpall --globals-only) — вторым снимком, связанным с первым.
- Запуск по расписанию cron в выбранном часовом поясе или вручную из консоли.
Что нужно на хосте
Плагин не содержит драйвера PostgreSQL: подключение, версию и права он проверяет программой psql, а дамп делает pg_dump. Обе программы берутся с хоста агента из пакета postgresql-client.
Версия pg_dump не должна быть старше сервера, минимальная версия сервера — PostgreSQL 14. Агент входит под обычной ролью, не под суперпользователем:
CREATE ROLE backup LOGIN PASSWORD '...';
GRANT pg_read_all_data TO backup;Пароль не попадает на сервер
Пароль не пишется в конфиг источника. Конфиг называет только имя секрета, а значение лежит файлом с правами 0600 на хосте агента. Агент отдаёт пароль только тем хосту и базе, которые разрешил оператор хоста, что бы ни прислал сервер.
printf '%s' 'пароль роли backup' | sudo sard-agent secret set pg-app \
--plugin postgresql --target db1.example.com:5432/app --stdinВосстановление
Консоль восстанавливает базу в новое место. Поверх существующей базы восстановление пока делается вручную по документации.
Проверка восстановления
Верификатор на отдельной машине запускает официальный контейнер postgres той же мажорной версии, что у источника, без сети и с лимитами, делает pg_restore и сравнивает отпечаток копии с отпечатком источника. Нужен Docker или Podman.
Чего пока нет
- Кластеры и реплики, WAL, pg_basebackup и восстановление на момент времени (PITR).