Перейти к содержимому

20 Занятие 20: Резервное копирование / Другие возможности pg_probackup

Исходная страница в нативном Markdown: Резервное копирование / Другие возможности pg_probackup
Примечание

Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета. HTML source: pgpro_20_probackup_3.html Archive: PGPRO-handouts-16.zip Страниц PDF: 21

Page 1: Резервное копирование / Другие возможности pg_probackup

Авторские права

© Postgres Professional, 2023–2026 Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев, Игорь Гнатюк Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)

Использование материалов курса

Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.

Обратная связь

Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru

Отказ от ответственности

Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.

Page 2: Темы

  • Хранилище S3
  • Политики хранения
  • Журнал

Page 3: Хранилище S3

Source slide page 3: Хранилище S3{#source-figure-003 caption=“Source slide page 3: Хранилище S3”}

Каталог копий можно размещать в хранилище S3

  • MinIO
  • Amazon S3
  • VK Cloud

Комментарии преподавателя

Утилита pg_probackup способна работать с каталогом копий, который размещен в объектном хранилище, предоставляющем интерфейс S3 (Simple Storage Service).

В настоящее время поддерживаются: MinIO, Amazon S3 и VK Cloud. MinIO — программа с открытым кодом, реализующая API, совместимый с S3, и важнейшие возможности, аналогичные Amazon Web Services. В демонстрационных материалах курса используется именно MinIO.

https://postgrespro.ru/docs/enterprise/16/app-pgprobackup#PBK-SETUP-S3

Page 4: Хранилище S3

В виртуальной машине установлено и настроено программное обеспечение MinIO, реализующее API S3. Запустим сервис MinIO.

student$ sudo systemctl enable --now --quiet minio

Объектное хранилище MinIO использует корзины — аналоги каталогов в обычных файловых системах. Создадим корзину bkp:

student$ /usr/local/bin/mc --quiet mb local/bkp
Bucket created successfully `local/bkp`.

С помощью текстового редактора создадим файл, описывающий подключение к хранилищу S3:

/home/student/s3.config
access-key = minioadmin
secret-key = minioadmin
s3-host = localhost
s3-port = 9000
s3-bucket = bkp
s3-secure = off

access_key и secret-key задают имя учетной записи и пароль в хранилище; s3-host и s3-port — узел и порт службы S3; s3-bucket — имя корзины S3; s3-secure — использование протокола https. Создадим базу данных, к которой будет подключаться роль backup.

=> CREATE DATABASE pgpro_probackup_3 OWNER backup TEMPLATE templateprobackup;
CREATE DATABASE
student$ psql

Инициализируем каталог копий в хранилище S3: провайдер указывается в параметре –s3; расположение файла с настройками — в параметре –s3-config-file.

student$ pg_probackup init \
  -B /probackup \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
INFO: Backup catalog '/probackup' successfully initialized

Если параметр –s3-config-file опущен, pg_probackup ищет настройки подключения к S3 сначала в /etc/pg_probackup/s3.config, а затем в ~postgres/.pg_probackup/s3.config. Также параметры подключения к S3 можно задать с помощью переменных окружения. Добавим в локальный каталог копий экземпляр БД, работающий на удаленном сервере. Каталог копий будет создан в хранилище S3.

student$ pg_probackup add-instance \
  -B /probackup --instance ent-16 \
  -D /var/lib/pgpro/ent-16 \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
INFO: Instance 'ent-16' successfully initialized

Чтобы сократить командную строку, сохраним параметры удаленного доступа в конфигурации.

student$ pg_probackup set-config \
  -B /probackup --instance ent-16 \
  -d pgpro_probackup_3 \
  -U backup \
  --log-level-console=ERROR \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Page 5: Page 5

Обратите внимание, что параметры –s3=minio и –s3-config-file=/home/student/s3.config задают подключение к S3, они в конфигурацию не записываются и должны задаваться в командной строке явно. Выполним полное резервное копирование в облако.

student$ pg_probackup backup \
  -B /probackup --instance ent-16 \
  -b FULL \
  --stream \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

В каталоге теперь имеется полная потоковая копия:

student$ pg_probackup show \
  -B /probackup --instance ent-16 \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
==========================================================================================
====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN  Stop LSN   Status
==========================================================================================
====================================================
 ent-16    16       TIUQ8D  2026-07-27 23:58:05.547695+03  FULL  STREAM    1/0   17s
328MB  16MB  none    1,00  0/C000028  0/C001820  OK

Page 6: Политики хранения

Удаление лишних копий

  • Закрепление копий
  • Политика хранения WAL

Page 7: Удаление лишних копий

Source slide page 7: Удаление лишних копий{#source-figure-007 caption=“Source slide page 7: Удаление лишних копий”}

По умолчанию в каталоге хранятся все резервные копии

  • Политика хранения определяет правила удаления копий
    • количество хранимых копий
    • окно удержания в днях

Комментарии преподавателя

Экземпляру можно задать индивидуальную политику хранения резервных копий, определяющую, какие резервные копии следует считать устаревшими и ненужными. Политика определяется количеством полных копий, которые должны сохраняться в каталоге, а также окном удержания, которое определяет самый ранний момент времени, на который pg_probackup должен обеспечить восстановление. Окно удержания ограничивает количество дней сохранения избыточных копий в каталоге.

Например, если окно удержания установлено в значение 7 дней, то в каталоге должна сохраняться минимум одна копия старше 7 дней с файлами WAL и цепочкой инкрементальных копий.

Политика хранения задается параметрами:

● –retention-redundancy — количество полных резервных копий, которое должно сохраняться в каталоге;

● –retention-window — количество дней от текущего момента до самого раннего момента времени в прошлом, на который может быть выполнено восстановление.

Параметры можно указать в командной строке pg_probackup для команд backup или delete, или сохранить в конфигурации командой set-config.

https://postgrespro.ru/docs/enterprise/16/app-pgprobackup#PBK-RETENTI ON-POLICY

Page 8: Закрепление копий

Source slide page 8: Закрепление копий{#source-figure-008 caption=“Source slide page 8: Закрепление копий”}

На закрепленные копии политика хранения не действует

  • Параметры закрепления (команды backup и set-backup)
    • -ttl — время закрепления
    • -expire-time — срок хранения резервной копии

Комментарии преподавателя

Если нужно хранить копию дольше, чем задано политикой хранения, можно закрепить ее на определенное время.

Закрепление можно задать при выполнении команды backup или сохранить в конфигурации командой set-backup.

Параметр –ttl задает требуемое время жизни копии, по умолчанию предполагаются секунды. Значение ноль отменяет закрепление.

Другой вариант — явно задать время истечения срока хранения копии, воспользовавшись параметром –expire-time.

Определить, закреплена ли копия, можно с помощью команды show утилиты pg_probackup. Закрепленная копия имеет атрибут expire-time, содержащий время окончания срока ее хранения.

https://postgrespro.ru/docs/enterprise/16/app-pgprobackup#PBK-BACKUP-PINNING

Page 9: Политика хранения WAL

Source slide page 9: Политика хранения WAL{#source-figure-009 caption=“Source slide page 9: Политика хранения WAL”}

Политика хранения архива WAL ограничивает глубину архива для экономии места в хранилище

  • Удаление устаревших копий с –delete-wal сопровождается удалением лишних сегментов WAL

Комментарии преподавателя

При работе в режиме непрерывного архивирования сегменты WAL накапливаются в хранилище. Но его емкость ограничена.

Можно удалять устаревшие резервные копии с параметром –delete-wal. При этом удаляются только те сегменты WAL, которые не относятся ни к одной из резервных копий в каталоге. Если возможность восстановления на момент времени нужна только для самых недавних резервных копий, можно, настроив политику хранения архива WAL, ограничить число таких копий — глубину архива — и сэкономить занимаемое место. Из копии, оставшейся без архива WAL, можно восстановиться, только если она является автономной (то есть содержит необходимые журнальные файлы).

Политику хранения архива WAL настраивают параметром –wal-depth. Установленная политика действует для всех линий времени, поэтому можно выполнять PITR для одинакового количества копий на каждой линии времени. Закрепленные копии в этом числе не учитываются.

Можно вручную удалить сегменты, не удовлетворяющие заданной политике хранения архива WAL, выполнив команду pg_probackup delete или pg_probackup backup –delete-wal.

https://postgrespro.ru/docs/enterprise/16/app-pgprobackup#PBK-WAL-ARC HIVE-RETENTION-POLICY

Page 10: Политики хранения копий

Выполним еще одно полное резервное копирование.

student$ pg_probackup backup \
  -B /probackup --instance ent-16 \
  -b FULL \
  --stream \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

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

student$ pg_probackup show \
  -B /probackup \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
BACKUP INSTANCE 'ent-16'
==========================================================================================
====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN  Stop LSN   Status
==========================================================================================
====================================================
 ent-16    16       TIUQ8X  2026-07-27 23:58:21.255063+03  FULL  STREAM    1/0   13s
328MB  16MB  none    1,00  0/E000028  0/E0001A0  OK
 ent-16    16       TIUQ8D  2026-07-27 23:58:05.547695+03  FULL  STREAM    1/0   17s
328MB  16MB  none    1,00  0/C000028  0/C001820  OK

Если принята политика хранить единственную полную резервную копию, то первая созданная копия устарела. Количество хранящихся избыточных копий можно задать непосредственно в командной строке. Выполним удаление, указав, что должна храниться только одна копия.

student$ pg_probackup delete \
  -B /probackup --instance=ent-16 \
  --delete-expired \
  --retention-redundancy=1 \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Проверим состояние каталога резервных копий:

student$ pg_probackup show \
  -B /probackup \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
BACKUP INSTANCE 'ent-16'
==========================================================================================
====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN  Stop LSN   Status
==========================================================================================
====================================================
 ent-16    16       TIUQ8X  2026-07-27 23:58:21.255063+03  FULL  STREAM    1/0   13s
328MB  16MB  none    1,00  0/E000028  0/E0001A0  OK

Осталась единственная полная резервная копия. Зафиксируем политику удержания единственной полной копии в конфигурации.

student$ pg_probackup set-config \
  -B /probackup --instance ent-16 \
  --retention-redundancy=1 \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Сделаем полную копию со сжатием. Укажем, что должны быть удалены устаревшие в соответствии с политикой хранения копии и сегменты WAL.

student$ pg_probackup backup \
  -b FULL \
  -B /probackup --instance ent-16 \

Page 11: Page 11

  --stream \
  --compress \
  --delete-expired \
  --delete-wal \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Теперь в каталоге осталась последняя полная резервная копия.

student$ pg_probackup show \
  -B /probackup \
  --s3=minio \
  --s3-config-file=/home/student/s3.config
BACKUP INSTANCE 'ent-16'
==========================================================================================
=====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN   Stop LSN    Status
==========================================================================================
=====================================================
 ent-16    16       TIUQ9F  2026-07-27 23:58:38.548337+03  FULL  STREAM    1/0   12s
83MB  16MB  zstd    3,93  0/10000028  0/100001E8  OK

Page 12: Журнал

Журнал сообщений

  • Ротация журнала

Page 13: Журнал сообщений

По умолчанию pg\_probackup выводит сообщения в stderr

  • Можно указать файл журнала для записи сообщений
    • отдельный журнал для сообщений об ошибках
  • Уровни важности сообщений настраиваются отдельно для вывода на консоль и в файл журнала
  • Ротация файлов журнала
    • по достижении заданного размера файла
    • ограничением времени записи в файл

Комментарии преподавателя

В pg_probackup определены следующие уровни важности сообщений: verbose, log, info, warning, error и off. Каждый уровень включает все последующие, и с каждым следующим уровнем объем сообщений уменьшается. При работе pg_probackup сообщения с уровнем важности info и выше выводятся по умолчанию на консоль в стандартный поток вывода ошибок stderr.

Уровень сообщений настраивается отдельно для консоли (–log-level-console) и для файла журнала (–log-level-file).

Для записи сообщений в журнал следует задать имя файла с помощью параметра –log-filename. По умолчанию файл располагается в подкаталоге log каталога резервных копий, параметром –log-directory расположение можно переопределить.

Сообщения как на консоль, так и в журнал, можно выводить в обычном текстовом виде или в формате JSON.

Настройкой –error-log-filename можно указать шаблон имен файлов для сообщений об ошибках.

Чтобы журналы сообщений не разрастались бесконтрольно, нужно настроить ротацию. Она может происходить по достижении указанного размера файла журнала (–log-rotation-size), либо по достижении максимального времени записи в файл (–log-rotation-age).

https://postgrespro.ru/docs/enterprise/16/app-pgprobackup#PBK-LOGGING-OPTS

Page 14: Настройка журнала сообщений

Настроим параметры для журнала сообщений: –log-level-file — уровень сообщений, которые будут выводиться в файл журнала; –log-level-console — уровень сообщений, которые будут выводиться на консоль; –log-filename — имя файла журнала (по умолчанию в подкаталоге log, расположение можно изменить с помощью – log-directory); –log-rotation-size — размер файла, при превышении которого выполняется ротация. Нам потребуется каталог для хранения файлов журналов:

student$ mkdir /home/student/log
student$ pg_probackup set-config \
  -B /probackup \
  --instance ent-16 \
  --log-directory=/home/student/log \
  --log-filename=probackup.log \
  --log-rotation-size=500kB \
  --log-level-file=info \
  --log-level-console=WARNING \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Выполним резервное копирование с только что заданными настройками журнала сообщений.

student$ pg_probackup backup \
  -b FULL \
  -B /probackup \
  --instance ent-16 \
  --stream \
  --compress \
  --delete-expired \
  --delete-wal \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

Заглянем в каталог с журналом:

student$ ls -lh /home/student/log
total 8,0K
-rw-rw-r-- 1 student student 2,7K июл 27 23:59 probackup.log
-rw-rw-r-- 1 student student   10 июл 27 23:58 probackup.log.rotation

Еще раз выполним резервное копирование, включив подробный вывод сообщений в журнал.

student$ pg_probackup backup \
  -b FULL \
  -B /probackup \
  --instance ent-16 \
  --stream \
  --compress \
  --delete-expired \
  --delete-wal \
  --log-level-file=VERBOSE \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

В журнал записалось большое количество сообщений.

student$ ls -lh /home/student/log
total 852K
-rw-rw-r-- 1 student student 848K июл 27 23:59 probackup.log
-rw-rw-r-- 1 student student   10 июл 27 23:59 probackup.log.rotation

Повторим эксперимент с уровнем важности сообщений по умолчанию. Файл журнала сообщений достиг размера, при котором должна произойти ротация:

student$ pg_probackup backup \
  -b FULL \
  -B /probackup \
  --instance ent-16 \
  --stream \
  --compress \
  --delete-expired \

Page 15: Page 15

  --delete-wal \
  --s3=minio \
  --s3-config-file=/home/student/s3.config

В результате ротации журнала старые сообщения были стерты и размер файла уменьшился.

student$ ls -lh /home/student/log
total 8,0K
-rw-rw-r-- 1 student student 2,4K июл 27 23:59 probackup.log
-rw-rw-r-- 1 student student   10 июл 27 23:59 probackup.log.rotation

Корзина bkp нам больше не понадобится, удалим ее:

student$ /usr/local/bin/mc --quiet rb --force local/bkp
Removed `local/bkp` successfully.

Page 16: Итоги

Каталог резервных копий может размещаться в облаке S3

  • Поддерживаются политики хранения, определяющие правила удаления резервных копий и сегментов WAL
  • Можно настроить журналирование сообщений и ротацию

Page 17: Практика

  1. Инициализируйте каталог резервных копий и добавьте в него экземпляр, подготовив его для локальной работы. 2. Настройте вывод сообщений в журнал и политику хранения единственной полной копии. 3. Проверьте удаление лишних копий, несколько раз выполнив полное копирование. Найдите в журнале сообщений соответствующие строки.

Комментарии преподавателя

  1. Инициализируйте каталог с помощью pg_probackup init, а затем добавьте в него экземпляр командой pg_probackup add-instance. Зарегистрировав роль backup, создайте базу данных для подключения из шаблона templateprobackup.

  2. При выполнении полного резервного копирования используйте параметр –stream.

Page 18: 1. Подготовка каталога резервных копий

Подготовим каталог в файловой системе.

student$ sudo mkdir /var/probackup
student$ sudo chown student: /var/probackup

Инициализируем каталог копий.

student$ pg_probackup init -B /var/probackup
INFO: Backup catalog '/var/probackup' successfully initialized

Зарегистрируем экземпляр.

student$ pg_probackup add-instance \
  -B /var/probackup --instance ent-16 \
  -D /var/lib/pgpro/ent-16
INFO: Instance 'ent-16' successfully initialized

Создадим базу данных для подключения.

student$ psql
=> CREATE DATABASE pgpro_probackup_3 OWNER backup TEMPLATE templateprobackup;
CREATE DATABASE
=> \c pgpro_probackup_3
You are now connected to database "pgpro_probackup_3" as user "student".

2. Настройка журнала сообщений

Установим политику хранения единственной полной копии и вывод сообщений в журнал.

student$ pg_probackup set-config \
  -B /var/probackup --instance ent-16 \
  -d pgpro_probackup_3 \
  -U backup \
  --retention-redundancy=1 \
  --log-filename=probackup.log \
  --log-level-file=info \
  --log-level-console=WARNING

3. Полная копия

Сформируем полную копию:

student$ pg_probackup backup \
  -B /var/probackup --instance ent-16 \
  -b FULL \
  --stream

Проверим каталог копий.

student$ pg_probackup show \
  -B /var/probackup --instance ent-16
==========================================================================================
====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN  Stop LSN   Status
==========================================================================================
====================================================
 ent-16    16       TIURC3  2026-07-28 00:21:44.611950+03  FULL  STREAM    1/0   30s
328MB  16MB  none    1,00  0/C000028  0/C0017D8  OK

Еще одна полная копия.

student$ pg_probackup backup \
  -B /var/probackup --instance ent-16 \
  -b FULL \
  --stream \

Page 19: Page 19

  --delete-expired

Проверим каталог копий — предыдущая копия удалена:

student$ pg_probackup show \
  -B /var/probackup --instance ent-16
==========================================================================================
====================================================
 Instance  Version  ID      Recovery Time                  Mode  WAL Mode  TLI  Time
Data   WAL  Zalg  Zratio  Start LSN  Stop LSN   Status
==========================================================================================
====================================================
 ent-16    16       TIURCX  2026-07-28 00:22:10.953566+03  FULL  STREAM    1/0   22s
328MB  16MB  none    1,00  0/E000028  0/E0001E8  OK

Выведем последние строки журнала сообщений:

student$ tail -n 7 /var/probackup/log/probackup.log
2026-07-28 00:22:31 MSK [901065]: INFO: Evaluate backups by retention
2026-07-28 00:22:31 MSK [901065]: INFO: Backup TIURCX, mode: FULL, status: OK.
Redundancy: 1/1, Time Window: 0d/0d. Active
2026-07-28 00:22:31 MSK [901065]: INFO: Backup TIURC3, mode: FULL, status: OK.
Redundancy: 2/1, Time Window: 0d/0d. Expired
2026-07-28 00:22:31 MSK [901065]: INFO: Delete: TIURC3 2026-07-28 00:21:44+03
2026-07-28 00:22:31 MSK [901065]: INFO: There are no backups to merge by retention policy
2026-07-28 00:22:31 MSK [901065]: INFO: Purging finished
2026-07-28 00:22:31 MSK [901065]: INFO: There is no WAL to purge by retention policy

Уборка

Удалим созданную базу данных и каталог копий.

=> \c student
You are now connected to database "student" as user "student".
=> DROP DATABASE pgpro_probackup_3 WITH (FORCE);
DROP DATABASE
student$ sudo rm -rf /var/probackup

Page 20: Практика PPEM

  1. Создайте S3-хранилище резервных копий для экземпляра ent-16 и назовите его ent-16_minio, а каталог копий — /backup_s3. Определите политику хранения только одной полной копии с удалением просроченных. 2. Сделайте автономную резервную копию основного экземпляра ent-16 в созданное хранилище. 3. В базе данных student основного экземпляра создайте новую таблицу в схеме public с одним целочисленным столбцом (первичным ключом). 4. Сделайте разностную резервную копию основного экземпляра в S3-хранилище. 5. Убедитесь, что установленная в п. 1 политика хранения действует.

Комментарии преподавателя

  1. Используйте ПО MinIO, установленное в виртуальной машине курса. Для доступа к хранилищу нужно запустить соответствующую службу: sudo systemctl start minio

Настройки доступа к хранилищу возьмите из демонстрации.

В параметрах хранения укажите число полных копий — 1, просроченные копии — удалять.

  1. При отсутствии архивации WAL нужно оставить включенным параметр «создать автономную копию».

Page 21: 1. Создание S3-хранилища копий

В навигационной панели выберите вкладку «Резервное копирование», в ней — «Хранилища РК» и нажмите «Добавить хранилище». Выберите тип «S3 хранилище», заполните поля открывшейся формы, уделив особое внимание разделу «Параметры хранения» и нажмите «Добавить».

2. Автономная резервная копия

Выберите вкладку «Резервные копии» и нажмите кнопку «Создать резервную копию». Далее в последовательно открывающихся формах заполните необходимые поля и нажмите «Выполнить РК».

3. Изменения в данных экземпляра (создание таблицы)

Во вкладке «Базы данных» выберите базу student, а в ней схему public. Нажмите «Создать таблицу», заполните поля формы и нажмите «Сохранить».

4. Разностная резервная копия

Из вкладки «Резервные копии» выполните создание разностной копии, выбрав режим копирования delta.

5. Действие политики хранения

Выполните еще одно полное резервное копирование экземпляра и проверьте список резервных копий.