Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Настройка резервного копирования PostgreSQL с помощью pgBackRest: Полный гайд

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Длительное время создания резервных копий утилитой 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 pgbackrest

2. Конфигурация 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=postgres

3. Настройка параметров ядра 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 postgresql

4. Инициализация станзы и создание бэкапа

# Создание станзы (выполняется на сервере бэкапов)
sudo -u postgres pgbackrest --stanza=main stanza-create

# Проверка конфигурации и связности
sudo -u postgres pgbackrest --stanza=main check

# Запуск полного бэкапа
sudo -u postgres pgbackrest --stanza=main --type=full backup

5. Восстановление на момент времени (PITR)

pgbackrest --stanza=main --delta \
  --type=time "--target=2025-03-30 14:30:00+03" \
  --target-action=promote restore
Практический опыт инженера: Всегда настраивайте выделенный сетевой интерфейс или VLAN для передачи WAL и дампов на сервер хранения, чтобы трафик резервного копирования не утилизировал полосу пропускания клиентских транзакций.

Частые вопросы (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, однако все остальные базы будут восстановлены как пустые заглушки для сохранения целостности каталога.