Непрерывная архивация и восстановление PITR в PostgreSQL с pgBackRest
- Случайное повреждение или удаление данных (
DROP TABLE, ошибочныйUPDATE), требующее отката на точную секунду в прошлом. - Медленное создание бэкапов стандартным
pg_dumpна терабайтных базах. - Ошибки архивации WAL в
archive_command.
1. Конфигурация pgBackRest (/etc/pgbackrest.conf)
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
repo1-retention-diff=7
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=StrongSecretEncryptionKey123
process-max=4
log-level-console=info
log-level-file=detail
start-fast=y
compress-type=zst
[db-stanza]
pg1-path=/var/lib/postgresql/15/main
pg1-user=postgres2. Настройка архивации в postgresql.conf
archive_mode = on
archive_command = 'pgbackrest --stanza=db-stanza archive-push %p'
wal_level = replica
max_wal_senders = 53. Инициализация станзы и создание бэкапа
# Инициализация хранилища архивов
sudo -u postgres pgbackrest --stanza=db-stanza stanza-create
# Проверка корректности архивации
sudo -u postgres pgbackrest --stanza=db-stanza check
# Создание первого полного бэкапа
sudo -u postgres pgbackrest --stanza=db-stanza --type=full backup4. Восстановление на определенный момент времени (PITR)
# Остановка PostgreSQL
systemctl stop postgresql
# Запуск восстановления до указанной метки времени
sudo -u postgres pgbackrest --stanza=db-stanza \
--type=time \
--target="2023-11-20 14:35:00" \
--target-action=promote \
restore
# Запуск базы
systemctl start postgresql Частые вопросы (FAQ)
Что означает директива target-action=promote при PITR?
Она указывает PostgreSQL после наката WAL до целевой метки времени автоматически выйти из режима восстановления, переключить Timeline и открыть базу данных для чтения и записи.
В чем преимущество формата сжатия zstd в pgBackRest?
Алгоритм Zstandard обеспечивает степень сжатия уровня gzip при скорости работы, сопоставимой с lz4, что снижает нагрузку на CPU и дисковую подсистему при интенсивной генерации WAL.