Настройка резервного копирования PostgreSQL с помощью pgBackRest: Полный гайд
- Длительное время создания резервных копий утилитой
pg_dumpна базах данных объемом более 1 ТБ. - Блокировки и деградация дисковой подсистемы при снятии базовых бэкапов через
pg_basebackup. - Ошибки архивации журнала предзаписи
archive_command failedв логах СУБД. - Невозможность восстановления состояния кластера на произвольный момент времени (Point-in-Time Recovery).
1. Установка pgBackRest
Установите пакет утилиты на хосте СУБД и выделенном сервере репозитория:
# Debian/Ubuntu
apt-get install -y pgbackrest
# RHEL/Rocky Linux
dnf install -y pgbackrest2. Конфигурация pgBackRest (/etc/pgbackrest.conf)
На стороне сервера базы данных настройте секцию кластера:
[global]
repo1-host=backup-repo.internal
repo1-host-user=postgres
repo1-path=/var/lib/pgbackrest
process-max=4
log-level-console=info
log-level-file=detail
start-fast=y
compress-type=zst
compress-level=3
[main]
pg1-path=/var/lib/postgresql/16/main
pg1-user=postgres3. Настройка параметров ядра PostgreSQL
Внесите изменения в postgresql.conf:
archive_mode = on
archive_command = 'pgbackrest --stanza=main archive-push %p'
wal_level = replica
max_wal_senders = 10Перезапустите PostgreSQL для применения параметров WAL:
systemctl restart postgresql4. Инициализация станзы и создание бэкапа
# Создание станзы (выполняется на сервере бэкапов)
sudo -u postgres pgbackrest --stanza=main stanza-create
# Проверка конфигурации и связности
sudo -u postgres pgbackrest --stanza=main check
# Запуск полного бэкапа
sudo -u postgres pgbackrest --stanza=main --type=full backup5. Восстановление на момент времени (PITR)
pgbackrest --stanza=main --delta \
--type=time "--target=2025-03-30 14:30:00+03" \
--target-action=promote restore Частые вопросы (FAQ)
В чем главное преимущество pgBackRest перед pg_dump и pg_basebackup?
pgBackRest выполняет параллельное бинарное копирование страниц на уровне блоков, поддерживает инкрементальные и дифференциальные бэкапы, асинхронную доставку WAL и верификацию контрольных сумм без блокировки таблиц.
Как настроить ротацию бэкапов (retention policy)?
В секции [global] файла /etc/pgbackrest.conf задаются параметры repo1-retention-full=2 (хранить 2 полных бэкапа) и repo1-retention-diff=7 (хранить 7 дифференциальных).
Что делает параметр start-fast=y?
Он принудительно инициирует чекпоинт в СУБД с немедленным сбросом грязных страниц (immediate checkpoint), сокращая время ожидания старта резервного копирования.
Как восстановить только одну конкретную базу данных из кластера?
pgBackRest восстанавливает физический кластер целиком. Для восстановления отдельной БД можно использовать опцию --db-include, однако все остальные базы будут восстановлены как пустые заглушки для сохранения целостности каталога.