pg_probackup
pg_probackup — управление резервным копированием и восстановлением кластеров баз данных Postgres Pro
Синтаксис
pg_probackup
version
pg_probackup
help
[команда
]
pg_probackup
init
-B
каталог_копий
--skip-if-exists
pg_probackup
add-instance
-B
каталог_копий
-D
каталог_данных
--instance
имя_экземпляра
--skip-if-exists
pg_probackup
del-instance
-B
каталог_копий
--instance
имя_экземпляра
pg_probackup
set-config
-B
каталог_копий
--instance
имя_экземпляра
[параметр
...]
pg_probackup
set-backup
-B
каталог_копий
--instance
имя_экземпляра
-i
ид_резервной_копии
[параметр
...]
pg_probackup
show-config
-B
каталог_копий
--instance
имя_экземпляра
[параметр
...]
pg_probackup
show
-B
каталог_копий
[параметр
...]
pg_probackup
backup
-B
каталог_копий
--instance
имя_экземпляра
-b
режим_копирования
[параметр
...]
pg_probackup
restore
-B
каталог_копий
--instance
имя_экземпляра
[параметр
...]
pg_probackup
checkdb
-B
каталог_копий
--instance
имя_экземпляра
-D
каталог_данных
[параметр
...]
pg_probackup
validate
-B
каталог_копий
[параметр
...]
pg_probackup
merge
-B
каталог_копий
--instance
имя_экземпляра
-i
ид_резервной_копии
[параметр
...]
pg_probackup
delete
-B
каталог_копий
--instance
имя_экземпляра
{ -i
ид_резервной_копии
| --delete-wal
| --delete-expired
| --merge-expired
} [параметр
...]
pg_probackup
archive-push
-B
каталог_копий
--instance
имя_экземпляра
--wal-file-path
путь_файлов_wal
--wal-file-name
имя_файла_wal
[параметр
...]
pg_probackup
archive-get
-B
каталог_копий
--instance
имя_экземпляра
--wal-file-path
путь_файлов_wal
--wal-file-name
имя_файла_wal
[параметр
...]
pg_probackup
catchup
-b
режим_синхронизации
--source-pgdata
=путь_к_копируемому_каталогу_данных
--destination-pgdata
=путь_к_целевому_каталогу_данных
[параметр
...]
Описание #
pg_probackup — это утилита для управления резервным копированием и восстановлением кластеров баз данных Postgres Pro. Она предназначена для регулярного создания резервных копий экземпляра Postgres Pro, позволяющих восстанавливать сервер в случае необходимости. pg_probackup поддерживает PostgreSQL версии 11 и новее.
Обзор #
По сравнению с другими средствами резервного копирования pg_probackup имеет следующие преимущества, полезные для реализации различных стратегий резервного копирования и работы с базами данных большого объёма:
Инкрементальное копирование: выбирая один из трёх режимов инкрементального копирования, вы можете реализовать стратегию резервного копирования, соответствующую вашему профилю транзакционной нагрузки. Это позволяет сэкономить место на диске и создавать копии быстрее, чем при полном копировании. Восстановление инкрементальных копий также осуществляется быстрее, чем воспроизведение файлов WAL.
Инкрементальное восстановление: ускорение восстановления из копии благодаря повторному использованию неизменённых страниц, имеющихся в
PGDATA
.Проверка: автоматический контроль целостности данных и проверка резервных копий без восстановления данных кластера.
Контроль целостности: выполняемая по запросу проверка экземпляра Postgres Pro с помощью команды
checkdb
.Политика хранения: управление архивами WAL и резервными копиями в соответствии с установленными правилами их хранения. Вы можете ограничить хранение резервных копий по времени или их количеству, а также переопределить время жизни (TTL) для избранных копий. Потерявшие актуальность резервные копии могут объединяться или удаляться.
Параллельное выполнение: выполнение внутренних процессов команд
backup
,restore
,merge
,delete
,validate
иcheckdb
в несколько параллельных потоков.Сжатие: хранение копируемых данных в сжатом состоянии для экономии дискового пространства.
Исключение дублирования: экономия дискового пространства за счёт фильтрации при инкрементальном копировании файлов, не содержащих непосредственно данные (например, файлов
_vm
или_fsm
), если эти файлы не изменялись с момента создания предыдущей копии в цепочке инкрементальных копий.Удалённый режим работы: выполнение резервного копирования экземпляра Postgres Pro, находящегося в удалённой системе, и удалённое восстановление.
Получение резервной копии с ведомого: исключение дополнительной нагрузки на ведущий сервер.
Архивирование внешних каталогов: резервное копирование файлов и каталогов, расположенных вне каталога данных Postgres Pro (
PGDATA
), например скриптов, файлов конфигурации, журналов или SQL-дампов.Каталогизация резервных копий: получение списка резервных копий и соответствующей метаинформации в виде простого текста или JSON.
Каталогизация архивов WAL: получение списка всех линий времени в WAL и соответствующей метаинформации в виде простого текста или JSON.
Частичное восстановление: восстановление только избранных баз данных.
Синхронизация: клонирование экземпляра Postgres Pro, в результате которого отставший ведомый сервер синхронизируется с ведущим.
Для управления резервными копиями pg_probackup создаёт каталог резервных копий. В этом каталоге сохраняются все файлы резервных копий с дополнительной метаинформацией, а также архивы WAL, необходимые для восстановления на момент времени. Вы можете хранить резервные копии разных экземпляров в отдельных подкаталогах одного каталога копий.
Используя pg_probackup, вы можете выполнять полное или инкрементальное резервное копирование:
Полные резервные копии содержат все файлы данных, необходимые для восстановления кластера баз данных с нуля.
Инкрементальные копии создаются на уровне страниц и включают только те данные, которые изменились со времени последнего копирования. Это позволяет сэкономить место на диске и создавать копии быстрее, чем при полном копировании. Восстановление инкрементальных копий также осуществляется быстрее, чем воспроизведение файлов WAL. pg_probackup поддерживает следующие режимы инкрементального копирования:
Разностное копирование. В режиме
DELTA
pg_probackup считывает все файлы данных в каталоге данных и копирует только те страницы, которые изменились со времени предыдущего копирования. Для использования данного режима не требуется производить непрерывное архивирование. В этом режиме объём ввода/вывода может равняться объёму при полном резервном копировании.Страничное копирование. В режиме
PAGE
pg_probackup сканирует все файлы WAL в архиве с момента создания предыдущей полной или инкрементальной копии. Новая резервная копия будет содержать только страницы, фигурирующие в записях WAL. При этом необходимо, чтобы в архиве WAL сохранялись все файлы WAL, записанные после предыдущей копии. Если размер этих файлов сравним с общим размером файлов базы данных, ускорение будет менее значительным, но размер копии будет всё же меньше.Копирование изменений. В режиме
PTRACK
Postgres Pro отслеживает изменения страниц на лету. Чтобы он работал, не требуется производить непрерывное архивирование WAL. При каждом изменении страницы отношения она помечается в специальной картеPTRACK
. Это отслеживание привносит небольшие издержки в работу сервера, но значительно ускоряет инкрементальное резервное копирование.
pg_probackup может производить копирование только работающего экземпляра, а для обеспечения целостности таких копий требуется копировать WAL. Поэтому вне зависимости от выбранного режима копирования (FULL, PAGE или DELTA), чтобы pg_probackup мог получить полноценную копию, нужно выбрать один из следующих режимов доставки WAL:
ARCHIVE. В таком режиме целостность копий обеспечивается посредством непрерывного архивирования. Это режим доставки WAL по умолчанию.
STREAM. Такие резервные копии включают все файлы, необходимые для восстановления целостного состояния кластера на момент создания копии. Вне зависимости от того, осуществляется ли непрерывное архивирование, необходимые для восстановления сегменты WAL считываются по протоколу потоковой репликации во время резервного копирования и включаются в состав резервной копии. Поэтому такие резервные копии называются автономными или самодостаточными.
Ограничения #
В настоящее время pg_probackup имеет следующие ограничения:
Режим удалённого сервера на платформе Windows не поддерживается.
В Unix-системах копию базы Postgres Pro версии 11 можно сделать только от имени того пользователя, который запускает сервер Postgres Pro. Например, если сервер Postgres Pro запускает пользователь
postgres
, командуbackup
также должен выполнять пользовательpostgres
. Для удовлетворения этого требования в случае использования удалённого режима и SSH в параметре--remote-user
необходимо передатьpostgres
.На сервере Postgres Pro, где была сделана копия, и на сервере, где она будет восстанавливаться, должны быть одинаковые значения параметров block_size и wal_block_size и одинаковая основная версия. В зависимости от конфигурации кластера, Postgres Pro может накладывать дополнительные ограничения, например, по архитектуре процессора и версии libc/icu.
Быстрый запуск #
Чтобы быстро начать работу с pg_probackup, выполните следующие действия. Это позволит настроить резервное копирование удалённо в режимах FULL и DELTA и увидеть некоторые базовые операции pg_probackup. Далее используются следующие обозначения:
backup
— роль в Postgres Pro, используемая для подключения к кластеру Postgres Pro.backupdb
— база данных, через которую выполняется подключение к кластеру Postgres Pro.backup_host
— система, где находится каталог резервных копий.backup_user
— пользователь в системеbackup_host
, от имени которого выполняются все операции pg_probackup./mnt/backups
— путь к каталогу резервных копий в системеbackup_host
.postgres_host
— система, в которой работает Postgres Pro.postgres
— пользователь в системеpostgres_host
, от имени которого запускаются процессы кластера Postgres Pro./var/lib/pgpro/std-16/data
— путь к каталогу данных Postgres Pro в системеpostgres_host
.
Выполните следующие шаги: #
Установите pg_probackup в обеих системах:
backup_host
(сервер резервного копирования) иpostgres_host
(сервер баз данных).Настройте подключение через SSH с
backup_host
кpostgres_host
:Настройте кластер баз данных для резервного копирования в режиме STREAM.
Проинициализируйте каталог резервных копий:
backup_user@backup_host:~$ pg_probackup init -B /mnt/backups INFO: Backup catalog '/mnt/backups' successfully initialized
Добавьте экземпляр с именем
mydb
в каталог резервных копий:backup_user@backup_host:~$ pg_probackup add-instance \ -B /mnt/backups \ -D /var/lib/pgpro/std-16/data \ --instance=node \ --remote-host=postgres_host \ --remote-user=postgres INFO: Instance 'node' successfully initialized
Сделайте полную резервную копию:
backup_user@backup_host:~$ pg_probackup backup \ -B /mnt/backups \ -b FULL \ --instance=node \ --stream \ --compress-algorithm=zstd \ --remote-host=postgres_host \ --remote-user=postgres \ -U backup \ -d backupdb INFO: Backup start, pg_probackup version: 2.7.3, instance: node, backup ID: SBOL6J, backup mode: FULL, wal mode: STREAM, remote: true, compress-algorithm: zstd, compress-level: 1 WARNING: pgpro_edition() function is old-style and will be removed in future major release, use pgpro_edition GUC variable instead. INFO: This PostgreSQL instance was initialized with data block checksums. Data block corruption will be detected INFO: Database backup start INFO: wait for pg_backup_start() INFO: PGDATA size: 96MB INFO: Current Start LSN: 0/8000028, TLI: 1 INFO: Start transferring data files INFO: Data files are transferred, time elapsed: 2s INFO: wait for pg_stop_backup() INFO: pg_stop_backup() successfully executed INFO: stop_stream_lsn 0/9000000 currentpos 0/9000000 INFO: backup->stop_lsn 0/8004E40 INFO: Getting the Recovery Time from WAL INFO: Syncing backup files to disk INFO: Backup files are synced, time elapsed: 1s INFO: Validating backup SBOL6J INFO: Backup SBOL6J data files are valid INFO: Backup SBOL6J resident size: 53MB INFO: Backup SBOL6J completed
Выведите список резервных копий экземпляра:
backup_user@backup_host:~$ pg_probackup show \ -B /mnt/backups \ --instance=node ============================================================================================================================================= Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status ============================================================================================================================================= node 17 SBOL6J 2024-04-09 18:18:21.970314+03 FULL STREAM 1/0 4s 37MB 16MB zstd 2.57 0/8000028 0/8004E40 OK
Сделайте инкрементальную резервную копию в режиме DELTA:
backup_user@backup_host:~$ pg_probackup backup \ -B /mnt/backups \ -b DELTA \ --instance=node \ --stream \ --compress-algorithm=zstd \ --remote-host=postgres_host \ --remote-user=postgres \ -U backup \ -d backupdb INFO: Backup start, pg_probackup version: 2.7.3, instance: node, backup ID: SBOL6N, backup mode: DELTA, wal mode: STREAM, remote: true, compress-algorithm: zstd, compress-level: 1 WARNING: pgpro_edition() function is old-style and will be removed in future major release, use pgpro_edition GUC variable instead. INFO: This PostgreSQL instance was initialized with data block checksums. Data block corruption will be detected INFO: Database backup start INFO: wait for pg_backup_start() INFO: Parent backup: SBOL6J INFO: PGDATA size: 96MB INFO: Current Start LSN: 0/9000028, TLI: 1 INFO: Parent Start LSN: 0/8000028, TLI: 1 INFO: Start transferring data files INFO: Data files are transferred, time elapsed: 1s INFO: wait for pg_stop_backup() INFO: pg_stop_backup() successfully executed INFO: stop_stream_lsn 0/A000000 currentpos 0/A000000 INFO: backup->stop_lsn 0/9000190 INFO: Getting the Recovery Time from WAL INFO: Syncing backup files to disk INFO: Backup files are synced, time elapsed: 0 INFO: Validating backup SBOL6N INFO: Backup SBOL6N data files are valid INFO: Backup SBOL6N resident size: 17MB INFO: Backup SBOL6N completed
Добавьте или измените несколько параметров в файле конфигурации pg_probackup, чтобы их не надо было каждый раз указывать в командной строке:
backup_user@backup_host:~$ pg_probackup set-config \ -B /mnt/backups \ --instance=node \ --remote-host=postgres_host \ --remote-user=postgres \ -U backup \ -d backupdb
Проверьте конфигурацию экземпляра:
backup_user@backup_host:~$ pg_probackup show-config \ -B /mnt/backups \ --instance=node # Backup instance information pgdata = /var/lib/pgpro/std-16/data system-identifier = 7355886958826772732 xlog-seg-size = 16777216 # Connection parameters pgdatabase = backupdb pghost = postgres_host pguser = backup # Archive parameters archive-timeout = 5min # Logging parameters log-level-console = INFO log-level-file = OFF log-format-console = PLAIN log-format-file = PLAIN log-filename = pg_probackup.log log-rotation-size = 0TB log-rotation-age = 0d # Retention parameters retention-redundancy = 0 retention-window = 0 wal-depth = 0 # Compression parameters compress-algorithm = none compress-level = 1 # Remote access parameters remote-proto = ssh remote-host = postgres_host remote-user = postgres
Обратите внимание, что параметры, не изменённые командой
set-config
, сохраняют значения по умолчанию.Сделайте ещё одну инкрементальную копию в режиме DELTA, опустив параметры, ранее сохранённые в файле конфигурации:
backup_user@backup_host:~$ pg_probackup backup \ -B /mnt/backups \ -b DELTA \ --instance=node \ --stream \ --compress-algorithm=zstd INFO: Backup start, pg_probackup version: 2.7.3, instance: node, backup ID: SBOL6P, backup mode: DELTA, wal mode: STREAM, remote: true, compress-algorithm: zstd, compress-level: 1 WARNING: pgpro_edition() function is old-style and will be removed in future major release, use pgpro_edition GUC variable instead. INFO: This PostgreSQL instance was initialized with data block checksums. Data block corruption will be detected INFO: Database backup start INFO: wait for pg_backup_start() INFO: Parent backup: SBOL6N INFO: PGDATA size: 96MB INFO: Current Start LSN: 0/A000028, TLI: 1 INFO: Parent Start LSN: 0/9000028, TLI: 1 INFO: Start transferring data files INFO: Data files are transferred, time elapsed: 1s INFO: wait for pg_stop_backup() INFO: pg_stop_backup() successfully executed INFO: stop_stream_lsn 0/B000000 currentpos 0/B000000 INFO: backup->stop_lsn 0/A000190 INFO: Getting the Recovery Time from WAL INFO: Syncing backup files to disk INFO: Backup files are synced, time elapsed: 0 INFO: Validating backup SBOL6P INFO: Backup SBOL6P data files are valid INFO: Backup SBOL6P resident size: 17MB INFO: Backup SBOL6P completed
Вновь выведите список резервных копий экземпляра:
backup_user@backup_host:~$ pg_probackup show \ -B /mnt/backups \ --instance=node ================================================================================================================================================ Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status ================================================================================================================================================ node 17 SBOL6P 2024-04-09 18:18:26.630175+03 DELTA STREAM 1/1 1s 1147kB 16MB zstd 1.00 0/A000028 0/A000190 OK node 17 SBOL6N 2024-04-09 18:18:25.015713+03 DELTA STREAM 1/1 2s 1160kB 16MB zstd 1.04 0/9000028 0/9000190 OK node 17 SBOL6J 2024-04-09 18:18:21.970314+03 FULL STREAM 1/0 4s 37MB 16MB zstd 2.57 0/8000028 0/8004E40 OK
Восстановите данные из последней доступной копии в произвольный каталог:
backup_user@backup_host:~$ pg_probackup restore \ -B /mnt/backups \ -D /var/lib/pgpro/std-16/staging-data \ --instance=node INFO: Validating parents for backup SBOL6P INFO: Validating backup SBOL6J INFO: Backup SBOL6J data files are valid INFO: Validating backup SBOL6N INFO: Backup SBOL6N data files are valid INFO: Validating backup SBOL6P INFO: Backup SBOL6P data files are valid INFO: Backup SBOL6P WAL segments are valid INFO: Backup SBOL6P is valid. INFO: Restoring the database from the backup starting at 2024-04-09 18:18:25+03 on localhost INFO: Start restoring backup files. PGDATA size: 112MB INFO: Backup files are restored. Transferred bytes: 112MB, time elapsed: 2s INFO: Restore incremental ratio (less is better): 100% (112MB/112MB) INFO: Syncing restored files to disk INFO: Restored backup files are synced, time elapsed: 1s INFO: Restore of backup SBOL6P completed.
Установка и подготовка #
Установив pg_probackup, выполните следующие действия:
Инициализируйте каталог резервных копий.
Добавьте копируемый экземпляр в каталог копий.
Настройте кластер баз данных для использования pg_probackup.
Настройте SSH для выполнения операций pg_probackup в удалённом режиме, если вы планируете его использовать.
Инициализация каталога резервных копий #
pg_probackup сохраняет все файлы копируемых данных и WAL в соответствущих подкаталогах каталога резервных копий.
Для инициализации каталога резервных копий выполните команду:
pg_probackup init -B каталог_копий
здесь каталог_копий
— это каталог, предназначенный для резервных копий. Если каталог_копий
уже существует, он должен быть пустым. В противном случае pg_probackup выдаст ошибку.
Пользователь, запускающий pg_probackup, должен иметь полный доступ к каталогу_копий
.
pg_probackup создаёт каталог_копий
со следующими подкаталогами:
wal/
— каталог для файлов WAL.backups/
— каталог для файлов резервных копий.
Проинициализировав каталог резервных копий, вы можете добавить определение копируемого экземпляра.
Определение копируемого экземпляра #
pg_probackup может сохранять резервные копии разных кластеров баз данных в одном каталоге резервных копий. Для создания необходимых подкаталогов вы должны определить копируемый экземпляр в каталоге копий для каждого кластера баз данных, копию которого вы будете делать.
Для определения копируемого экземпляра выполните команду:
pg_probackup add-instance -Bкаталог_копий
-Dкаталог_данных
--instance=имя_экземпляра
[параметры_удалённого_режима
]
Здесь:
каталог_данных
— каталог, содержащий данные кластера, копию которого вы хотите сделать. Для подготовки и использования pg_probackup необходимо иметь право записи в этот каталог.имя_экземпляра
— это имя подкаталогов, в которых будут храниться файлы копируемых данных и WAL для этого кластера.параметры_удалённого_режима должны задаваться дополнительно, если
каталог_данных
располагается удалённо.
pg_probackup создаёт подкаталоги имя_экземпляра
в каталогах backups/
и wal/
внутри каталога резервных копий. Каталог backups/
содержит файл конфигурации имя_экземпляра
pg_probackup.conf
с параметрами pg_probackup, относящимися к данному экземпляру копии. Если этой команде передать параметры_удалённого_режима, они будут добавлены в pg_probackup.conf
.
Более подробно тонкая настройка pg_probackup описывается в Подразделе «Настройка pg_probackup».
Пользователь, запускающий pg_probackup, должен иметь полный доступ к каталогу_копий
и как минимум доступ на чтение всего содержимого каталога_данных
. Если вы зададите путь к каталогу копий в переменной окружения BACKUP_PATH
, соответствующий параметр в командах pg_probackup можно не указывать.
Примечание
Для Postgres Pro версии 11 и новее рекомендуется использовать возможность Доступ группы, чтобы выполнить копирование мог любой пользователь ОС, включённый в группу владельца кластера. В этом случае пользователь должен иметь права на чтение каталога кластера.
Настройка кластера баз данных #
Хотя pg_probackup можно использовать от имени суперпользователя, рекомендуется создать отдельную роль с минимальными правами, необходимыми для выбранной стратегии копирования. В этих инструкциях по настройке такой ролью служит роль backup
.
Из соображений безопасности для выполнения следующих конфигурационных SQL-запросов рекомендуется использовать отдельную базу данных.
postgres=# CREATE DATABASE backupdb; postgres=# \c backupdb
Для выполнения резервного копирования роль backup
должна иметь следующие разрешения на сервере Postgres Pro (только в базе данных, к которой производится подключение).
Для версий Postgres Pro 11 — 14:
BEGIN; CREATE ROLE backup WITH LOGIN; GRANT USAGE ON SCHEMA pg_catalog TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup; COMMIT;
Для Postgres Pro версии 15 или новее:
BEGIN; CREATE ROLE backup WITH LOGIN; GRANT USAGE ON SCHEMA pg_catalog TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.set_config(text, text, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_start(text, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_backup_stop(boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup; COMMIT;
В файле pg_hba.conf разрешите подключение к кластеру баз данных пользователю с ролью backup
.
Программа pg_probackup должна читать непосредственно файлы кластера, поэтому запускать pg_probackup (или подключаться к нему удалённо) нужно от имени пользователя ОС, который имеет доступ на чтение всех файлов и каталогов внутри каталога данных кластера (PGDATA
), подлежащего копированию.
В зависимости от того, будете ли вы делать самодостаточные или архивные копии, конфигурация кластера Postgres Pro будет разной (об особенностях рассказывается ниже). Чтобы получить копию кластера баз данных с ведомого сервера, запустить pg_probackup в удалённом режиме или создать резервную копию PTRACK, требуется дополнительная настройка.
Подробнее об этом рассказывается в подразделах Настройка потокового резервного копирования, Настройка непрерывного архивирования WAL, Настройка копирования с резервного сервера, Настройка удалённого режима, Настройка частичного восстановления и Настройка копирования PTRACK.
Настройка потокового резервного копирования #
Чтобы настроить кластер для потокового резервного копирования, выполните следующие действия:
Если роль
backup
не существует, создайте её с правомREPLICATION
при Настройке кластера базы данных:CREATE ROLE backup WITH LOGIN REPLICATION;
Если роль
backup
уже существует, дайте ей правоREPLICATION
:ALTER ROLE backup WITH REPLICATION;
В файле pg_hba.conf разрешите выполнение репликации для роли
backup
.Установите для параметра max_wal_senders достаточно большое значение, предусматривающее минимум одно подключение для процесса резервного копирования.
Задайте для параметра wal_level значение выше
minimal
.
Если вы намерены выполнять страничное резервное копирование в потоковом режиме или восстановление на момент времени с потоковыми копиями, вам тем не менее надо будет настроить архивирование WAL, как описано в подразделе Настройка непрерывного архивирования WAL.
После этих подготовительных действий вы можете делать резервные копии в режимах FULL, PAGE, DELTA и PTRACK, используя потоковую доставку WAL.
Примечание
Если вы намерены использовать .pgpass для прохождения аутентификации при выполнении копирования в потоковом режиме, файл .pgpass
должен содержать учётные данные для подключения к базе данных replication
. Например: pghost:5432:replication:backup_user:my_strong_password
Настройка непрерывного архивирования WAL #
Для выполнения копирования в режиме PAGE, восстановления на момент времени и создания резервных копий с использованием режима доставки WAL ARCHIVE должно осуществляться непрерывное архивирование WAL. Чтобы настроить непрерывное архивирование, выполните следующие действия:
Задайте для параметра wal_level значение выше
minimal
.Если вы настраиваете резервное копирование на ведущем сервере, параметр archive_mode должен иметь значение
on
илиalways
. Для выполнения резервного копирования на ведомом требуется значениеalways
.Установите параметр archive_command:
archive_command = '"
путь_инсталляции
/pg_probackup" archive-push -B "каталог_копий
" --instance=имя_экземпляра
--wal-file-name=%f [параметры_удалённого_режима
]'
Здесь путь_инсталляции
— путь к каталогу установленной версии pg_probackup, которую вы хотите использовать, каталог_копий
и имя_экземпляра
должны указывать на уже проинициализированный для данного кластера БД копируемый экземпляр, а параметры_удалённого_режима должны задаваться только в случае расположения архива WAL в удалённой системе. Подробнее все возможные параметры archive-push
рассматриваются в описании archive-push.
После этих подготовительных действий вы сможете использовать режим доставки WAL ARCHIVE и делать резервные копии в режиме PAGE, а также выполнять восстановление на момент времени.
Вы можете просмотреть текущее состояние архива WAL, воспользовавшись командой show. За подробностями обратитесь к Подразделу «Просмотр оглавления архива WAL».
Если вы планируете выполнять страничное копирование и/или делать копии с ведомого сервера, используя режим доставки WAL ARCHIVE, при недостаточной транзакционной активности может потребоваться долго ждать заполнения очередного сегмента WAL. Чтобы ограничить время ожидания, вы можете воспользоваться параметром Postgres Pro archive_timeout на ведущем сервере. Значение этого параметра должно быть меньше значения --archive-timeout
(по умолчанию 5 минут), чтобы заполненный сегмент успел передаться ведомому серверу и попасть в архив WAL, прежде чем копирование прервётся по тайм-ауту, заданному параметром --archive-timeout
.
Примечание
Вместо использования команды pg_probackup archive-push вы можете воспользоваться любым другим средством, при условии, что в процессе непрерывного архивирования сегменты WAL будут попадать в каталог
. Для сжатия сегментов, если в нём есть потребность, должен использоваться алгоритм каталог_копий
/wal/имя_экземпляра
gzip
, а сжатые файлы сегментов должны иметь расширение .gz
.
Примечание
Организовать непрерывное архивирование можно не только с помощью параметров archive_mode
и archive_command
, но и применяя утилиту pg_receivewal. В этом случае аргумент pg_receivewal -D
должен указывать на каталог каталог
. Программа pg_probackup принимает сжатые WAL, которые может сохранять pg_receivewal. Стратегию архивирования «без потерь» можно реализовать только с использованием pg_receivewal.каталог_копий
/wal/имя_экземпляра
Настройка копирования с ведомого сервера #
Утилита pg_probackup может копировать данные с ведомого сервера. Для этого требуется дополнительная настройка:
Установите на ведомом сервере для параметра hot_standby значение
on
.На ведущем сервере установите для параметра full_page_writes значение
on
.Для получения самодостаточных копий с ведомого сервера выполните действия, описанные в подразделе Настройка потокового копирования.
Для получения архивных копий с ведомого сервера выполните действия, описанные в подразделе Настройка непрерывного архивирования WAL.
После этих подготовительных действий вы можете делать резервные копии с ведомого сервера в режимах FULL, PAGE, DELTA или PTRACK, используя режим доставки WAL ARCHIVE или STREAM.
Копирование с ведомого сервера имеет следующие ограничения:
Если ведомый сервер повышается до ведущего во время копирования, копирование прерывается с ошибкой.
Все необходимые для резервной копии записи WAL должны содержать полные страницы. Для этого требуется включить режим
full_page_writes
на ведущем сервере и отказаться от использования в archive_command утилит, удаляющих полные страницы из файлов WAL, как, например, pg_compresslog.
Настройка проверки целостности кластера #
Для логической проверки кластера БД требуется дополнительная настройка (предполагается, что настройка производится для роли backup
):
Установите расширение amcheck или amcheck_next в каждой базе кластера:
CREATE EXTENSION amcheck;
Дайте роли
backup
в каждой базе данных кластера следующие права:
GRANT SELECT ON TABLE pg_catalog.pg_am TO backup; GRANT SELECT ON TABLE pg_catalog.pg_class TO backup; GRANT SELECT ON TABLE pg_catalog.pg_database TO backup; GRANT SELECT ON TABLE pg_catalog.pg_namespace TO backup; GRANT SELECT ON TABLE pg_catalog.pg_extension TO backup; GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO backup; GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool) TO backup; GRANT EXECUTE ON FUNCTION bt_index_check(regclass, bool, bool) TO backup;
Настройка частичного восстановления #
Если вы планируете производить частичное восстановление, выполните следующее дополнительное действие:
Дайте право на чтение
pg_catalog.pg_database
ролиbackup
в той базе данных, через которую выполняется подключение к серверу Postgres Pro:GRANT SELECT ON TABLE pg_catalog.pg_database TO backup;
Настройка удалённого режима #
Программа pg_probackup поддерживает удалённый режим, в котором резервное копирование, восстановление и архивирование WAL могут выполняться удалённо. В этом режиме каталог резервных копий находится в локальной системе, а целевой экземпляр Postgres Pro работает на удалённом компьютере. В настоящее время это поддерживается с использованием только одного сетевого протокола — SSH.
Настройте SSH #
Если вы хотите использовать pg_probackup в удалённом режиме (применяя SSH), выполните следующие действия:
Установите pg_probackup в обеих системах:
backup_host
(сервер резервного копирования) иpostgres_host
(сервер баз данных).Для организации связи между узлами настройте подключение по SSH пользователя
backup_user
в системеbackup_host
к системеpostrges_host
под именем пользователяpostgres
без указания пароля:backup_user@backup_host:~$ ssh-copy-id postgres@postgres_host
Здесь:
backup_host
— система, в которой находится каталог копий.postrges_host
— система, в которой функционирует кластер Postgres Pro.backup_user
— пользователь в системеbackup_host
, от имени которого запускается pg_probackup.postgres
— пользователь в системеpostgres_host
, от имени которого запускаются процессы кластера Postgres Pro. Для Postgres Pro версии 11 и новее можно применить более безопасный подход, воспользовавшись возможностью предоставления доступа группе.
Если вы будете использовать непрерывное архивирование WAL, настройте подключение по SSH пользователя
postgres
в системеpostgres_host
к системеbackup_host
под именем пользователяbackup
без указания пароля:postgres@postgres_host:~$ ssh-copy-id backup_user@backup_host
Убедитесь, что pg_probackup в системе
postgres_host
можно найти при установке соединения по SSH. Например, чтобы обеспечить это в Bash можно изменитьPATH
в файле~/.bashrc
пользователяpostgres
(над строкой вbashrc
, которая завершает скрипт для неинтерактивных оболочек). Либо для команд pg_probackup можно указать в параметре --remote-path путь к каталогу, содержащему программу pg_probackup в системеpostgres_host
.
pg_probackup работает в удалённом режиме по протоколу SSH следующим образом:
В удалённом режиме поддерживаются только следующие команды: add-instance, backup, restore, delete, catchup, archive-push и archive-get.
Для работы в удалённом режиме необходимо, чтобы программа pg_probackup была установлена и в локальной, и в удалённой системе, при этом одной и той же версии.
При запуске в удалённом режиме основной процесс pg_probackup в локальной системе подключается к удалённой по протоколу SSH и запускает в удалённой системе один или несколько агентов, которые называются удалёнными агентами. Количество удалённых агентов определяется значением параметра
-j
/--threads
.Основной процесс pg_probackup использует удалённые агенты для передачи данных между локальной и удалённой системой и для обращения к её файлам.
Удалённые агенты стараются минимизировать сетевой трафик и количество операций взаимодействия узлов.
Основной процесс обычно запускается в системе
backup_host
и подключается к системеpostgres_host
, но для командarchive-push
иarchive-get
основной процесс запускается в системеpostgres_host
и подключается кbackup_host
.После завершения передачи данных удалённые агенты завершаются и подключения SSH закрываются.
Если какой-либо удалённый агент столкнулся с ошибкой, все агенты завершаются, а основной процесс pg_probackup выдаёт информацию о возникшей ошибке и также нештатно завершается.
Сжатие данных всегда осуществляется в системе
postgres_host
, а распаковка — в системеbackup_host
.
Примечание
Вы можете задать дополнительные ограничительные параметры SSH для защиты целевой системы в случае компрометации используемой учётной записи.
Примечание
Если для pg_probackup, работающего в удалённом режиме через SSH, задать число потоков больше 10 (параметр -j
/--threads
), то фактическое число SSH-соединений может превысить максимально допустимое число одновременных SSH-соединений на удалённом сервере и, следовательно, приведёт к ошибке «ERROR: Agent error: kex_exchange_identification: Connection closed by remote host» (ОШИБКА: Ошибка агента: kex_exchange_identification: Соединение закрыто удалённым сервером). Чтобы исправить ошибку, либо уменьшите количество потоков pg_probackup, либо измените значение параметра конфигурации MaxStartups
удалённого SSH-сервера. Если SSH настроен как служба xinetd на удалённом сервере, измените значение параметра конфигурации xinetd per_source
, а не MaxStartups
.
Настройка копирования PTRACK #
Примечание
Версии PTRACK ниже 2.0 признаны устаревшими и не поддерживаются. В Postgres Pro Standard и Postgres Pro Enterprise версии 11.9.1 и новее входит обновлённый PTRACK 2.0. Обновите ваш сервер, чтобы избежать проблем с резервными копиями, которые вы будете делать в дальнейшем, и обязательно сделайте копии ваших кластеров с обновлённым PTRACK, так как копии, полученные с использованием PTRACK 1.x, могут быть испорченными.
Если вы намерены использовать режим копирования PTRACK, выполните описанные далее дополнительные действия. Роль, от имени которой будет выполняться копирование PTRACK (в примерах ниже это роль backup
), должна иметь доступ ко всем базам данных в кластере.
Для Postgres Pro версии 11 или новее:
Создайте расширение PTRACK:
CREATE EXTENSION ptrack;
Чтобы включить отслеживание изменений страниц, задайте для параметра
ptrack.map_size
положительное целое значение и перезапустите сервер.Для оптимальной производительности рекомендуется задавать
ptrack.map_size
равным
, гдеN
/ 1024N
— объём кластера Postgres Pro в мегабайтах. Если он будет иметь меньшее значение, это увеличит вероятность наложения информации разных блоков в карте PTRACK, что повлечёт ложные положительные результаты при определении изменённых блоков и, как следствие, увеличение размера инкрементальной копии, так как в копию будут попадать и фактически неизменённые блоки. Использовать значенияptrack.map_size
, превышающие 1024, не рекомендуется, хотя PTRACK поддерживает большие карты.
Примечание
В случае изменения значения ptrack.map_size
ранее созданный файл карты PTRACK очищается, и отслеживание новых блоков начинается с начала. Таким образом, прежде чем создавать новые инкрементальные копии в режиме PTRACK после изменения ptrack.map_size
необходимо сделать новую полную копию кластера.
Использование #
Создание резервной копии #
Для создания резервной копии выполните следующую команду:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-bрежим_копирования
Здесь режим_копирования
может принимать следующие значения: FULL
, DELTA
, PAGE
, и PTRACK
.
При восстановлении кластера из инкрементальной копии pg_probackup использует родительскую полную копию и все инкрементальные копии между ними, которые в совокупности образуют «цепочку копий». Таким образом, прежде чем делать инкрементальные копии, необходимо сделать как минимум одну полную со статусом OK
или DONE
в каталоге. Если родительская полная копия имеет статус MERGING
или MERGED
, выполнить инкрементальное резервное копирование невозможно.
Например, если объединение уже было запущено с одной полной копией, попытка выполнить инкрементальное резервное копирование завершится выводом следующих сообщений:
ВНИМАНИЕ: Рабочая полная резервная копия не найдена в текущей линии времени, идёт поиск в предыдущих линиях времени ВНИМАНИЕ: Невозможно найти рабочую резервную копию в предыдущих линиях времени ОШИБКА: Создайте новую полную резервную копию до инкрементальной
Режим ARCHIVE #
Режим ARCHIVE используется в качестве режима доставки WAL по умолчанию.
Например, чтобы сделать полную копию в режиме доставки WAL ARCHIVE, выполните:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL
Резервное копирование ARCHIVE требует организации непрерывного архивирования, посредством которого считываются сегменты WAL, требующиеся для восстановления согласованного состояния кластера на момент создания копии.
В процессе резервного копирования pg_probackup помещает файлы WAL, содержащие записи от Start LSN
до Stop LSN
, в каталог
. pg_probackup также проверяет, что записи WAL между каталог_копий
/wal/имя_экземпляра
Start LSN
и Stop LSN
корректно читаются. Это позволяет исключить риск хранения в архиве повреждённого WAL.
Режим STREAM #
Режим STREAM может использоваться в качестве альтернативного режима доставки WAL.
Например, чтобы сделать полную резервную копию в потоковом режиме, добавьте флаг --stream
к команде, показанной выше:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --stream --temp-slot
Необязательный параметр --temp-slot
обеспечивает наличие необходимых сегментов в случае прокрутки WAL до завершения резервного копирования.
В отличие от копий ARCHIVE, копии типа STREAM включают все сегменты WAL, необходимые для восстановления согласованного состояния кластера на момент создания копии.
В процессе выполнения команды backup программа pg_probackup передаёт файлы WAL, содержащие записи от Start LSN
до Stop LSN
в каталог
. Чтобы исключить риск архивирования испорченных файлов WAL, pg_probackup также проверяет, что записи WAL от каталог_копий
/backups/имя_экземпляра
/ид_резервной_копии
/database/pg_walStart LSN
до Stop LSN
прочитываются корректно.
Даже если вы используете непрерывное архивирование, копирование в режиме STREAM может быть полезно в следующих случаях:
Копии типа STREAM могут быть восстановлены на сервере, не имеющем файлового доступа к архиву WAL.
Копии типа STREAM позволяют восстановить состояние кластера на тот момент времени, для которого уже нет файлов WAL.
Копирование в режиме STREAM можно производить с ведомого сервера, не дожидаясь заполнения сегментов WAL, что могло бы занять длительное время при небольшом объёме трафика WAL.
Проверка страниц #
Когда в кластере БД включены контрольные суммы, pg_probackup использует их для проверки целостности файлов данных в процессе резервного копирования. При чтении каждой страницы pg_probackup проверяет, совпадает ли вычисленная сумма с контрольной суммой, хранящейся в заголовке страницы. Это гарантирует, что в кластере Postgres Pro и самой резервной копии не содержатся испорченные страницы. Заметьте, что pg_probackup читает файлы данных непосредственно из файловой системы, поэтому при активной записи в момент копирования возможны ложные выявления некорректных контрольных сумм из-за частичной записи. В случае несовпадения контрольной суммы страница считывается повторно, и контрольная сумма проверяется ещё раз.
Страница признаётся испорченной, если проверка контрольной суммы не проходит более 300 раз. В этом случае резервное копирование прерывается.
Даже если контрольные суммы не включены, pg_probackup всегда проверяет целостность заголовков страниц.
Внешние каталоги #
Чтобы заархивировать каталог, размещённый вне каталога данных, воспользуйтесь необязательным параметром --external-dirs
, в котором можно задать путь к нужному каталогу. Если вы хотите заархивировать несколько внешних каталогов, их пути нужно разделить двоеточиями в Linux или точками с запятой в Windows.
Например, чтобы в системе Linux включить каталоги /etc/dir1
и /etc/dir2
в полную копию экземпляра имя_экземпляра
, которая будет размещаться в каталоге_копий
, выполните:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --external-dirs=/etc/dir1:/etc/dir2
Например, чтобы включить каталоги C:\dir1
и C:\dir2
в полную копию, в Windows нужно выполнить:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --external-dirs=C:\dir1;C:\dir2
Для каждого внешнего каталога pg_probackup создаёт отдельный подкаталог в каталоге резервной копии и рекурсивно копирует в него всё содержимое внешнего каталога. Так как внешние каталоги, попадающие в разные резервные копии, не обязательно должны быть одинаковыми, при восстановлении кластера из инкрементальной копии будут восстановлены только те каталоги, которые относятся именно к ней. Внешние каталоги, сохранённые в предыдущих копиях, восстановлены не будут.
Чтобы нужные каталоги включались в каждую резервную копию вашего кластера, их список можно сохранить в файле конфигурации pg_probackup.conf
, воспользовавшись командой set-config с ключом --external-dirs
.
Проверка целостности кластера #
Чтобы убедиться в отсутствии повреждений в кластере Postgres Pro, выполните следующую команду:
pg_probackup checkdb [-Bкаталог_копий
[--instance=имя_экземпляра
]] [-Dкаталог_данных
] [параметры_подключения
]
Эта команда выполняет физическую проверку всех файлов данных в указанном каталоге данных, проводя проверки целостности заголовков страниц, а также проверяя контрольные суммы на уровне блоков, если в кластере включены контрольные суммы. В случае обнаружения испорченной страницы checkdb
продолжает работу, пока не будут проверены все страницы в кластере.
По умолчанию pg_probackup выполняет подобную проверку страницы автоматически в процессе создания копии. Команда checkdb
позволяет при желании проводить проверки страниц в кластере, не создавая резервные копии (при этом даже необязательно настраивать копирование кластера в pg_probackup).
Чтобы провести проверку кластера, приложение pg_probackup должно подключиться к нему. Обычно для получения требуемых параметров подключения достаточно указать связанный с данным кластером копируемый экземпляр. Однако если параметры -B
и --instance
опускаются, параметры_соединения и каталог_данных
необходимо задать в командной строке или в переменных окружения.
Важно понимать, что проверка на физическом уровне не позволяет выявить логические несоответствия, потерю или обнуление блоков или целых файлов и другие подобные аномалии. Провести логическую проверку в некотором объёме позволяют расширения amcheck и amcheck_next.
Если вы хотите помимо физической проверки проверить также все индексы во всех базах, используя эти расширения, вы можете передать команде checkdb флаг --amcheck
:
pg_probackup checkdb -Dкаталог_данных
--amcheck [параметры_соединения
]
Проверку на физическом уровне можно отключить, воспользовавшись флагом --skip-block-validation
. В этом случае задавать каталог_копий и каталог_данных не нужно, требуется задать только параметры подключения:
pg_probackup checkdb --amcheck --skip-block-validation [параметры_соединения
]
Логическая проверка может быть более доскональной, если запустить её с ключом --heapallindexed
. В этом случае будет дополнительно проверено, что в индексе действительно представлены все кортежи кучи, которые должны в него попасть, но это создаст дополнительную нагрузку на процессор, память и подсистему ввода/вывода.
Проверка резервных копий #
pg_probackup вычисляет контрольные суммы для всех файлов копии в ходе резервного копирования. Процесс проверки контрольных сумм файлов называется проверкой целостности копии. По умолчанию проверка выполняется сразу после создания резервной копии и непосредственно перед восстановлением для выявления возможных повреждений резервных копий.
Если вы хотите пропустить проверку резервной копии, вы можете передать командам backup и restore флаг --no-validate
.
Чтобы убедиться, что все необходимые файлы резервных копий имеются в наличии и что, используя их, можно восстановить кластер баз данных, вы можете запустить команду validate с теми же параметрами точки восстановления, с которыми вы будете производить восстановление.
Например, чтобы убедиться, что вы можете восстановить кластер баз данных из резервной копии, остановившись на транзакции с идентификатором 4242, выполните команду:
pg_probackup validate -Bкаталог_копий
--instance=имя_экземпляра
--recovery-target-xid=4242
Если проверка проходит успешно, pg_probackup выдаёт сообщение об этом. В случае же неудачи вы получите сообщение об ошибке с указанием точного времени, идентификатора транзакции и значения LSN, до которого возможно восстановление.
Если вы укажете идентификатор копии в ключе -i/--backup-id
, будет проверена только резервная копия с указанным идентификатором. Если идентификатор копии указывается вместе с параметрами точки восстановления, команда validate
проверит, возможно ли восстановить указанную резервную копию до заданной точки.
Например, чтобы убедиться, что можно восстановить кластер баз данных из резервной копии с идентификатором SBOL6P
до заданного момента времени, выполните команду:
pg_probackup validate -Bкаталог_копий
--instance=имя_экземпляра
-i SBOL6P --recovery-target-time="2024-04-10 18:18:26+03"
Если вы укажете ид_резервной_копии
, относящийся к инкрементальной копии, будут проверены все нужные ей родительские копии, начиная с полной.
Если вы опустите все параметры, будут проверены все резервные копии.
Восстановление кластера #
Чтобы восстановить кластер баз данных из резервной копии, выполните команду restore как минимум со следующими параметрами:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Здесь:
каталог_копий
— каталог, в котором хранятся все файлы резервных копий и метаданные.имя_экземпляра
— имя экземпляра резервной копии кластера, которая будет восстановлена.ид_резервной_копии
определяет, из какой резервной копии будет восстановлен кластер. Если этот параметр опускается, pg_probackup использует последнюю подходящую копию для заданного экземпляра. Если вы выбираете для восстановления инкрементальную копию, pg_probackup автоматически восстанавливает нижележащую полную копию и затем последовательно применяет все необходимые добавления.
После окончания работы команды restore
запустите службу базы данных.
Если вы восстанавливаете копию ARCHIVE, выполняете восстановление PITR или передаёте флаг --restore-as-replica
команде restore
для настройки ведомого сервера, pg_probackup создаёт файл конфигурации восстановления после копирования всех файлов данных в целевой каталог. Этот файл включает необходимые для восстановления параметры, за исключением пароля, заданного в primary_conninfo; если он требуется, его нужно дополнительно задать вручную или воспользоваться параметром --primary-conninfo
. Для Postgres Pro версии 11 параметры восстановления сохраняются в файле recovery.conf
, но для версий Postgres Pro, начиная с 12, pg_probackup сохраняет эти параметры в файле probackup_recovery.conf
в каталоге данных и подключает его в postgresql.auto.conf
.
Если восстанавливалась копия типа STREAM, восстановление завершается сразу, и кластер возвращается в согласованное состояние на момент времени, в который была сделана резервная копия. Для копий типа ARCHIVE Postgres Pro воспроизводит все имеющиеся в архиве сегменты WAL, в результате чего восстанавливается самое последнее состояние кластера на текущей линии времени. Это поведение можно изменить, определив параметры точки восстановления для команды restore
как описывается в Подразделе «Выполнение восстановления на момент времени (PITR)».
Если кластер, подлежащий восстановлению, содержит табличные пространства, pg_probackup по умолчанию восстанавливает их в исходные расположения. Чтобы сменить расположения табличных пространств, воспользуйтесь параметром --tablespace-mapping
/-T
. В противном случае при восстановлении кластера на том же сервере произойдёт ошибка, если эти табличные пространства будут использоваться, так как восстанавливаемые данные нужно будет записать в те же каталоги.
Используя параметр --tablespace-mapping
/-T
, вы должны задать абсолютные пути к старому и новому каталогу табличного пространства. Если путь содержит знак равно (=
), экранируйте его обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств. Например:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
-Dкаталог_данных
-j 4 -iид_резервной_копии
-T каталог_табл_пространства1=новый_каталог_табл_пространства1
-T каталог_табл_пространства2=новый_каталог_табл_пространства2
Восстановление кластера на удалённом компьютере описано в Подразделе «Использование pg_probackup в удалённом режиме».
Примечание
По умолчанию команда restore проверяет указанную резервную копию перед восстановлением кластера. Если вы проводите проверку копий регулярно и хотели бы сэкономить время при восстановлении кластера, вы можете добавить ключ --no-validate
для пропуска проверки и ускорения восстановления.
Инкрементальное восстановление #
Скорость восстановления резервной копии можно значительно увеличить, заменяя в существующем каталоге данных Postgres Pro только некорректные или изменённые страницы. Это можно реализовать, используя параметры инкрементального восстановления с командой restore.
Чтобы восстановить кластер баз данных из резервной копии в инкрементальном режиме, выполните команду restore со следующими параметрами:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
-Dкаталог_данных
-Iинкрементальный_режим
Здесь инкрементальный_режим
может быть следующим:
CHECKSUM
— прочитать все файлы данных в целевом каталоге, проверить заголовок и контрольную сумму каждой страницы и заменить только некорректные страницы, а также страницы, в которых контрольная сумма и LSN отличаются от значений в соответствующей странице в копии. Это самый простой и надёжный инкрементальный режим. Его рекомендуется использовать по умолчанию.LSN
— прочитать файлpg_control
в каталоге данных, получить из него значения REDO LSN и REDO TLI, позволяющие определить точку в истории (точку сдвига), в которой состояние каталога данных сдвинулись с цепочки резервных копий. Если точка сдвига находится за пределами истории резервных копий, восстановление прерывается. Если же точка сдвига достижима, прочитываются все файлы данных в каталоге данных, проверяется заголовок и контрольная сумма на каждой странице, а затем заменяются только страницы с неверной контрольной суммой или с LSN, превышающим позицию точки сдвига. В этом режиме обеспечивается увеличенная скорость по сравнению с режимом CHECKSUM, но требуется выполнение двух условий. Во-первых, в целевом каталоге должны быть включены контрольные суммы (см. data_checksums), чтобы не произошло повреждения данных из-за изменения вспомогательных битов. Это условие будет проверяться перед инкрементальным восстановлением — в случае отсутствия контрольных сумм операция прерывается. Во-вторых, необходима синхронность файлаpg_control
с состоянием каталога данных. Это условие нельзя проверить в начале восстановления, так что гарантировать правильность информации вpg_control
должен пользователь. Поэтому использовать режим LSN рекомендуется не во всех ситуациях, например, он противопоказан, когда файлpg_control
повреждён или его содержимому нельзя доверять: после выполненияpg_resetxlog
, после восстановления из копии без процедуры воспроизведения журнала и т. д.NONE
— обычное восстановление без инкрементальных оптимизаций.
Вне зависимости от выбранного инкрементального режима, pg_probackup будет проверять, что с заданным целевым каталогом не работает процесс postmaster и значения system-identifier
в целевом экземпляре и копии совпадают.
Предположим, вы хотите восстановить старый ведущий сервер в виде реплики после переключения, используя инкрементальное восстановление в режиме LSN:
================================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status ================================================================================================================================================== node 17 SBOL8S 2024-04-09 18:19:43.707720+03 DELTA STREAM 16/15 3s 114MB 64MB lz4 1.42 0/3C003020 0/3E8D4930 OK node 17 SBOL8G 2024-04-09 18:19:32.594670+03 PTRACK STREAM 15/15 4s 30MB 16MB zlib 2.23 0/31000028 0/310029E0 OK node 17 SBOL83 2024-04-09 18:19:22.269595+03 PAGE STREAM 15/15 7s 46MB 32MB pglz 1.44 0/29000028 0/2A0000F8 OK node 17 SBOL7P 2024-04-09 18:19:06.557301+03 FULL STREAM 15/0 6s 144MB 16MB zstd 2.47 0/22000028 0/220001C8 OK backup_user@backup_host:~$ pg_probackup restore -B /mnt/backups --instance=node -R -I lsn INFO: Destination directory and tablespace directories are empty, disable incremental restore INFO: Validating parents for backup SBOL8S INFO: Validating backup SBOL7P INFO: Backup SBOL7P data files are valid INFO: Validating backup SBOL83 INFO: Backup SBOL83 data files are valid INFO: Validating backup SBOL8G INFO: Backup SBOL8G data files are valid INFO: Validating backup SBOL8S INFO: Backup SBOL8S data files are valid INFO: Backup SBOL8S WAL segments are valid INFO: Backup SBOL8S is valid. INFO: Restoring the database from the backup starting at 2024-04-09 18:19:40+03 INFO: Start restoring backup files. PGDATA size: 616MB INFO: Backup files are restored. Transferred bytes: 616MB, time elapsed: 2s INFO: Restore incremental ratio (less is better): 100% (616MB/616MB) INFO: Syncing restored files to disk INFO: Restored backup files are synced, time elapsed: 2s INFO: Restore of backup SBOL8S completed.
Примечание
Инкрементальное восстановление возможно только для копий, у которых program_version
больше или равна 2.4.0.
Частичное восстановление #
Если вы подготовились к частичному восстановлению до того, как сделали резервную копию, вы можете восстановить только некоторые базы данных, используя параметры частичного восстановления с командой restore.
Чтобы восстановить только некоторые базы данных, выполните команду restore
как минимум со следующими параметрами:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--db-include=имя_базы
Ключ --db-include
может добавляться многократно. Например, чтобы восстановить только базы db1
и db2
, выполните следующую команду:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--db-include=db1 --db-include=db2
Чтобы исключить одну или несколько баз из числа восстанавливаемых, используйте ключ --db-exclude
:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--db-exclude=имя_базы
Ключ --db-exclude
может добавляться многократно. Например, чтобы при восстановлении исключить базы данных db1
и db2
, выполните следующую команду:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--db-exclude=db1 --db-exclude=db2
Механизм частичного восстановления рассчитывает на то, что в процессе восстановления Postgres Pro наличие пустых файлов не будет проблемой, так как файлы исключённых баз данных восстанавливаются пустыми. После успешного запуска кластера Postgres Pro восстановленные определения исключённых баз данных можно удалить с помощью команды DROP DATABASE
.
Чтобы максимально быстро разделить один кластер, содержащий несколько баз данных, на разные кластеры, можно выполнить частичное восстановление исходного кластера в виде ведомого, передав ключ --restore-as-replica
для определённых баз данных.
Примечание
Базы template0
и template1
восстанавливаются всегда.
Примечание
Из-за особенностей восстановления, присущих версиям Postgres Pro до 12, при частичном восстановлении кластера Postgres Pro этих версий рекомендуется установить для параметра hot_standby значение off
. В противном случае при восстановлении возможен сбой.
Выполнение восстановления на момент времени (PITR) #
Если вы настраивали непрерывное архивирование WAL до создания резервных копий, вы можете восстановить состояние кластера на любой момент времени (до заданной точки восстановления), используя с командой restore параметры точки восстановления.
Для восстановления на момент времени может использоваться копия типа STREAM или ARCHIVE, но при этом обязательно наличие архива WAL с момента создания копии или более раннего. Если параметр -i
/--backup-id
не задан, pg_probackup автоматически выбирает резервную копию, ближайшую к заданной цели восстановления, и начинает процесс восстановления. В противном случае pg_probackup попытается восстановить до заданной цели восстановления именно копию с заданным ид_резервной_копии
.
Чтобы восстановить состояние кластера на определённый момент времени, укажите это время в параметре
--recovery-target-time
, в формате timestamp. Например:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target-time="2024-04-10 18:18:26+03"Чтобы восстановить состояние кластера до определённой транзакции, воспользуйтесь ключом
--recovery-target-xid
:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target-xid=687Чтобы восстановить состояние кластера до определённой позиции в журнале (LSN), воспользуйтесь ключом
--recovery-target-lsn
:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target-lsn=16/B374D848Чтобы восстановить состояние кластера до заданной именованной точки восстановления, воспользуйтесь ключом
--recovery-target-name
:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target-name="before_app_upgrade"Чтобы восстановить последнее возможное состояние, исходя из содержимого архива WAL, передайте в параметре
--recovery-target
значениеlatest
:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target="latest"Чтобы восстановить самое раннее из возможных согласованное состояние кластера, передайте в параметре
--recovery-target
значениеimmediate
:pg_probackup restore -B
каталог_копий
--instance=имя_экземпляра
--recovery-target='immediate'
Использование pg_probackup в удалённом режиме #
Программа pg_probackup поддерживает работу в удалённом режиме, то есть может выполнять операции backup
и restore
удалённо, используя SSH. В этом режиме каталог резервных копий располагается в локальной системе, а целевой экземпляр Postgres Pro работает в удалённой. При этом pg_probackup должен быть установлен в обеих системах.
Примечание
pg_probackup рассчитывает на то, что узлы будут взаимодействовать между собой с использованием SSH без пароля.
Примечание
Помимо подключения по SSH, pg_probackup использует для управления удалёнными операциями обычное подключение к базе данных. За подробной информацией о настройке подключения к базе данных обратитесь к разделу Настройка кластера базы данных.
Типичная схема его использования выглядит так:
В системе резервного копирования настройте pg_probackup, как описывается в подразделе Установка и настройка. Для команд add-instance и set-config необходимо задать параметры удалённого сервера, указывающие на сервер с экземпляром Postgres Pro.
Если вы хотите в удалённом режиме выполнять страничное копирование (PAGE), использовать доставку WAL в режиме ARCHIVE или осуществлять восстановление PITR, настройте непрерывное архивирование WAL с сервера БД в систему резервного копирования, как описано в подразделе Настройка непрерывного архивирования WAL. Для этого в командах archive-push и archive-get требуется задать параметры удалённого сервера, указывающие на сервер, где находится каталог резервных копий.
Запустите команду backup или restore с параметрами удалённого сервера в системе резервного копирования. pg_probackup подключится к удалённой системе по SSH и соответственно создаст резервную копию в локальной системе или восстановит в удалённой системе ранее сделанную копию.
Например, чтобы создать полную архивную копию кластера Postgres Pro, работающего в удалённой системе с адресом 192.168.0.2
, подключившись к серверу по SSH через порт 2302
с именем пользователя postgres
, выполните:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --remote-user=postgres --remote-host=192.168.0.2 --remote-port=2302
Чтобы восстановить последнюю имеющуюся копию в удалённой системе с адресом 192.168.0.2
, подключившись к серверу по SSH через порт 2302
с именем пользователя postgres
, выполните:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--remote-user=postgres --remote-host=192.168.0.2 --remote-port=2302
Для восстановления архивных копий или восстановления на момент времени в удалённом режиме требуется дополнительная информация: целевой адрес, порт и имя пользователя для установления SSH-подключения c сервера БД к системе, где находится каталог копий. Эту информацию будет использовать команда restore_command
для копирования сегментов WAL из архива в каталог Postgres Pro pg_wal
.
Для передачи этой информации вы можете задать параметры удалённого архива WAL.
Например, для восстановления последней копии в удалённой системе, настроенной для приёма подключения пользователя postgres
по адресу 192.168.0.2
через порт 2302
, с использованием каталога резервных копий в системе, настроенной для подключения пользователя backup
по адресу 192.168.0.3
через порт 2303
, выполните:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--remote-user=postgres --remote-host=192.168.0.2 --remote-port=2302 --archive-host=192.168.0.3 --archive-port=2303 --archive-user=backup
Переданные аргументы будут использоваться при составлении команды restore_command
:
restore_command = '"путь_инсталляции
/pg_probackup" archive-get -B "каталог_копий
" --instance=имя_экземпляра
--wal-file-path=%p --wal-file-name=%f --remote-host=192.168.0.3 --remote-port=2303 --remote-user=backup'
Также вы можете воспользоваться ключом --restore-command
и передать всю команду restore_command
целиком:
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
--remote-user=postgres --remote-host=192.168.0.2 --remote-port=2302 --restore-command='"путь_инсталляции
/pg_probackup" archive-get -B "каталог_копий
" --instance=имя_экземпляра
--wal-file-path=%p --wal-file-name=%f --remote-host=192.168.0.3 --remote-port=2303 --remote-user=backup'
Примечание
Использование удалённого режима на платформе Windows в настоящее время не поддерживается.
Запуск pg_probackup в параллельных потоках #
Команды backup, restore, merge, delete, checkdb и validate могут выполняться в несколько параллельных потоков. Это может существенно ускорять работу pg_probackup при наличии достаточных ресурсов (ядер процессора, производительности дисковой подсистемы и сети).
Параллельным выполнением управляет ключ командной строки -j/--threads
. Например, чтобы запустить резервное копирование в четыре параллельных потока, выполните:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL -j 4
Примечание
Восстановление происходит в параллельном режиме только на этапе копирования данных из каталога копий в каталог данных кластера. При запуске сервера Postgres Pro он должен будет воспроизвести записи из WAL, а это может происходить только последовательно.
Настройка pg_probackup #
Проинициализировав каталог резервных копий и добавив определение копируемого экземпляра, вы можете использовать файл pg_probackup.conf
в каталоге
для тонкой настройки конфигурации pg_probackup.каталог_копий
/backups/имя_экземпляра
Например, команды backup и checkdb работают через обычное подключение Postgres Pro. Чтобы каждый раз не задавать параметры подключения в командной строке, вы можете определить их в файле конфигурации pg_probackup.conf
с помощью команды set-config.
Примечание
Редактировать pg_probackup.conf
вручную не рекомендуется.
Изначально pg_probackup.conf
содержит следующие параметры:
PGDATA
— путь к каталогу данных кластера, который будет копироваться.system-identifier
— уникальный идентификатор экземпляра Postgres Pro.
Вы можете дополнительно установить параметры удалённого режима, хранения копий, ведения журнала и сжатия, используя команду set-config
:
pg_probackup set-config -Bкаталог_копий
--instance=имя_экземпляра
[--external-dirs=путь_внешнего_каталога
] [параметры_удалённого_режима
] [параметры_соединения
] [параметры_хранения
] [параметры_журнала
]
Чтобы просмотреть текущие параметры, выполните эту команду:
pg_probackup show-config -Bкаталог_копий
--instance=имя_экземпляра
Параметры, заданные в pg_probackup.conf
, можно переопределить, задавая соответствующие переменные окружения или параметры командной строки при вызове команд pg_probackup.
Указание параметров подключения #
Если вы определите свойства соединения в файле конфигурации pg_probackup.conf
, вы можете не указывать параметры соединения во всех последующих командах pg_probackup. Однако если установлены соответствующие переменные окружения, они имеют больший приоритет. Параметры, заданные в командной строке, переопределяют как переменные окружения, так и свойства в файле конфигурации.
Если не задано ничего, используются значения по умолчанию. В частности, pg_probackup пытается подключиться к Unix-сокету локального сервера (или к localhost
в Windows), а в качестве имени базы данных и имени пользователя выбирает значение переменной окружения PGUSER
либо имя текущего пользователя ОС.
Управление каталогом резервных копий #
С помощью pg_probackup вы можете управлять резервными копиями в командной строке:
Просмотр информации о резервных копиях #
Чтобы просмотреть список существующих копий для каждого экземпляра, выполните команду:
pg_probackup show -B каталог_копий
pg_probackup выводит список всех имеющихся резервных копий. Например:
BACKUP INSTANCE 'node' ================================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status ================================================================================================================================================== node 17 SBOL94 2024-04-09 18:19:56.603355+03 FULL ARCHIVE 1/0 6s 377MB 16MB lz4 1.46 0/41000028 0/420000C0 OK node 17 SBOL8S 2024-04-09 18:19:43.707720+03 DELTA STREAM 1/1 3s 114MB 64MB lz4 1.42 0/3C003020 0/3E8D4930 OK node 17 SBOL8G 2024-04-09 18:19:32.594670+03 PTRACK STREAM 1/1 4s 30MB 16MB zlib 2.23 0/31000028 0/310029E0 OK node 17 SBOL83 2024-04-09 18:19:22.269595+03 PAGE STREAM 1/1 7s 46MB 32MB pglz 1.44 0/29000028 0/2A0000F8 OK node 17 SBOL7P 2024-04-09 18:19:06.557301+03 FULL STREAM 1/0 6s 144MB 16MB zstd 2.47 0/22000028 0/220001C8 OK
Для каждой копии выдаются следующие сведения:
Instance
— имя экземпляра.Version
— базовая версия Postgres Pro.ID
— идентификатор резервной копии.Recovery time
— самое ранее время, на которое можно восстановить кластер из данной копии.Mode
— режим, в котором была сделана копия. Возможные значения:FULL
(полная),PAGE
(страничная),DELTA
(инкрементальная),PTRACK
(копирование изменений).WAL Mode
— режим доставки WAL. Возможные значения:STREAM
(потоковый) иARCHIVE
(архивный).TLI
— идентификаторы линии времени текущей копии и её родителя.Time
— время, за которое была выполнена данная копия.Data
— объём файлов данных в этой копии. Это значение не включает в себя объём файлов WAL. Для копий, сделанных в режиме STREAM, общий размер можно рассчитать, сложив значенияData
иWAL
.WAL
— размер несжатых файлов WAL, которые должны быть применены в процессе восстановления копии для достижения согласованного состояния.compress-alg
— алгоритм сжатия, используемый при получении резервной копии. Возможные значения:zlib
,pglz
,lz4
,zstd
иnone
(сжатие не производилось).Zratio
— коэффициент сжатия, вычисленный как отношение «uncompressed-bytes» (объём несжатых данных в байтах) к «data-bytes» (итоговый объём данных).Start LSN
— последовательный номер в журнале WAL, соответствующий началу процесса копирования. С этой позиции накатываются изменения (REDO) в процессе восстановления Postgres Pro.Stop LSN
— последовательный номер в журнале WAL, соответствующий окончанию процесса копирования. Это позиция точки согласованности при восстановлении Postgres Pro.Status
— состояние резервной копии. Возможные варианты:OK
— резервная копия сделана и пригодна к использованию.DONE
— резервная копия сделана, но не проверена.RUNNING
— резервное копирование выполняется.MERGING
— резервная копия объединяется.MERGED
— файлы резервной копии были успешно обработаны в процессе объединения копий, но её метаданные ещё изменяются. Это состояние могут иметь только полные резервные копии.DELETING
— файлы резервной копии удаляются.CORRUPT
— некоторые файлы резервной копии повреждены.ERROR
— резервное копирование было прервано из-за неожиданной ошибки.ORPHAN
— резервная копия непригодна к использованию, так как её родительская копия испорчена или отсутствует.HIDDEN_FOR_TEST
— скрипт теста пометил копию как несуществующую. (Собственно pg_probackup никогда не устанавливает это состояние.)
Восстановить кластер из копии можно только для копий с состоянием OK
или DONE
.
Чтобы получить более подробную информацию о копии, укажите в команде show
её идентификатор:
pg_probackup show -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Пример вывода:
#Configuration backup-mode = FULL stream = false compress-alg = lz4 compress-level = 1 from-replica = false #Compatibility block-size = 8192 xlog-block-size = 8192 checksum-version = 1 program-version = 2.7.3 server-version = 17 #Result backup info timelineid = 1 start-lsn = 0/41000028 stop-lsn = 0/420000C0 start-time = '2024-04-09 18:19:52+03' end-time = '2024-04-09 18:19:58+03' end-validation-time = '2024-04-09 18:19:59+03' recovery-xid = 757 recovery-time = '2024-04-09 18:19:56.603355+03' data-bytes = 395651278 wal-bytes = 16777216 uncompressed-bytes = 578552566 pgdata-bytes = 578552248 status = OK primary_conninfo = 'user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable' content-crc = 3862224379
В расширенном выводе представлены дополнительные атрибуты:
compress-alg
— алгоритм сжатия, используемый при получении резервной копии. Возможные значения:zlib
,pglz
,lz4
,zstd
иnone
(сжатие не производилось).compress-level
— уровень сжатия, применяемый в процессе резервного копирования.from-replica
— признак того, что копия была сделана с ведомого сервера. Возможные значения:1
,0
.block-size
— значение параметра block_size, установленное в кластере Postgres Pro, с которого была сделана копия.checksum-version
— признак включения параметра data_checksums в исходном кластере Postgres Pro. Возможные значения:1
,0
.program-version
— полная версия программы pg_probackup, которая создала эту копию.start-time
— время начала резервного копирования.end-time
— время окончания резервного копирования.end-validation-time
— время окончания проверки резервной копии.expire-time
— время, когда закреплённая копия может быть ликвидирована в соответствии с политикой хранения. Этот атрибут имеется только у закреплённых копий.uncompressed-bytes
— размер файлов данных до добавления заголовков страниц и сжатия. В случае использования сжатия оценить его эффективность можно, сопоставив объёмuncompressed-bytes
(байтов несжатых данных) сdata-bytes
(байтов данных).pgdata-bytes
— размер файлов данных Postgres Pro на момент копирования. Эффективность инкрементального метода копирования можно оценить, сопоставив объёмpgdata-bytes
(байтов в PGDATA) сuncompressed-bytes
(байтов несжатых данных).recovery-xid
— идентификатор транзакции, соответствующей моменту окончания резервного копирования.parent-backup-id
— идентификатор родительской копии. Определён только для инкрементальных копий.primary_conninfo
— параметры подключения libpq, с использованием которых производилось подключение к кластеру Postgres Pro для получения этой резервной копии. Пароль в эти параметры не включается.note
— текстовое примечание, связанное с копией.content-crc
— контрольная сумма файлаbackup_content.control
, рассчитанная по алгоритму CRC32. Она позволяет выявить повреждение метаданных копии.
Вы также можете получить подробную информацию о резервной копии в формате JSON:
pg_probackup show -Bкаталог_копий
--instance=имя_экземпляра
--format=json -i backup_id
Пример вывода:
[ { "instance": "node", "backups": [ { "id": "SBOL94", "status": "OK", "start-time": "2024-04-09 18:19:52+03", "backup-mode": "FULL", "wal": "ARCHIVE", "compress-alg": "lz4", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 16, "parent-tli": 2, "start-lsn": "0/41000028", "stop-lsn": "0/420000C0", "end-time": "2024-04-09 18:19:58+03", "end-validation-time": "2024-04-09 18:19:59+03", "recovery-xid": 757, "recovery-time": "2024-04-09 18:19:56.603355+03", "data-bytes": 395651278, "wal-bytes": 16777216, "uncompressed-bytes": 578552566, "pgdata-bytes": 578552248, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 3862224379 } ] } ]
Просмотр оглавления архива WAL #
Чтобы получить информацию об архиве WAL для каждого экземпляра, выполните команду:
pg_probackup show -Bкаталог_копий
[--instance=имя_экземпляра
] --archive
pg_probackup выводит список всех имеющихся файлов WAL, сгруппированных по линиям времени. Например:
INFO: checking WAL file name "00000001000000000000001B" INFO: checking WAL file name "00000001000000000000001C" INFO: checking WAL file name "00000001000000000000001D" INFO: checking WAL file name "00000001000000000000001E" INFO: checking WAL file name "00000001000000000000001F" INFO: checking WAL file name "000000010000000000000020" INFO: checking WAL file name "000000010000000000000021" INFO: checking WAL file name "000000010000000000000022" INFO: checking WAL file name "000000010000000000000022.00000028.backup" INFO: checking WAL file name "000000010000000000000023" INFO: checking WAL file name "000000010000000000000024" INFO: checking WAL file name "000000010000000000000025" INFO: checking WAL file name "000000010000000000000026" INFO: checking WAL file name "000000010000000000000027" INFO: checking WAL file name "000000010000000000000028" INFO: checking WAL file name "000000010000000000000029" INFO: checking WAL file name "000000010000000000000029.00000028.backup" INFO: checking WAL file name "00000001000000000000002A" INFO: checking WAL file name "00000001000000000000002B" INFO: checking WAL file name "00000001000000000000002C" INFO: checking WAL file name "00000001000000000000002D" INFO: checking WAL file name "00000001000000000000002E" INFO: checking WAL file name "00000001000000000000002F" INFO: checking WAL file name "000000010000000000000030" INFO: checking WAL file name "000000010000000000000031" INFO: checking WAL file name "000000010000000000000031.00000028.backup" INFO: checking WAL file name "000000010000000000000032" INFO: checking WAL file name "000000010000000000000033" INFO: checking WAL file name "000000010000000000000034" INFO: checking WAL file name "000000010000000000000035" INFO: checking WAL file name "000000010000000000000036" INFO: checking WAL file name "000000010000000000000037" INFO: checking WAL file name "000000010000000000000038" INFO: checking WAL file name "000000010000000000000039" INFO: checking WAL file name "00000001000000000000003A" INFO: checking WAL file name "00000001000000000000003B" INFO: checking WAL file name "00000001000000000000003C" INFO: checking WAL file name "00000001000000000000003C.00003020.backup" INFO: checking WAL file name "00000001000000000000003D" INFO: checking WAL file name "00000001000000000000003E" INFO: checking WAL file name "00000001000000000000003F" INFO: checking WAL file name "000000010000000000000040" INFO: checking WAL file name "000000010000000000000041" INFO: checking WAL file name "000000010000000000000041.00000028.backup" INFO: checking WAL file name "000000010000000000000042" ARCHIVE INSTANCE 'node' ================================================================================================================================ TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status ================================================================================================================================ 1 0 0/0 00000001000000000000001B 000000010000000000000042 40 640MB 1.00 5 OK
Для каждой линии времени выдаются следующие сведения:
TLI
— идентификатор линии времени.Parent TLI
— идентификатор линии времени, от которой была ответвлена данная.Switchpoint
— LSN момента, когда эта линия времени ответвилась от родительской.Min Segno
— первый сегмент WAL, относящийся к этой линии времени.Max Segno
— последний сегмент WAL, относящийся к этой линии времени.N segments
— количество сегментов WAL, относящихся к этой линии времени.Size
— объём, который занимают файлы на диске.Zalg
— алгоритм сжатия, используемый при получении резервной копии. Возможные значения:zlib
,pglz
,lz4
,zstd
иnone
(сжатие не производилось).Zratio
— коэффициент сжатия, вычисляемый по формулеN segments
*wal_segment_size
*wal_block_size
/Size
.N backups
— число копий, относящихся к этой линии времени. Для получения подробных сведений об этих копиях воспользуйтесь форматом JSON.Status
— состояние архива WAL для этой линии времени. Возможные значения:OK
— в архиве присутствуют все сегменты WAL междуMin Segno
иMax Segno
.DEGRADED
— отсутствуют некоторые сегменты WAL междуMin Segno
иMax Segno
. Понять, какие файлы утрачены, можно, посмотрев этот отчёт в формате JSON. Такой статус может возникать, если несколько файлов WAL (в середине последовательности) были удалены командой delete с параметром--delete-wal
в соответствии с политикой хранения. Данный статус не влияет на корректность восстановления, но восстановить кластер до некоторых точек восстановления может быть невозможно.
Чтобы получить более подробную информацию об архиве WAL в формате JSON, выполните команду:
pg_probackup show -Bкаталог_копий
[--instance=имя_экземпляра
] --archive --format=json
Пример вывода:
INFO: checking WAL file name "00000001000000000000001B" INFO: checking WAL file name "00000001000000000000001C" INFO: checking WAL file name "00000001000000000000001D" INFO: checking WAL file name "00000001000000000000001E" INFO: checking WAL file name "00000001000000000000001F" INFO: checking WAL file name "000000010000000000000020" INFO: checking WAL file name "000000010000000000000021" INFO: checking WAL file name "000000010000000000000022" INFO: checking WAL file name "000000010000000000000022.00000028.backup" INFO: checking WAL file name "000000010000000000000023" INFO: checking WAL file name "000000010000000000000024" INFO: checking WAL file name "000000010000000000000025" INFO: checking WAL file name "000000010000000000000026" INFO: checking WAL file name "000000010000000000000027" INFO: checking WAL file name "000000010000000000000028" INFO: checking WAL file name "000000010000000000000029" INFO: checking WAL file name "000000010000000000000029.00000028.backup" INFO: checking WAL file name "00000001000000000000002A" INFO: checking WAL file name "00000001000000000000002B" INFO: checking WAL file name "00000001000000000000002C" INFO: checking WAL file name "00000001000000000000002D" INFO: checking WAL file name "00000001000000000000002E" INFO: checking WAL file name "00000001000000000000002F" INFO: checking WAL file name "000000010000000000000030" INFO: checking WAL file name "000000010000000000000031" INFO: checking WAL file name "000000010000000000000031.00000028.backup" INFO: checking WAL file name "000000010000000000000032" INFO: checking WAL file name "000000010000000000000033" INFO: checking WAL file name "000000010000000000000034" INFO: checking WAL file name "000000010000000000000035" INFO: checking WAL file name "000000010000000000000036" INFO: checking WAL file name "000000010000000000000037" INFO: checking WAL file name "000000010000000000000038" INFO: checking WAL file name "000000010000000000000039" INFO: checking WAL file name "00000001000000000000003A" INFO: checking WAL file name "00000001000000000000003B" INFO: checking WAL file name "00000001000000000000003C" INFO: checking WAL file name "00000001000000000000003C.00003020.backup" INFO: checking WAL file name "00000001000000000000003D" INFO: checking WAL file name "00000001000000000000003E" INFO: checking WAL file name "00000001000000000000003F" INFO: checking WAL file name "000000010000000000000040" INFO: checking WAL file name "000000010000000000000041" INFO: checking WAL file name "000000010000000000000041.00000028.backup" INFO: checking WAL file name "000000010000000000000042" [ { "instance": "node", "timelines": [ { "tli": 1, "parent-tli": 0, "switchpoint": "0/0", "min-segno": "00000001000000000000001B", "max-segno": "000000010000000000000042", "n-segments": 40, "size": 671088640, "zratio": 1.00, "closest-backup-id": "", "status": "OK", "lost-segments": [], "backups": [ { "id": "SBOL94", "status": "OK", "start-time": "2024-04-09 18:19:52+03", "backup-mode": "FULL", "wal": "ARCHIVE", "compress-alg": "lz4", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 2, "parent-tli": 0, "start-lsn": "0/41000028", "stop-lsn": "0/420000C0", "end-time": "2024-04-09 18:19:58+03", "end-validation-time": "2024-04-09 18:19:59+03", "recovery-xid": 757, "recovery-time": "2024-04-09 18:19:56.603355+03", "data-bytes": 395651278, "wal-bytes": 16777216, "uncompressed-bytes": 578552566, "pgdata-bytes": 578552248, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 3862224379 }, { "id": "SBOL8S", "status": "OK", "start-time": "2024-04-09 18:19:40+03", "parent-backup-id": "SBOL8G", "backup-mode": "DELTA", "wal": "STREAM", "compress-alg": "lz4", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 1, "parent-tli": 1, "start-lsn": "0/3C003020", "stop-lsn": "0/3E8D4930", "end-time": "2024-04-09 18:19:43+03", "end-validation-time": "2024-04-09 18:19:44+03", "recovery-xid": 757, "recovery-time": "2024-04-09 18:19:43.707720+03", "data-bytes": 119350434, "wal-bytes": 67108864, "uncompressed-bytes": 170044286, "pgdata-bytes": 578552248, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 1259851036 }, { "id": "SBOL8G", "status": "OK", "start-time": "2024-04-09 18:19:28+03", "parent-backup-id": "SBOL83", "backup-mode": "PTRACK", "wal": "STREAM", "compress-alg": "zlib", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 1, "parent-tli": 1, "start-lsn": "0/31000028", "stop-lsn": "0/310029E0", "end-time": "2024-04-09 18:19:32+03", "end-validation-time": "2024-04-09 18:19:33+03", "recovery-xid": 756, "recovery-time": "2024-04-09 18:19:32.594670+03", "data-bytes": 31218302, "wal-bytes": 16777216, "uncompressed-bytes": 69610366, "pgdata-bytes": 510263736, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 2293248595 }, { "id": "SBOL83", "status": "OK", "start-time": "2024-04-09 18:19:15+03", "parent-backup-id": "SBOL7P", "backup-mode": "PAGE", "wal": "STREAM", "compress-alg": "pglz", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 1, "parent-tli": 1, "start-lsn": "0/29000028", "stop-lsn": "0/2A0000F8", "end-time": "2024-04-09 18:19:22+03", "end-validation-time": "2024-04-09 18:19:22+03", "recovery-xid": 755, "recovery-time": "2024-04-09 18:19:22.269595+03", "data-bytes": 48394744, "wal-bytes": 33554432, "uncompressed-bytes": 69577598, "pgdata-bytes": 441975224, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 343227200 }, { "id": "SBOL7P", "status": "OK", "start-time": "2024-04-09 18:19:01+03", "backup-mode": "FULL", "wal": "STREAM", "compress-alg": "zstd", "compress-level": 1, "from-replica": "false", "block-size": 8192, "xlog-block-size": 8192, "checksum-version": 1, "program-version": "2.7.3", "server-version": "17", "current-tli": 1, "parent-tli": 0, "start-lsn": "0/22000028", "stop-lsn": "0/220001C8", "end-time": "2024-04-09 18:19:07+03", "end-validation-time": "2024-04-09 18:19:09+03", "recovery-xid": 754, "recovery-time": "2024-04-09 18:19:06.557301+03", "data-bytes": 151177272, "wal-bytes": 16777216, "uncompressed-bytes": 373695222, "pgdata-bytes": 373694904, "primary_conninfo": "user=backup channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable", "content-crc": 1636300818 } ] } ] } ]
В основном в этом формате представлены те же поля, что и в текстовом формате, с некоторыми исключениями:
Размер выражается в байтах.
Атрибут
closest-backup-id
содержит идентификатор самой последней доступной копии, принадлежащей к одной из предыдущих линий времени. Вы можете использовать эту копию для восстановления на момент, относящийся к этой линии времени. Если такой копии не существует, данный атрибут будет пустым.В массиве
lost-segments
представлены интервалы отсутствующих сегментов на линиях времени в непригодном состоянии (DEGRADED
). На линиях времени в целостном состоянииOK
массивlost-segments
пуст.В массиве
backups
перечисляются все резервные копии, относящиеся к данной линии времени. Если к линии времени не относятся резервные копии, этот массив пуст.
Настройка политики хранения #
Используя pg_probackup, вы можете реализовать политики хранения резервных копий, в соответствии с которыми могут удаляться лишние копии, очищаться ненужные сегменты WAL. Кроме того, можно закреплять определённые копии, чтобы они сохранялись независимо от политики, как описано ниже. Эти подходы можно комбинировать произвольным образом.
Удаление ненужных копий #
По умолчанию все резервные копии, которые создаёт pg_probackup, сохраняются в предназначенном для них каталоге. Для экономии дискового пространства вы можете настроить политику сохранения копий, чтобы ненужные копии удалялись.
Чтобы настроить политику хранения, задайте одну или несколько следующих переменных в файле pg_probackup.conf
с помощью команды set-config:
--retention-redundancy=избыточность
Определяет количество полных резервных копий, которое должно сохраняться в каталоге копий.
--retention-window=окно
Определяет самый ранний момент времени, на который pg_probackup может выполнить восстановление. В этом параметре задаётся количество дней от текущего момента. Например, если retention-window=7
, должна сохраниться минимум одна копия старее 7 дней, вместе с соответствующими файлами WAL и всеми последующими копиями.
Если установлены параметры --retention-redundancy
и --retention-window
, при очистке каталога от ненужных копий принимаются во внимание оба заданных ими условия. Например, если задать параметры --retention-redundancy=2
и --retention-window=7
, программа pg_probackup должна сохранить две полные резервные копии, а также все копии, необходимые для восстановления данных, за последние семь дней:
pg_probackup set-config -Bкаталог_копий
--instance=имя_экземпляра
--retention-redundancy=2 --retention-window=7
Рекомендуется всегда хранить как минимум две последние полные родительские копии, чтобы избежать ошибок при создании инкрементальных резервных копий.
Чтобы очистить каталог копий в соответствии с политикой хранения, нужно запустить команду delete с флагами сохранения, как показано ниже, или выполнить с этими флагами команду backup. В последнем случае ненужные копии будут удалены сразу после создания новой копии.
Например, чтобы удалить все резервные копии, считающиеся ненужными согласно установленной политике хранения, нужно выполнить следующую команду с флагом --delete-expired
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-expired
Если вы хотите также удалить файлы WAL, которые больше не требуются ни для каких копий, укажите дополнительно --delete-wal
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-expired --delete-wal
Вы также можете установить или переопределить текущую политику хранения, добавив параметры --retention-redundancy
и --retention-window
непосредственно при выполнении команд delete
или backup
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-expired --retention-window=7 --retention-redundancy=2
Так как для инкрементальных копий требуется наличие всех родительских полных копий и всех предыдущих инкрементальных копий, даже по истечении срока их хранения эти копии нельзя удалить, пока минимум одна инкрементальная копия в цепочке удовлетворяет политике хранения. Чтобы не хранить устаревшие копии, которые всё ещё нужны для восстановления нужной инкрементальной копии, вы можете объединить их с ней, воспользовавшись ключом --merge-expired
команды backup или delete.
Предположим, что вы заархивировали экземпляр узла
в каталог_копий
со значением параметра --retention-window
, равным 6
, и значением параметра --retention-redundancy
, равным 2
, и на 1 августа 2024 г. у вас есть следующие копии:
BACKUP INSTANCE 'node' =========================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status =========================================================================================================================================== node 17 SHJ1N9 2024-08-01 09:50:00+03 FULL ARCHIVE 1/0 5s 13MB 16MB zstd 2,81 0/1D000028 0/1E0000C0 OK node 17 SHJ1N8 2024-08-01 09:49:59+03 DELTA ARCHIVE 1/1 5s 6432kB 16MB zstd 1,06 0/1A000028 0/1B0000C0 OK node 17 SHH6Z8 2024-07-31 09:49:59+03 PAGE ARCHIVE 1/1 5s 6431kB 16MB zstd 1,06 0/17000028 0/180000C0 OK node 17 SHFCB6 2024-07-30 09:49:57+03 FULL ARCHIVE 1/0 5s 12MB 16MB zstd 2,83 0/14000028 0/150000C0 OK node 17 SH9SB5 2024-07-27 09:49:56+03 PAGE ARCHIVE 1/1 5s 6432kB 16MB zstd 1,06 0/11000028 0/120000C0 OK ----------------------------------------------------------retention window----------------------------------------------------------- node 17 SH62Z5 2024-07-25 09:49:56+03 DELTA ARCHIVE 1/1 5s 6431kB 16MB zstd 1,06 0/E000028 0/F0000C0 OK node 17 SH48B3 2024-07-24 09:49:54+03 FULL ARCHIVE 1/0 5s 12MB 16MB zstd 2,86 0/B000028 0/C0000C0 OK node 17 SGWTN3 2024-07-20 09:49:54+03 PAGE ARCHIVE 1/1 5s 6432kB 16MB zstd 1,06 0/8000028 0/90000C0 OK node 17 SGUYZ2 2024-07-19 09:49:53+03 DELTA ARCHIVE 1/1 5s 6442kB 16MB zstd 1,07 0/5000028 0/60000C0 OK node 17 SGT4B1 2024-07-18 09:49:52+03 FULL ARCHIVE 1/0 5s 11MB 16MB zstd 2,89 0/2000028 0/3003A28 OK
При запуске команды delete с флагом --delete-expired
резервные копии с идентификаторами SGT4B1
, SGUYZ2
и SGWTN3
будут удалены как устаревшие по критериям окна хранения и избыточности (требуемый набор полных резервных копий уже сохранён). SGUYZ2
и SGWTN3
также будут удалены, поскольку базовая полная копия потеряла актуальность.
При запуске команды delete с флагом --merge-expired
резервные копии SH48B3
и SH62Z5
будут объединены с SH9SB5
. Объединение произойдёт именно с SH9SB5
, так как это первая актуальная разностная копия, которую можно объединить с неактуальной разностной копией SH62Z5
и неактуальной полной копией SH48B3
.
pg_probackup delete -Bкаталог_копий
--instance=узел
--delete-expired --merge-expired pg_probackup show -Bкаталог_копий
BACKUP INSTANCE 'node' =========================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status =========================================================================================================================================== node 17 SHJ1N9 2024-08-01 09:50:00+03 FULL ARCHIVE 1/0 5s 13MB 16MB zstd 2,81 0/1D000028 0/1E0000C0 OK node 17 SHJ1N8 2024-08-01 09:49:59+03 DELTA ARCHIVE 1/1 5s 6432kB 16MB zstd 1,06 0/1A000028 0/1B0000C0 OK node 17 SHH6Z8 2024-07-31 09:49:59+03 PAGE ARCHIVE 1/1 5s 6431kB 16MB zstd 1,06 0/17000028 0/180000C0 OK node 17 SHFCB6 2024-07-30 09:49:57+03 FULL ARCHIVE 1/0 5s 12MB 16MB zstd 2,83 0/14000028 0/150000C0 OK node 17 SH9SB5 2024-07-27 09:49:56+03 FULL ARCHIVE 1/0 1s 12MB 16MB zstd 2,84 0/11000028 0/120000C0 OK
Поле Time
(Время) для объединённой копии показывает время, которое заняла процедура объединения.
Закрепление резервных копий #
Если вам нужно хранить отдельные копии дольше, чем допускает установленная политика хранения, вы можете дополнительно закрепить их на определённое время. Например:
pg_probackup set-backup -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
--ttl=30d
Эта команда задаёт срок хранения заданной резервной копии 30 дней, начиная с момента, указанного в атрибуте recovery-time
этой копии.
Вы также можете явно задать время истечения срока хранения копии, воспользовавшись ключом --expire-time
. Например:
pg_probackup set-backup -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
--expire-time="2027-04-09 18:21:32+00"
Также можно воспользоваться ключами --ttl
и --expire-time
команды backup и сразу закрепить создаваемую копию:
pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --ttl=30d pg_probackup backup -Bкаталог_копий
--instance=имя_экземпляра
-b FULL --expire-time="2027-04-09 18:21:32+00"
Определить, закреплена ли копия, можно с помощью команды show:
pg_probackup show -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Если копия закреплена, у неё есть атрибут expire-time
, содержащий время окончания срока её хранения:
... recovery-time = '2024-04-09 18:21:32+00' expire-time = '2027-04-09 18:21:32+00' data-bytes = 22288792 ...
Отменить закрепление копии можно, передав в параметре --ttl
ноль:
pg_probackup set-backup -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
--ttl=0
Примечание
Для закреплённой инкрементальной копии неявным образом закрепляются все нужные ей родительские копии. Если вы позже снимите с неё закрепление, последние также автоматически перестанут быть закреплёнными.
Настройка политики хранения архива WAL #
Когда осуществляется непрерывное архивирование WAL, сегменты WAL могут занимать много места на диске. Даже если вы время от времени удаляете старые резервные копии, с флагом --delete-wal
могут быть удалены только те сегменты WAL, которые не относятся ни к какой копии из остающихся в каталоге. Однако если возможность восстановления на момент времени нужна только для последних копий, можно настроить политику хранения архива WAL, чтобы ограничить глубину архива и сэкономить место на диске.
Чтобы настроить политику хранения архива WAL, запустите команду set-config с параметром --wal-depth
, задающим количество копий, которые могут быть использованы для PITR. Этот параметр действует для всех линий времени, поэтому вы сможете выполнять PITR для одинакового количества копий на каждой линии времени, при их наличии. Закреплённые копии в этом числе не учитываются: если закрепляется одна из последних копий, pg_probackup обеспечивает возможность PITR для каждой дополнительной копии.
Чтобы удалить сегменты WAL, не удовлетворяющие заданной политике хранения архива WAL, вы должны просто выполнить команду delete или backup с флагом --delete-wal
. Для архивных копий сегменты WAL между Start LSN
и Stop LSN
всегда сохраняются, так что эти копии остаются рабочими вне зависимости от значения --wal-depth
и при необходимости могут быть восстановлены.
Вы также можете использовать параметр --wal-depth
с командами delete и backup для переопределения ранее заданной политики сохранения WAL и удаления старых сегментов WAL «на лету».
Предположим, что вы заархивировали экземпляр node
в каталог_копий
и настроили непрерывное архивирование WAL:
pg_probackup show -Bкаталог_копий
--instance=узел
================================================================================================================================================== Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zalg Zratio Start LSN Stop LSN Status ================================================================================================================================================== node 17 SBOLDA 2024-04-09 18:22:23.147138+03 DELTA STREAM 1/1 1s 1165kB 16MB zstd 1.09 0/6F000028 0/6F000190 OK node 17 SBOLCY 2024-04-09 18:22:16.079841+03 FULL STREAM 1/0 10s 278MB 16MB zstd 2.46 0/6D000028 0/6D000190 OK node 17 SBOLCW 2024-04-09 18:22:10.154022+03 DELTA STREAM 1/1 2s 1364kB 16MB zstd 1.01 0/6B000028 0/6B000190 OK node 17 SBOLCS 2024-04-09 18:22:07.521646+03 DELTA STREAM 1/1 4s 78MB 16MB zstd 2.41 0/69000028 0/69000190 OK node 17 SBOLCC 2024-04-09 18:21:55.830115+03 FULL STREAM 1/0 15s 278MB 96MB zstd 2.46 0/600060C8 0/64FE6640 OK node 17 SBOLBW 2024-04-09 18:21:38.399702+03 FULL STREAM 1/0 12s 278MB 96MB zstd 2.46 0/54001830 0/589E5908 OK
Вы можете проверить состояние архива WAL, запустив команду show с ключом --archive
:
pg_probackup show -B каталог_копий
--instance=node --archive
INFO: checking WAL file name "000000010000000000000052" INFO: checking WAL file name "000000010000000000000053" INFO: checking WAL file name "000000010000000000000054" INFO: checking WAL file name "000000010000000000000054.00001830.backup" INFO: checking WAL file name "000000010000000000000055" INFO: checking WAL file name "000000010000000000000056" INFO: checking WAL file name "000000010000000000000057" INFO: checking WAL file name "000000010000000000000058" INFO: checking WAL file name "000000010000000000000059" INFO: checking WAL file name "00000001000000000000005A" INFO: checking WAL file name "00000001000000000000005B" INFO: checking WAL file name "00000001000000000000005C" INFO: checking WAL file name "00000001000000000000005D" INFO: checking WAL file name "00000001000000000000005E" INFO: checking WAL file name "00000001000000000000005F" INFO: checking WAL file name "000000010000000000000060" INFO: checking WAL file name "000000010000000000000060.000060C8.backup" INFO: checking WAL file name "000000010000000000000061" INFO: checking WAL file name "000000010000000000000062" INFO: checking WAL file name "000000010000000000000063" INFO: checking WAL file name "000000010000000000000064" INFO: checking WAL file name "000000010000000000000065" INFO: checking WAL file name "000000010000000000000066" INFO: checking WAL file name "000000010000000000000067" INFO: checking WAL file name "000000010000000000000068" INFO: checking WAL file name "000000010000000000000069" INFO: checking WAL file name "000000010000000000000069.00000028.backup" INFO: checking WAL file name "00000001000000000000006A" INFO: checking WAL file name "00000001000000000000006B" INFO: checking WAL file name "00000001000000000000006B.00000028.backup" INFO: checking WAL file name "00000001000000000000006C" INFO: checking WAL file name "00000001000000000000006D" INFO: checking WAL file name "00000001000000000000006D.00000028.backup" INFO: checking WAL file name "00000001000000000000006E" INFO: checking WAL file name "00000001000000000000006F" INFO: checking WAL file name "00000001000000000000006F.00000028.backup" ARCHIVE INSTANCE 'node' ================================================================================================================================ TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status ================================================================================================================================ 1 0 0/0 000000010000000000000052 00000001000000000000006F 30 480MB 1.00 6 OK
Операция очистки WAL без ключа --wal-depth
может удалить лишь один сегмент:
pg_probackup delete -B каталог_копий
--instance=node --delete-wal
INFO: checking WAL file name "000000010000000000000054" INFO: checking WAL file name "000000010000000000000054.00001830.backup" INFO: checking WAL file name "000000010000000000000055" INFO: checking WAL file name "000000010000000000000056" INFO: checking WAL file name "000000010000000000000057" INFO: checking WAL file name "000000010000000000000058" INFO: checking WAL file name "000000010000000000000059" INFO: checking WAL file name "00000001000000000000005A" INFO: checking WAL file name "00000001000000000000005B" INFO: checking WAL file name "00000001000000000000005C" INFO: checking WAL file name "00000001000000000000005D" INFO: checking WAL file name "00000001000000000000005E" INFO: checking WAL file name "00000001000000000000005F" INFO: checking WAL file name "000000010000000000000060" INFO: checking WAL file name "000000010000000000000060.000060C8.backup" INFO: checking WAL file name "000000010000000000000061" INFO: checking WAL file name "000000010000000000000062" INFO: checking WAL file name "000000010000000000000063" INFO: checking WAL file name "000000010000000000000064" INFO: checking WAL file name "000000010000000000000065" INFO: checking WAL file name "000000010000000000000066" INFO: checking WAL file name "000000010000000000000067" INFO: checking WAL file name "000000010000000000000068" INFO: checking WAL file name "000000010000000000000069" INFO: checking WAL file name "000000010000000000000069.00000028.backup" INFO: checking WAL file name "00000001000000000000006A" INFO: checking WAL file name "00000001000000000000006B" INFO: checking WAL file name "00000001000000000000006B.00000028.backup" INFO: checking WAL file name "00000001000000000000006C" INFO: checking WAL file name "00000001000000000000006D" INFO: checking WAL file name "00000001000000000000006D.00000028.backup" INFO: checking WAL file name "00000001000000000000006E" INFO: checking WAL file name "00000001000000000000006F" INFO: checking WAL file name "00000001000000000000006F.00000028.backup" ARCHIVE INSTANCE 'node' ================================================================================================================================ TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status ================================================================================================================================ 1 0 0/0 000000010000000000000054 00000001000000000000006F 28 448MB 1.00 6 OK
Например, если вы хотите оставить только те сегменты, которые могут применяться к самой последней копии, передайте в параметре --wal-depth
значение 1:
pg_probackup delete -B каталог_копий
--instance=node --delete-wal --wal-depth=1
INFO: checking WAL file name "00000001000000000000006F" INFO: checking WAL file name "00000001000000000000006F.00000028.backup" ARCHIVE INSTANCE 'node' =============================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =============================================================================================================================== 1 0 0/0 00000001000000000000006F 00000001000000000000006F 1 16MB 1.00 6 OK
Также вы можете использовать параметр --wal-depth
с командой backup:
pg_probackup backup -B каталог_данных
--instance=node -b DELTA --wal-depth=1 --delete-wal
INFO: checking WAL file name "000000010000000000000071" INFO: checking WAL file name "000000010000000000000071.00000028.backup" ARCHIVE INSTANCE 'node' =============================================================================================================================== TLI Parent TLI Switchpoint Min Segno Max Segno N segments Size Zratio N backups Status =============================================================================================================================== 1 0 0/0 000000010000000000000071 000000010000000000000071 1 16MB 1.00 7 OK
Объединение резервных копий #
По мере того как вы будете делать новые и новые инкрементальные копии, общий размер каталога резервных копий может существенно увеличиться. Для экономии места на диске вы можете объединить инкрементальные копии с родительской полной копией, выполнив команду merge
и передав ей идентификатор копии самой последней резервной копии, подлежащей объединению:
pg_probackup merge -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Эта команда объединяет копии, относящиеся к одной цепочке инкрементальных копий. Если выбирается полная копия, она будет объединена с первой инкрементальной копией после неё. Если выбрана инкрементальная копия, он будет объединена с родительской полной копией, включая все инкрементальные копии между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные. Таким образом, операция объединения по сути равнозначна созданию новой полной копии с удалением всех устаревших копий, но выполняется она быстрее, особенно с большими объёмами данных, и не нагружает подсистему ввода/вывода и сеть (если pg_probackup работает в удалённом режиме).
Перед объединением pg_probackup проверяет все задействуемые резервные копии, чтобы удостовериться в их целостности. Вы можете проверить текущее состояние резервной копии, передав её идентификатор команде show.
pg_probackup show -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Если процесс объединения ещё не закончен, вы увидите состояние MERGING
. Для полных копий также можно увидеть состояние MERGED
в процессе изменения метаданных на последнем этапе объединения. В случае прерывания операции объединения она может быть перезапущена.
Удаление резервных копий #
Для удаления резервной копии, ставшей ненужной, выполните команду:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
Эта команда удалит резервную копию с заданным ид_резервной_копии
вместе со всеми инкрементальными копиями, которые от неё зависят (если таковые найдутся). Таким образом вы можете удалить некоторые последние инкрементальные копии, сохранив предыдущую полную копию и некоторые следующие за ней инкрементальные копии.
Для удаления старых файлов WAL, которые не нужны для восстановления никаких из оставшихся резервных копий, воспользуйтесь ключом --delete-wal
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-wal
Чтобы удалить резервные копии, считающиеся ненужными согласно текущей политике хранения, воспользуйтесь ключом --delete-expired
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-expired
Копии с истёкшим сроком нельзя удалить, пока на них базируется минимум одна инкрементальная копия, удовлетворяющая политике хранения. Если вы хотите сократить число резервных копий, требующихся для восстановления инкрементальных копий, укажите параметр --merge-expired
при выполнении этой команды:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--delete-expired --merge-expired
В этом случае pg_probackup ищет самую старую инкрементальную копию, удовлетворяющую политике хранения и объединяет её с базовыми для неё полной и инкрементальными копиями, срок хранения которых истёк, тем самым превращая её в полную копию. После завершения объединения ставшие ненужными копии удаляются.
Прежде чем объединять или удалять резервные копии, вы можете выполнить команду delete
с параметром --dry-run
и получить в результате состояние всех имеющихся копий в соответствии с текущей политикой хранения; никакие необратимые действия при этом выполняться не будут.
Для удаления всех копий с определённым состоянием, воспользуйтесь параметром --status
:
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
--status=ERROR
При удалении копий по критерию состояния установленные политики сохранения не учитываются.
Клонирование и синхронизация экземпляра Postgres Pro #
В pg_probackup реализована команда catchup, которая позволяет создать копию экземпляра сервера Postgres Pro напрямую, не используя каталог резервных копий. Эта команда может быть полезна:
Для добавления нового ведомого сервера.
Как правило, для создания копии экземпляра Postgres Pro используется pg_basebackup. Команда
catchup
, если указан пустой целевой каталог, сделает то же самое, но в параллельном режиме может сработать гораздо быстрее.Для синхронизации отставшего ведомого сервера с ведущим.
При активной записи на ведущем сервере реплики могут не успевать воспроизводить WAL с достаточной скоростью и в результате отставать. Обычно в этом случае создаётся новая реплика, а для этого нужно передать и сохранить на диске большой объём данных. Команда
catchup
напрямую переносит различия с ведущего сервера, что намного быстрее позволяет обновить данные на уже существующей реплике.
Операция catchup
отличается от других операций pg_probackup:
Не требуется каталог резервных копий.
В качестве метода доставки WAL поддерживается только STREAM.
Копирование внешних каталогов не поддерживается.
Одновременно с
catchup
нельзя выполнять команды DDL CREATE TABLESPACE/DROP TABLESPACE.При синхронизации
catchup
берёт файлы конфигурации, такие какpostgresql.conf
,postgresql.auto.conf
илиpg_hba.conf
, с исходного сервера и заменяет ими соответствующие файлы на целевом сервере. Чтобы оставить файлы конфигурации без изменений, используйте параметр--exclude-path
.
Чтобы подготовить экземпляр Postgres Pro к клонированию/синхронизации, настройте исходный сервер БД следующим образом:
Настройте кластер баз данных для копирования экземпляра сервера.
Для копирования с удалённого сервера настройте удалённый режим.
Для использования режима PTRACK настройте копирование PTRACK.
Перед клонированием/синхронизацией экземпляра Postgres Pro убедитесь, что исходный сервер запущен и принимает подключения. Чтобы клонировать/синхронизировать экземпляр Postgres Pro, в системе с целевым сервером выполните команду catchup:
pg_probackup catchup -bрежим_синхронизации
--source-pgdata=путь_к_копируемому_каталогу_данных
--destination-pgdata=путь_к_целевому_каталогу_данных
--stream [параметры_подключения
] [параметры_удалённого_режима
]
Здесь режим_синхронизации
может принимать следующие значения:
FULL
— создаётся полная копия экземпляра Postgres Pro, для этого целевой каталог данных БД должен быть пустым.DELTA
— считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых с момента остановки целевого экземпляра.PTRACK
— изменения в страницах отслеживаются на лету, считываются и копируются только страницы, изменённые с точки расхождения исходного и целевого экземпляров.Предупреждение
Чтобы синхронизировать экземпляр в режиме PTRACK, необходим PTRACK версии 2.0 или выше, а значит, и Postgres Pro версии не ниже 11.
Указав параметр --stream
, можно задать режим STREAM, при котором все необходимые файлы WAL передаются с исходного сервера по протоколу репликации.
Вы можете задать параметры_подключения к исходной БД, а если она находится на другом сервере, также укажите параметры_удалённого_режима.
Если в исходной БД есть табличные пространства, которые должны располагаться в других каталогах в целевой системе, задайте также параметр --tablespace-mapping
:
pg_probackup catchup -bрежим_синхронизации
--source-pgdata=путь_к_копируемому_каталогу_данных
--destination-pgdata=путь_к_целевому_каталогу_данных
--stream --tablespace-mapping=СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
Чтобы операция catchup
выполнялась в несколько параллельных потоков, задайте число потоков с помощью параметра --threads
:
pg_probackup catchup -bрежим_синхронизации
--source-pgdata=путь_к_копируемому_каталогу_данных
--destination-pgdata=путь_к_целевому_каталогу_данных
--stream --threads=число_потоков
Перед клонированием/синхронизацией экземпляра Postgres Pro вы можете запустить команду catchup
с флагом --dry-run
, чтобы оценить размер передаваемых файлов данных без внесения изменений на диск:
pg_probackup catchup -bрежим_синхронизации
--source-pgdata=путь_к_копируемому_каталогу_данных
--destination-pgdata=путь_к_целевому_каталогу_данных
--stream --dry-run
Например, предположим, что отстал удалённый ведомый экземпляр Postgres Pro, данные которого хранятся в каталоге /replica-pgdata
. Чтобы синхронизировать этот экземпляр с экземпляром в каталоге данных /master-pgdata
, вы можете выполнить команду catchup
, включив режим PTRACK
и используя четыре параллельных потока, следующим образом:
pg_probackup catchup --source-pgdata=/master-pgdata --destination-pgdata=/replica-pgdata -p 5432 -d postgres -U remote-postgres-user --stream --backup-mode=PTRACK --remote-host=remote-hostname --remote-user=remote-unix-username -j 4 --exclude-path=postgresql.conf --exclude-path=postgresql.auto.conf --exclude-path=pg_hba.conf --exclude-path=pg_ident.conf
Обратите внимание, что в этом примере файлы конфигурации не будут перезаписаны во время синхронизации.
В примере ниже показано, как можно добавить ещё один удалённый ведомый сервер Postgres Pro с каталогом данных /replica-pga
, запустив catchup
в режиме FULL
в четыре параллельных потока:
pg_probackup catchup --source-pgdata=/master-pgdata --destination-pgdata=/replica-pgdata -p 5432 -d postgres -U remote-postgres-user --stream --backup-mode=FULL --remote-host=remote-hostname --remote-user=remote-unix-username -j 4
Справка по командной строке #
Команды #
В этом подразделе описываются команды pg_probackup. Необязательные параметры этих команд заключаются в квадратные скобки. В подробностях все параметры описываются в подразделе Параметры.
version #
pg_probackup version [--format=json
]
Выводит версию и редакцию pg_probackup, а также версию и редакцию сервера Postgres Pro.
При указании --format=
вывод будет получен в формате JSON. Это может потребоваться для внутренней интеграции с приложениями на основе JSON, например PPEM. Пример вывода JSON: json
pg_probackup version --format=json { "pg_probackup": { "version": "2.8.2", "edition": "community" }, "database": { "type": "Postgres Pro Standard", "version": "16.3.1" }, "compressions": [zlib, pglz, lz4, zstd] }
help #
pg_probackup help [команда
]
Выдаёт справку по командам pg_probackup. Если в параметрах задаётся одна из команд pg_probackup, выводит подробную информацию по параметрам, которые принимает эта команда.
init #
pg_probackup init -Bкаталог_копий
[--skip-if-exists] [--help] [параметры_журнала
]
Инициализирует каталог_копий
, в котором будут храниться резервные копии, архив WAL и метаинформация о скопированных кластерах баз данных. Если заданный каталог_копий
уже существует, он должен быть пустым. В противном случае pg_probackup выдаст соответствующее сообщение об ошибке. Вы можете отключить вывод этого сообщения, указав --skip-if-exists
. Хотя каталог не будет инициализирован, приложение вернёт 0.
За подробностями обратитесь к подразделу Инициализация каталога копий.
add-instance #
pg_probackup add-instance -Bкаталог_копий
-Dкаталог_данных
--instance=имя_экземпляра
[--skip-if-exists] [--help] [параметры_журнала
]
Инициализирует новый копируемый экземпляр в каталоге каталог_копий
и создаёт файл конфигурации pg_probackup.conf
, управляющий параметрами pg_probackup, относящимися к кластеру в указанном каталоге_данных
. Если каталог уже был инициализирован, сообщение об ошибке можно отключить, указав --skip-if-exists
.
За подробностями обратитесь к подразделу Определение копируемого экземпляра.
del-instance #
pg_probackup del-instance -Bкаталог_копий
--instance=имя_экземпляра
[--help] [параметры_журнала
]
Удаляет все резервные копии и файлы WAL, связанные с указанным экземпляром.
set-config #
pg_probackup set-config -Bкаталог_копий
--instance=имя_экземпляра
[--help] [--pgdata=путь_к_pgdata
] [--retention-redundancy=избыточность
][--retention-window=окно
][--wal-depth=глубина_wal
] [--compress-algorithm=алгоритм_сжатия
] [--compress-level=уровень_сжатия
] [-dимя_базы
] [-hсервер
] [-pпорт
] [-Uимя_пользователя
] [--archive-timeout=тайм-аут
] [--external-dirs=путь_внешнего_каталога
] [--restore-command=команда
] [параметры_удалённого_режима
] [параметры_удалённого_архива_wal
] [параметры_журнала
]
Добавляет заданные параметры соединения, сжатия, хранения, ведения журнала и указания внешних каталогов в конфигурационный файл pg_probackup.conf
либо изменяет ранее заданные значения.
Все поддерживаемые параметры описываются в подразделе Параметры.
Редактировать pg_probackup.conf
вручную не рекомендуется.
set-backup #
pg_probackup set-backup -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
{--ttl=время_жизни
| --expire-time=время
} [--note=заметка_к_копии
] [--help] [параметры_журнала
]
Устанавливает заданные для конкретной резервной копии параметры в конфигурационном файле backup.control
или изменяет ранее определённые значения.
--note=
заметка_к_копии
Задаёт текстовую заметку для резервной копии. Если
заметка_к_копии
содержит символы перевода строки, сохранена будет только подстрока до первого перевода строки. Максимальный размер заметки равен 1 КБ. Значение'none'
удаляет текущую заметку.
Все поддерживаемые варианты закрепления описываются в подразделе Параметры закрепления.
show-config #
pg_probackup show-config -Bкаталог_копий
--instanceимя_экземпляра
[--format=plain|json] [--default-units][параметры_журнала
]
Выводит все текущие параметры конфигурации pg_probackup, в том числе те, что содержатся в файле pg_probackup.conf
, размещённом в каталоге
. Вы можете добавить параметр каталог_копий
/backups/имя_экземпляра
--format=json
для получения результата в формате JSON. По умолчанию параметры конфигурации выводятся обычным текстом.
Также можно добавить параметр --no-scale-units
, чтобы выводить значения конфигурационных параметров времени и объёма памяти в единицах измерения по умолчанию. В противном случае эти значения преобразуются в более крупные единицы для более удобного отображения. Например, значение параметра archive-timeout
300 будет выводиться как 5min
, а значение archive-timeout
301 — как 301s
. Кроме того, с указанием --no-scale-units
параметры конфигурации выводятся без единиц измерения, а значения формата JSON, а также числовые и логические значения не заключаются в кавычки, что упрощает разбор.
Чтобы изменить содержимое pg_probackup.conf
, используйте команду set-config.
show #
pg_probackup show -Bкаталог_копий
[--help] [--instance=имя_экземпляра
[-iид_резервной_копии
| --archive]] [--format=plain|json] [--no-color] [--show-symlinks] [параметры_журнала
]
Показывает содержимое каталога копий. Если задано имя_экземпляра
и ид_резервной_копии
, выводится подробная информация об этой копии. С указанием --archive
эта команда показывает содержимое архива WAL в данном каталоге.
По умолчанию содержимое каталога представляется в виде обычного текста. Вы можете передать параметр --format=json
, чтобы получить результат в формате JSON. С параметром --no-color
выводимые сообщения не выделяются цветом.
Если указан параметр --show-symlinks
, команда также показывает ссылки между объединяемыми резервными копиями и исходными полными копиями, с которыми были объединены инкрементальные копии.
Более подробно использование этой команды описывается в подразделах Управление каталогом резервных копий и Просмотр оглавления архива WAL.
backup #
pg_probackup backup -Bкаталог_копий
-bрежим_копирования
--instance=имя_экземпляра
[--help] [-jчисло_потоков
] [--progress] [-C] [--stream [-S slot_name] [--temp-slot[=true|false|on|off]]] [--backup-pg-log] [--no-validate] [--skip-block-validation] [-w --no-password] [-W --password] [--write-rate-limit=скорость_записи
] [--archive-timeout=тайм-аут
] [--external-dirs=путь_внешнего_каталога
] [--no-sync] [--note=заметка_к_копии
] [параметры_соединения
] [параметры_сжатия
] [параметры_удалённого_режима
] [параметры_хранения
] [параметры_закрепления
] [параметры_журнала
]
Создаёт резервную копию экземпляра Postgres Pro.
-b
режим
--backup-mode=
режим
Выбирает режим резервного копирования. Поддерживаются следующие режимы:
FULL
,DELTA
,PAGE
иPTRACK
.--backup-threads
число_потоков
Указывает количество потоков для копирования файлов. Переопределяет параметр
j
/--threads
для копирования файлов.--validate-threads
число_потоков
Указывает количество потоков для проверки резервной копии. Переопределяет параметр
j
/--threads
для проверки резервной копии.-C
--smooth-checkpoint
Растягивает выполнение контрольной точки во времени. По умолчанию pg_probackup пытается произвести контрольную точку максимально быстро.
--stream
Создаёт потоковую резервную копию (STREAM), включая в неё все необходимые файлы WAL, получаемые от сервера по протоколу репликации.
--temp-slot[=
true
|false
|on
|off
]Создаёт временный слот физической репликации для передачи WAL с архивируемого экземпляра Postgres Pro. По умолчанию
--temp-slot
включён. Это гарантирует, что все нужные сегменты WAL будут доступны, если в процессе копирования произойдёт переключение сегментов WAL. Этот параметр может использоваться только вместе с параметром--stream
. По умолчанию имя слота —pg_probackup_slot
. Чтобы его поменять, воспользуйтесь параметром--slot
/-S
и явно укажите--temp-slot
или--temp-slot=
.true
|on
-S
имя_слота
--slot=
имя_слота
Задаёт слот репликации, к которому будет выполнено подключение для передачи WAL. Этот параметр можно указать только вместе с параметром
--stream
.--backup-pg-log
Включает в резервную копию каталог
log
. Этот каталог обычно содержит журналы сообщений сервера. По умолчанию каталогlog
в копию не включается.-E
путь_внешнего_каталога
--external-dirs=
путь_внешнего_каталога
Включает в создаваемую копию указанный каталог, рекурсивно копируя его содержимое в отдельный подкаталог каталога резервной копии. Этот параметр полезен для архивирования скриптов, SQL-дампов и файлов конфигурации, расположенных вне каталога данных. Если вы хотите архивировать несколько внешних каталогов, их пути нужно разделять двоеточием в Linux или точкой с запятой в Windows.
--write-rate-limit=
скорость_записи
Задаёт скорость записи данных на диск (в мегабайтах/гигабайтах в секунду). По умолчанию указывается в мегабайтах в секунду. Например:
--write-rate-limit=1GBps
или--write-rate-limit=100
(мегабайты в секунду). Значение по умолчанию: 0 (без ограничений).Если значение параметра указано, в конце резервного копирования будет выведена следующая информация:
written
— объём записанных данных, в МБ.total time
— время между первой и последней записью (в секундах). Обратите внимание, что это не общее время создания резервной копии.sleep time
— время принудительной задержки, в секундах.average rate
— фактическая средняя скорость записи, в мегабайтах в секунду.
Например:
INFO: Rate limit: written 14975.445 MB, total time 17.163 s, sleep time 2.370 s, average rate 872.560715 MBps
--archive-timeout=
время_ожидания
Задаёт тайм-аут для архивирования сегментов WAL и потоковой передачи (в секундах). По умолчанию pg_probackup ждёт выполнения этих операций 300 секунд.
--skip-block-validation
Отключает проверку контрольных сумм на уровне блоков в процессе резервного копирования.
--no-validate
Пропускает автоматическую проверку созданной резервной копии. Этот ключ может быть полезен, если вы регулярно проверяете резервные копии и хотите сократить время создания копии.
--no-sync
Не сбрасывать копируемые файлы на диск. Этот флаг позволяет несколько ускорить процесс копирования. Использование этого флага может привести к повреждению данных в случае аварии операционной системы или аппаратного сбоя. Если вы используете его, рекомендуется выполнить команду validate сразу после завершения копирования, чтобы убедиться в отсутствии проблем.
--note=
заметка_к_копии
Задаёт текстовую заметку для резервной копии. Если
заметка_к_копии
содержит символы перевода строки, сохранена будет только подстрока до первого перевода строки. Максимальный размер заметки равен 1 КБ. Значение'none'
удаляет текущую заметку.
За подробной информацией о параметрах команды обратитесь к подразделам Общие параметры, Параметры соединения, Параметры хранения, Параметры закрепления, Параметры удалённого режима, Параметры сжатия и Параметры ведения журнала.
За подробностями обратитесь к подразделу Создание резервной копии.
restore #
pg_probackup restore -Bкаталог_копий
--instance=имя_экземпляра
[--help] [--dry-run] [-Dкаталог_данных
] [-iид_резервной_копии
] [-jчисло_потоков
] [--progress] [-TСТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
] [--external-mapping=СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
] [--skip-external-dirs] [-R | --restore-as-replica] [--no-validate] [--skip-block-validation] [--force] [--no-sync] [--restore-command=команда
] [--primary-conninfo=строка_подключения
] [-S | --primary-slot-name=имя_слота
] [-Xкаталог_wal
| --waldir=каталог_wal
] [параметры_точки_восстановления
] [параметры_журнала
] [параметры_удалённого_режима
] [параметры_частичного_восстановления
] [параметры_удалённого_архива_wal
]
Восстанавливает экземпляр Postgres Pro из резервной копии, расположенной в каталоге каталог_копий
. Если вы укажете один или несколько параметров точки восстановления, pg_probackup найдёт ближайшую к этой точке копию и выполнит восстановление до заданной точки. Если ни идентификатор копии, ни параметры точки восстановления не задаются, pg_probackup выполняет восстановление, используя самую последнюю копию.
-R
--restore-as-replica
Создаёт минимальный файл конфигурации восстановления для облегчения настройки ведомого сервера. Если для соединения репликации требуется пароль, его нужно дополнительно задать вручную в primary_conninfo. Для Postgres Pro версии 11 и ниже параметры восстановления сохраняются в каталоге данных в файле
recovery.conf
, но для версий Postgres Pro, начиная с 12, pg_probackup сохраняет эти параметры в файлеprobackup_recovery.conf
.--primary-conninfo=
строка_подключения
Устанавливает заданное значение для параметра primary_conninfo. Это значение учитывается только при использовании флага
-R
.Пример:
--primary-conninfo="host=192.168.1.50 port=5432 user=foo password=foopass"
-S
--primary-slot-name=
имя_слота
Устанавливает заданное значение для параметра primary_slot_name. Это значение учитывается только при использовании флага
-R
.-T
СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
--tablespace-mapping=
СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
Перемещает табличное пространство из каталога
СТАРЫЙ_КАТАЛОГ
вНОВЫЙ_КАТАЛОГ
во время восстановления. ИСТАРЫЙ_КАТАЛОГ
, иНОВЫЙ_КАТАЛОГ
должны задаваться абсолютными путями. Если путь содержит знак равно (=
), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств.--external-mapping=
СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
Перемещает внешний каталог, включённый в резервную копию, из каталога
СТАРЫЙ_КАТАЛОГ
вНОВЫЙ_КАТАЛОГ
во время восстановления. ИСТАРЫЙ_КАТАЛОГ
, иНОВЫЙ_КАТАЛОГ
должны задаваться абсолютными путями. Если путь содержит знак равно (=
), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для нескольких каталогов.--skip-external-dirs
Пропускать внешние каталоги, включённые в резервную копию указанием
--external-dirs
. Содержимое этих каталогов не будет восстановлено.--skip-block-validation
Отключает проверку контрольных сумм на уровне блоков для ускорения проверки целостности. При автоматической проверке перед восстановлением будут проверяться только контрольные суммы на уровне файлов.
--no-validate
Пропускает проверку резервного копирования. Этот ключ может быть полезен, если вы регулярно проверяете копии и хотите сократить время восстановления данных.
--restore-command=
команда
Задаёт значение для параметра restore_command. Например:
--restore-command='cp /mnt/server/archivedir/%f "%p"'
--force
Позволяет игнорировать ошибочное состояние копии. Этот флаг можно использовать, когда требуется восстановить кластер Postgres Pro из повреждённой или некорректной копии. Применяйте его с осторожностью. Если в целевом каталоге
PGDATA
идентификатор системы отличается от того, что указан в копии, при инкрементальном восстановлении с этим флагом содержимое каталога будет перезаписано (тогда как без флага возникнет ошибка). Также в случае перенаправления указанием--tablespace-mapping
табличных пространств в непустые каталоги содержимое этих каталогов будет удалено.--no-sync
Не сбрасывать восстанавливаемые файлы на диск. Этот флаг позволяет несколько ускорить процесс восстановления. Использование этого флага может привести к повреждению данных в случае аварии операционной системы или аппаратного сбоя. Если такое событие произойдёт, вам потребуется запустить команду restore ещё раз.
-X
каталог_wal
--waldir=
каталог_wal
Задать каталог, в который будут записаны файлы WAL. По умолчанию файлы WAL будут записываться в подкаталог
pg_wal
целевого каталога, но с помощью этого параметра их можно поместить в любое место. Путькаталог_wal
должен быть абсолютным; этот путь может не существовать, но если он существует, он должен быть пустым.
За подробной информацией о параметрах команды обратитесь к подразделам Общие параметры, Параметры точки восстановления, Параметры удалённого сервера, Параметры удалённого архива WAL, Параметры ведения журнала и Параметры частичного восстановления.
За подробностями обратитесь к подразделу Восстановление кластера.
checkdb #
pg_probackup checkdb [-Bкаталог_копий
] [--instance=имя_экземпляра
] [-Dкаталог_данных
] [--help] [-jчисло_потоков
] [--progress] [--amcheck [--skip-block-validation] [--checkunique] [--heapallindexed]] [параметры_соединения
] [параметры_журнала
]
Проверяет целостность кластера баз данных Postgres Pro, выявляя физические и логические повреждения.
--amcheck
Производит логическую проверку индексов для указанного экземпляра Postgres Pro, если не были выявлены повреждения при проверке файлов данных. Для проверки индексов в базе данных в ней должно быть установлено расширение amcheck или amcheck_next. В базах данных, где amcheck отсутствует, индексы проверяться не будут. Дополнительные параметры
--checkunique
и--heapallindexed
действуют в зависимости от установленной версии amcheck.--checkunique
Проверяет ограничения уникальности во время логической проверки индексов. Вы можете использовать этот флаг только вместе с флагом
--amcheck
, когда в базе данных установлено расширение amcheck.Эта проверка возможна, только если в используемой вами версии расширения amcheck функция
bt_index_check
принимает параметрcheckunique
.--heapallindexed
Проверяет, отражены ли в индексах все кортежи кучи, которые должны быть проиндексированы. Этот ключ можно использовать только вместе с
--amcheck
.Эта проверка возможна, только если в используемой вами версии расширения amcheck/amcheck_next функция
bt_index_check
принимает параметрheapallindexed
.--skip-block-validation
Пропустить проверку файлов данных. Вы можете использовать этот ключ вместе с
--amcheck
, чтобы произвести только логическую проверку индексов.
За подробной информацией о параметрах команды обратитесь к подразделам Общие параметры, Параметры соединения и Параметры ведения журнала.
За подробностями обратитесь к подразделу Проверка кластера.
validate #
pg_probackup validate -Bкаталог_копий
[--help] [--instance=имя_экземпляра
] [-iид_резервной_копии
] [-jчисло_потоков
] [--progress] [--wal] [--skip-block-validation] [параметры_точки_восстановления
] [параметры_журнала
]
Проверяет наличие и целостность всех файлов, необходимых для восстановления кластера. Если имя_экземпляра
не задаётся, pg_probackup проверяет все резервные копии, имеющиеся в каталоге копий. Если вы зададите имя_экземпляра
без дополнительных параметров, pg_probackup проверит все резервные копии, которые имеются для этого экземпляра. Если задать имя_экземпляра
с указанием точки восстановления и/или ид_резервной_копии
, pg_probackup проверит, возможно ли восстановить кластер с этими параметрами. Если задан параметр --wal
, будет произведена полная проверка архива WAL, а не только сегментов WAL, требующихся для восстановления кластера.
За подробностями обратитесь к подразделу Проверка копии.
merge #
pg_probackup merge -Bкаталог_копий
--instance=имя_экземпляра
-iид_резервной_копии
[--dry-run] [--help] [-jчисло_потоков
] [--progress] [--no-validate] [--no-sync] [параметры_журнала
]
Объединяет копии, относящиеся к одной цепочке инкрементальных копий. Если выбрана полная копия, она будет объединена с первой инкрементальной копией после неё. Если выбрана инкрементальная копия, она будет объединена с родительской полной копией, включая все инкрементальные копии между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные.
--no-validate
Пропускает автоматическую проверку до и после объединения.
--no-sync
Не сбрасывать объединяемые файлы на диск. Этот флаг позволяет несколько ускорить процесс объединения. Использование этого флага может привести к повреждению данных в случае аварии операционной системы или аппаратного сбоя.
За подробностями обратитесь к подразделам Общие параметры и Объединение резервных копий.
delete #
pg_probackup delete -Bкаталог_копий
--instance=имя_экземпляра
[--help] [-jчисло_потоков
] [--progress] [--retention-redundancy=избыточность
][--retention-window=окно
][--wal-depth=глубина_wal
] [--delete-wal] {-iид_резервной_копии
| --delete-expired [--merge-expired] | --merge-expired | --status=состояние
} [--dry-run] [--no-validate] [--no-sync] [параметры_журнала
]
Удаляет копию с заданным идентификатором (ид_резервной_копии
) или запускает процедуру удаления резервных копий или заархивированных файлов WAL, не удовлетворяющих текущей политике хранения.
--no-validate
Пропускает автоматическую проверку до и после объединения копий в соответствии с политикой хранения.
--no-sync
Не сбрасывать объединяемые файлы на диск. Этот флаг позволяет несколько ускорить процесс объединения копий в соответствии с политикой хранения. Использование этого флага может привести к повреждению данных в случае аварии операционной системы или аппаратного сбоя.
За подробностями обратитесь к подразделам Удаление резервных копий, Параметры хранения и Настройка политики хранения.
archive-push #
pg_probackup archive-push -Bкаталог_копий
--instance=имя_экземпляра
--wal-file-name=имя_файла_wal
[--wal-file-path=путь_файлов_wal
] [--help] [--dry-run] [--no-sync] [--compress] [--no-ready-rename] [--overwrite] [-jчисло_потоков
] [--batch-size=размер_порции
] [--archive-timeout=тайм-аут
] [--compress-algorithm=алгоритм_сжатия
] [--compress-level=уровень_сжатия
] [параметры_удалённого_режима
] [параметры_журнала
]
Копирует файлы WAL в соответствующий подкаталог каталога копий, проверяя целевой экземпляр по имени_экземпляра
и значению system-identifier
. Если параметры экземпляра резервной копии и кластера не совпадают, операция копирования не выполняется, и выдаётся ошибка: Refuse to push WAL segment segment_name into archive. Instance parameters mismatch.
(Отказано в помещении сегмента имя_сегмента в архив. Параметры экземпляра не совпадают.)
Если файлы, которые требуется копировать, уже имеются в каталоге копий, pg_probackup вычисляет и сравнивает их контрольные суммы. В случае совпадения контрольных сумм archive-push
пропускает соответствующий файл и выдаёт код успешного завершения. Если же они не совпадают, операция archive-push
завершается с ошибкой. Если вы хотите заменять существующие файлы WAL в случае несовпадения контрольных сумм, добавьте к команде archive-push
ключ --overwrite
.
Содержимое каждого файла копируется во временный файл с расширением .part
. Если такой временный файл уже существует, pg_probackup ждёт, что он исчезнет в течение заданного параметром archive_timeout
времени, а если этого не происходит, отбрасывает его. После переноса содержимого выполняется атомарная операция переименования. Тем самым гарантируется, что в случае ошибки команды archive-push
непрерывное архивирование не остановится и что при параллельном архивировании WAL из разных источников в один архив повреждение архива исключено.
Postgres Pro запрашивает сегменты WAL по одному. Для ускорения архивирования вы можете воспользоваться параметром --batch-size
, определяющим размер порции из нескольких копируемых сегментов WAL. Вместе с параметром --batch-size
также можно применить указание -j
, чтобы порции копировались в несколько потоков.
Сегменты WAL, копируемые в архив, по умолчанию (без указания флага --no-sync
) гарантированно сбрасываются на диск.
Команду archive-push
можно использовать в значении параметра archive_command Postgres Pro при настройке непрерывного архивирования WAL.
За подробностями обратитесь к подразделам Общие параметры, Параметры архивирования и Параметры сжатия.
archive-get #
pg_probackup archive-get -Bкаталог_копий
--instance=имя_экземпляра
--wal-file-path=путь_файлов_wal
--wal-file-name=имя_файла_wal
[-jчисло_потоков
] [--batch-size=размер_порции
] [--prefetch-dir=каталог_предвыборки
] [--no-validate-wal] [--dry-run] [--help] [параметры_удалённого_режима
] [параметры_журнала
]
Копирует файлы WAL из соответствующего подкаталога каталога резервных копий в каталог журнала предзаписи кластера. Эта команда автоматически устанавливается программой pg_probackup в значении параметра restore_command
при восстановлении архивных копий с применением архива WAL. Устанавливать её вручную не нужно.
Postgres Pro запрашивает сегменты WAL по одному. Для ускорения восстановления вы можете воспользоваться параметром --batch-size
, определяющим размер порции из нескольких копируемых сегментов WAL. Вместе с параметром --batch-size
также можно применить указание -j
, чтобы порции сегментов копировались в несколько потоков.
За подробностями обратитесь к подразделам Общие параметры, Параметры архивирования и Параметры сжатия.
catchup #
pg_probackup catchup -bрежим_синхронизации
--source-pgdata=путь_к_копируемому_каталогу_данных
--destination-pgdata=путь_к_целевому_каталогу_данных
[--help] [-j | --threads=число_потоков
] [--dry-run] [--write-rate-limit=скорость_записи
] [--stream[--temp-slot[=true|false|on|off]] [-P | --perm-slot] [-S | --slot=имя_слота
] [--exclude-path=ПУТЬ
] [-TСТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
] [-X | --waldir=каталог_wal
] [параметры_подключения
] [параметры_удалённого_режима
] [параметры_журнала
]
Создаёт копию экземпляра Postgres Pro, не используя каталог резервных копий.
-b
режим_синхронизации
--backup-mode=
режим_синхронизации
Выбирает режим синхронизации. Поддерживаются следующие режимы:
FULL
,DELTA
иPTRACK
.--source-pgdata=
путь_к_копируемому_каталогу_данных
Задаёт путь к каталогу данных копируемого экземпляра. Каталог может находиться как локально, так и удалённо.
--destination-pgdata=
путь_к_целевому_каталогу_данных
Задаёт путь к локальному целевому каталогу данных.
-j
число_потоков
--threads=
число_потоков
Задаёт число параллельных потоков для процесса
catchup
.--stream
Копирует экземпляр в режиме доставки STREAM, при котором все необходимые файлы WAL передаются с исходного сервера по протоколу репликации. По умолчанию включён для
catchup
.--write-rate-limit=
скорость_записи
Задаёт скорость записи данных на диск (в мегабайтах/гигабайтах в секунду). По умолчанию указывается в мегабайтах в секунду. Например:
--write-rate-limit=1GBps
или--write-rate-limit=100
(мегабайты в секунду). Значение по умолчанию: 0 (без ограничений).Если параметр указан, по завершении команды
catchup
выводится следующая информация:written
— объём записанных данных, в МБ.total time
— время между первой и последней записью (в секундах). Обратите внимание, что это не общее время выполнения командыcatchup
.sleep time
— время принудительной задержки, в секундах.average rate
— фактическая средняя скорость записи, в мегабайтах в секунду.
Например:
INFO: Rate limit: written 14975.445 MB, total time 17.163 s, sleep time 2.370 s, average rate 872.560715 MBps
-x
=префикс_пути
--exclude-path
=префикс_пути
Определяет префикс для файлов, которые не будут копироваться при синхронизации экземпляров Postgres Pro. Такой префикс должен содержать путь относительно каталога данных экземпляра. Если в префиксе указан каталог, ни один файл в этом каталоге не будет копирован.
Предупреждение
Используйте этот параметр с осторожностью, поскольку исключение файлов может привести к неполной синхронизации.
--temp-slot[=
true
|false
|on
|off
]Создаёт временный слот физической репликации для передачи WAL с копируемого экземпляра Postgres Pro. Параметр
--temp-slot
включён по умолчанию. Это гарантирует, что все нужные сегменты WAL будут доступны, если в процессе копирования произойдёт переключение сегментов WAL. Этот параметр можно использовать только вместе с параметром--stream
и нельзя использовать с параметром--perm-slot
. По умолчанию имя временного слота —pg_probackup_slot
. Чтобы его поменять, воспользуйтесь параметром--slot
/-S
и явно укажите--temp-slot
или--temp-slot=
.true
|on
-P
--perm-slot
Создаёт постоянный слот физической репликации для передачи WAL с копируемого экземпляра Postgres Pro. Этот параметр можно использовать только вместе с параметром
--stream
и нельзя использовать с параметром--temp-slot
. По умолчанию имя постоянного слота —pg_probackup_perm_slot
, но его можно поменять, воспользовавшись параметром--slot
/-S
.-S
имя_слота
--slot=
имя_слота
Задаёт слот репликации, к которому будет выполнено подключение для передачи WAL. Этот параметр можно указать только вместе с параметром
--stream
.-T
СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
--tablespace-mapping=
СТАРЫЙ_КАТАЛОГ
=НОВЫЙ_КАТАЛОГ
Перемещает табличное пространство из каталога
СТАРЫЙ_КАТАЛОГ
вНОВЫЙ_КАТАЛОГ
во время восстановления. ИСТАРЫЙ_КАТАЛОГ
, иНОВЫЙ_КАТАЛОГ
должны задаваться абсолютными путями. Если путь содержит знак равно (=
), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств.-X
каталог_wal
--waldir=
каталог_wal
Задать каталог, в который будут записаны файлы WAL. По умолчанию файлы WAL будут записываться в подкаталог
pg_wal
целевого каталога, но с помощью этого параметра их можно поместить в любое место. Путькаталог_wal
должен быть абсолютным; этот путь может не существовать, но если он существует, он должен быть пустым, чтобы командаcatchup
могла выполняться с параметром--catchup-mode
=FULL
.
За подробной информацией о параметрах команды обратитесь к подразделам Общие параметры, Параметры соединения и Параметры удалённого режима.
За подробностями обратитесь к подразделу Клонирование и синхронизация экземпляра Postgres Pro.
Параметры #
В этом подразделе описываются параметры командной строки для команд pg_probackup. Если какое-либо значение параметра может быть получено из переменной окружения, имя этой переменной указывается в верхнем регистре ниже параметра командной строки. Некоторые значения могут быть получены из файла конфигурации pg_probackup.conf
, находящегося в каталоге копий.
За подробностями обратитесь к Подразделу «Настройка pg_probackup».
Если некоторый параметр задаётся несколькими способами, значение в командной строке имеет наивысший приоритет, а значение в pg_probackup.conf
— наименьший.
Общие параметры #
Ниже приведён список параметров общего характера.
--dry-run
Выполняет пробный запуск нужной команды, который не вносит никаких реальных изменений: не создаются, не удаляются и не перемещаются файлы на диске. Этот флаг также позволяет проверить правильность всех параметров команды и её готовность к запуску. С
--dry-run
пропускается потоковая трансляция WAL.-B
каталог
--backup-path=
каталог
BACKUP_PATH
Задаёт абсолютный путь к каталогу копий. Каталог копий — это каталог, в котором хранятся все файлы резервных копий и метаинформация. Поскольку это расположение необходимо задавать почти для всех команд pg_probackup, имеет смысл указать его один раз в переменной окружения
BACKUP_PATH
. В этом случае каждый раз указывать этот путь в командной строке не нужно.-D
каталог
--pgdata=
каталог
PGDATA
Задаёт абсолютный путь к каталогу данных кластера. Этот параметр является обязательным только для команды add-instance. Другие команды могут получать этот путь из переменной окружения
PGDATA
или из файла конфигурацииpg_probackup.conf
.-i
ид_резервной_копии
--backup-id=
ид_резервной_копии
Задаёт уникальный идентификатор резервной копии.
-j
число_потоков
--threads=
число_потоков
Задаёт число параллельных потоков, запускаемых командами
backup
,restore
,merge
,validate
,checkdb
иarchive-push
.--progress
Включает вывод прогресса выполнения операций.
--help
Выводит подробную информацию по параметрам, которые принимает эта команда.
Параметры точки восстановления #
Если настроено непрерывное архивирование WAL, вы можете передать один из этих параметров с командой restore или validate, чтобы указать момент, до которого должен быть восстановлен или проверен кластер баз данных.
--recovery-target=immediate|latest
Определяет, когда остановить восстановление:
Со значением
immediate
восстановление завершается сразу после достижения согласованного состояния выбранной копии, либо последней копии из имеющихся, если параметр-i
/--backup-id
опущен. Такое поведение по умолчанию применяется для копий типа STREAM.Со значением
latest
восстановление продолжается до тех пор, пока не будут применены все имеющиеся в архиве сегменты WAL. При указании этого значения для параметра--recovery-target
такое же значение задаётся для параметра--recovery-target-timeline
.
--recovery-target-timeline=
линия_времени
Выбирает линию времени для восстановления:
current
— линия времени указанной резервной копии. Это значение по умолчанию.
latest
— линия времени последней доступной резервной копии.Числовое значение.
--recovery-target-lsn=
lsn
Указывает последовательный номер в журнале предзаписи, до которого будет производиться восстановление.
--recovery-target-name=
имя_цели_восстановления
Указывает именованную точку сохранения, вплоть до которой будет восстановлен кластер.
--recovery-target-time=
время
Указывает точку времени, вплоть до которой будет производиться восстановление. Если часовой пояс не указывается, подразумевается местное время.
Например:
--recovery-target-time="2027-04-09 18:21:32+00"
--recovery-target-xid=
ид_транзакции
Указывает идентификатор транзакции, вплоть до которой будет производиться восстановление.
--recovery-target-inclusive=
boolean
Указывает на необходимость остановки сразу после (
true
) либо до (false
) достижения целевой точки. Этот параметр можно использовать только вместе с параметром--recovery-target-time
,--recovery-target-lsn
или--recovery-target-xid
. Значение по умолчанию определяется параметром recovery_target_inclusive.--recovery-target-action=pause|promote|shutdown
Задаёт действие (recovery_target_action), которое должен выполнить сервер по достижении цели восстановления.
По умолчанию:
pause
Параметры сохранения #
Эти параметры могут использоваться с командами backup и delete.
Подробнее о политике хранения рассказывается в подразделе Настройка политики хранения.
--retention-redundancy=
избыточность
Указывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть неотрицательным целым числом. Ноль отключает сохранение.
По умолчанию:
0
--retention-window=
окно
Количество дней, в течение которого возможно восстановление. Должно быть неотрицательным целым числом. При нулевом значении окно восстановления отсутствует.
По умолчанию:
0
--wal-depth=
глубина_wal
Количество резервных копий на каждой линии времени, которое должно сохраняться для обеспечения возможности восстановления PITR. Должно быть неотрицательным целым числом. При нулевом значении этот параметр отключается.
По умолчанию:
0
--delete-wal
Удаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.
--delete-expired
Удаляет резервные копии, не удовлетворяющие политике сохранения, определённой в файле конфигурации
pg_probackup.conf
.--merge-expired
Объединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики хранения, с её родительскими копиями, срок хранения которых истёк.
--dry-run
Выводит текущее состояние всех имеющихся резервных копий, но никакие операции, например, удаление или объединение старых копий, при этом не производятся.
Параметры закрепления #
Эти параметры могут использоваться с командами backup и set-backup.
За подробностями обратитесь к подразделу Закрепление резервных копий.
--ttl=
время_жизни
Задаёт время, на которое закрепляется резервная копия. Значение должно быть неотрицательным целым. Нулевое значение отменяет установленное ранее закрепление резервной копии. Поддерживаются следующие единицы измерения: ms (миллисекунды), s (секунды), min (минуты), h (часы), d (дни). По умолчанию подразумеваются секунды.
Например:
--ttl=30d
--expire-time=
время
Определяет момент времени, до которого будет храниться резервная копия. Время должно задаваться в формате ISO-8601. Если часовой пояс не указывается, подразумевается местное время.
Например:
--expire-time="2027-04-09 18:21:32+00"
Параметры ведения журнала #
Эти параметры могут использоваться с любой командой.
--no-color
Отключает цветовое выделение сообщений уровней
warning
иerror
в консоли.--log-level-console=
уровень_сообщений
Управляет уровнем сообщений, которые будут выводиться в журнал консоли. Допустимые уровни:
verbose
,log
,info
,warning
,error
иoff
. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. Вариантoff
отключает вывод в журнал консоли.По умолчанию:
info
Примечание
Все выводимые в консоль сообщения журнала передаются через stderr, чтобы их можно было отделить от вывода команд show и show-config.
--log-level-file=
уровень_сообщений
Управляет уровнем сообщений, которые будут выводиться в файл журнала. Допустимые уровни:
verbose
,log
,info
,warning
,error
иoff
. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. Вариантoff
отключает вывод в файл журнала.По умолчанию:
off
--log-filename=
файл_журнала
Определяет имена для создаваемых файлов журналов. Имена файлов обрабатываются по шаблону
strftime
, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени.По умолчанию:
pg_probackup.log
Например, если задать шаблон
pg_probackup-%u.log
, pg_probackup будет записывать журнал в отдельные файлы по дням недели, и символы%u
в имени будут заменяться соответствующим десятичным номером:pg_probackup-1.log
в понедельник,pg_probackup-2.log
во вторник и т. д.Этот параметр действует, если включена запись в журнал (параметром
--log-level-file
).--error-log-filename=
файл_журнала_событий
Определяет имена только для файлов журналов ошибок. Имена файлов обрабатываются по шаблону
strftime
, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени.По умолчанию: none
Например, если задать шаблон
error-pg_probackup-%u.log
, pg_probackup будет записывать журнал в отдельные файлы по дням недели, и символы%u
в имени будут заменяться соответствующим десятичным номером:error-pg_probackup-1.log
в понедельник,error-pg_probackup-2.log
во вторник и т. д.Этот параметр полезен для диагностики и решения возникающих проблем.
--log-directory=
каталог_журнала
Определяет каталог, в котором будут создаваться файлы журналов. Вы должны задать в этом параметре абсолютный путь. Этот каталог создаётся только при необходимости, когда в журнал выводится первое сообщение.
По умолчанию:
$BACKUP_PATH/log/
--log-format-console=
формат_журнала
Определяет формат журнала консоли. Устанавливается только из командной строки. Обратите внимание, что этот параметр нельзя указать в файле конфигурации
pg_probackup.conf
посредством команды set-config и что команда backup также воспринимает указание этого параметра в конфигурационном файле как ошибку. Этот параметр может иметь следующие значения:Если
plain
, то журнал выводится на консоль в формате обычного текста.Если
json
, то журнал выводится на консоль в формате JSON.
По умолчанию:
plain
--log-format-file=
формат_журнала
Определяет используемый формат файлов журнала. Этот параметр может иметь следующие значения:
Если
plain
, то файлы журнала записываются в формате обычного текста.Если
json
, то файлы журнала записываются в формате JSON.
По умолчанию:
plain
--log-rotation-size=
размер_журнала_для_ротации
Максимальный размер отдельного файла журнала. Если это значение достигается, файл журнала прокручивается при выполнении какой-либо команды pg_probackup, за исключением
help
иversion
. Нулевое значение отключает прокрутку в зависимости от размера. Поддерживаются следующие единицы: kB (по умолчанию), MB, GB, TB.По умолчанию:
0
--log-rotation-age=
возраст_журнала_для_ротации
Максимальное время жизни отдельного файла журнала. Если это значение достигается, файл журнала прокручивается при выполнении какой-либо команды pg_probackup, за исключением
help
иversion
. Время создания последнего файла журнала сохраняется в$BACKUP_PATH/log/log_rotation
. Нулевое значение отключает прокрутку по времени. Поддерживаемые единицы: ms (миллисекунды), s (секунды), min (минуты, по умолчанию), h (часы), d (дни).По умолчанию:
0
Параметры подключения #
Эти параметры могут использоваться с командами backup, catchup и checkdb.
pg_probackup поддерживает все переменные окружения libpq.
-d
имя_бд
--pgdatabase=
имя_бд
PGDATABASE
Задаёт имя базы данных для подключения. Это подключение используется только для управления процессом резервного копирования, так что вы можете подключиться к любой существующей базе. Если этот параметр не задаётся в командной строке, переменной окружения
PGDATABASE
или в конфигурационном файлеpg_probackup.conf
, pg_probackup принимает в качестве имени базы значение переменной окруженияPGUSER
или имя текущего пользователя, если переменнаяPGUSER
не задана.-h
сервер
--pghost=
сервер
PGHOST
Указывает имя системы, в которой работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
По умолчанию:
localhost
-p
порт
--pgport=
порт
PGPORT
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения.
По умолчанию:
5432
-U
имя_пользователя
--pguser=
имя_пользователя
PGUSER
Имя пользователя для подключения.
-w
--no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл .pgpass или переменная окружения
PGPASSWORD
, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.-W
--password
Запрашивать пароль. (Устаревший параметр.)
Параметры сжатия #
Эти параметры могут использоваться с командами backup и archive-push.
--compress-algorithm=
алгоритм_сжатия
Определяет алгоритм, который будет использоваться для сжатия файлов данных. Возможные значения:
zlib
,lz4
,zstd
,pglz
иnone
. Любое значение, отличное отnone
, включает сжатие. При этом сжимаются и файлы данных, и файлы WAL. По умолчанию сжатие отключено. Для команды archive-push алгоритм сжатияpglz
не поддерживается.Примечание
Программа pg_probackup поддерживает алгоритмы сжатия, включённые в конкретную версию Postgres Pro. В частности:
lz4 поддерживается для Postgres Pro версии 14 и выше.
zstd поддерживается для Postgres Pro версии 15 и выше.
По умолчанию:
none
--compress-level=
уровень_сжатия
Определяет уровень сжатия. Этот параметр можно использовать вместе с параметром
--compress-algorithm
. Возможные значения зависят от указанного алгоритма сжатия:0 — 9 для
zlib
1 для
pglz
0 — 12 для
lz4
0 — 22 для
zstd
При значении 0 устанавливается уровень сжатия по умолчанию для указанного алгоритма:
6 для
zlib
1 для
pglz
9 для
lz4
3 для
zstd
Примечание
Алгоритм сжатия lz4 имеет только один уровень — 1. Так что, если указан алгоритм сжатия
lz4
, а уровень сжатия в--compress-level
установлен выше 1, фактически используется алгоритм lz4hc, который работает значительно медленнее, но обеспечивает лучшее сжатие.По умолчанию:
1
--compress
Задаёт алгоритм сжатия по умолчанию и устанавливает
--compress-level=1
. Алгоритм по умолчанию выбирается среди поддерживаемых Postgres Pro в соответствии с приоритетами:zstd
(самый высокий) ->lz4
->zlib
->pglz
. Параметр--compress
переопределяет параметры--compression-algorithm
и--compress-level
и не может быть использован одновременно с ними.
Параметры архивации #
Эти параметры могут использоваться с командой archive-push в значении параметра archive_command и с командой archive-get в значении restore_command.
Дополнительно вы можете задать параметры удалённого сервера и ведения журнала.
--wal-file-path=
путь_файлов_wal
Задаёт путь файла WAL в
archive_command
иrestore_command
. В качестве значения для данного параметра укажите%p
или явно задайте путь к файлу вне каталога данных. Если этот параметр не задан, используется путь, заданный в файлеpg_probackup.conf
.--wal-file-name=
имя_файла_wal
Задаёт имя файла WAL в
archive_command
иrestore_command
. В качестве значения для данного параметра укажите%f
для правильной его обработки. Если значением параметра--wal-file-path
является путь вне каталога данных, следует явно указывать имя файла.--overwrite
Разрешает перезапись файлов WAL в архиве. Этот ключ действует при выполнении команды archive-push, когда указанный подкаталог каталога резервных копий уже содержит данный файл WAL, и его нужно заменить новой копией. Без этого ключа
archive-push
сообщит, что сегмент WAL уже существует, и прервёт операцию. Если заменяемый файл не изменился,archive-push
пропускает его, независимо от указания--overwrite
.--batch-size=
размер_порции
Используется для ускорения процесса архивирования при выполнении
archive-push
или процесса восстановления при выполненииarchive-get
. Задаёт максимальное количество файлов WAL, которое может быть скопировано в архив одним процессомarchive-push
или из архива одним процессомarchive-get
.--archive-timeout=
время_ожидания
Задаёт интервал, по истечении которого существующие файлы
.part
будут считаться потерянными. По умолчанию pg_probackup ждёт исчезновения этих файлов 300 секунд. Этот параметр можно использовать только с командой archive-push.--no-ready-rename
Предотвращает переименование файлов состояния в каталоге
archive_status
. Этот параметр полезен, только когда вarchive_command
задано несколько команд, и применять его можно только с командой archive-push.--no-sync
Не сбрасывать копируемые файлы WAL на диск. Этот флаг позволяет несколько ускорить процесс архивации. Использование этого флага может привести к повреждению архива WAL в случае аварии операционной системы или аппаратного сбоя. Данный параметр можно указать только с командой archive-push.
--prefetch-dir=
путь
Каталог, в котором будут храниться предзагружаемые сегменты WAL при использовании параметра
--batch-size
. Этот каталог должен находиться в той же файловой системе и ниже той же точки монтирования, что иPGDATA/pg_wal
. По умолчанию эти сегменты размещаются в каталогеPGDATA/pg_wal/pbk_prefetch
. Данный параметр может применяться только с командой archive-get.--no-validate-wal
Отключает проверку предзагруженных файлов WAL перед использованием. Применяйте этот параметр, если вы хотите увеличить скорость восстановления. Данный параметр может применяться только с командой archive-get.
Параметры удалённого режима #
В этом подразделе описываются параметры, связанные с удалённым выполнением операций pg_probackup по SSH. Эти параметры могут использоваться с командами add-instance, set-config, backup, catchup, restore, archive-push и archive-get.
Подробнее о настройке и использовании удалённого режима рассказывается в Подразделе «Настройка удалённого режима» и Подразделе «Использование pg_probackup в удалённом режиме».
--remote-proto=
протокол
Задаёт протокол для удалённого выполнения операций. В настоящее время поддерживается только протокол SSH. Возможные значения:
ssh
— включает удалённый режим с использованием SSH. Этот вариант используется по умолчанию.none
— явным образом отключает удалённый режим.
Этот параметр можно не задавать, если указывается
--remote-host
.--remote-host=
целевой_адрес
Задаёт имя или IP-адрес целевого удалённого сервера.
--remote-port=
порт
Задаёт целевой порт на удалённом сервере.
По умолчанию:
22
--remote-user=
имя_пользователя
Задаёт имя пользователя на удалённом сервере для SSH-соединения. В отсутствие этого параметра используется имя текущего пользователя, устанавливающего SSH-соединения.
--remote-path=
путь
Задаёт каталог, в котором pg_probackup установлен на удалённой системе.
--ssh-options=
параметры_ssh
Задаёт строку параметров командной строки для SSH. Например, следующим образом можно установить свойства
keep-alive
для SSH-подключений, которые будет открывать pg_probackup:--ssh-options="-o ServerAliveCountMax=5 -o ServerAliveInterval=60"
. Полный список всех параметров можно найти в руководстве по ssh_config.
Параметры удалённого архива WAL #
В этом подразделе описываются параметры, позволяющие задать аргументы archive-get для использования удалённого режима в команде restore_command при восстановлении PITR или восстановлении копий типа ARCHIVE.
--archive-host=
целевой_адрес
Задаёт значение аргумента
--remote-host
для командыarchive-get
.--archive-port=
порт
Задаёт значение аргумента
--remote-port
для командыarchive-get
.По умолчанию:
22
--archive-user=
имя_пользователя
Задаёт значение аргумента
--remote-user
для командыarchive-get
. В отсутствие этого указания используется имя пользователя, запускающего кластер Postgres Pro.По умолчанию: пользователь Postgres Pro
Параметры инкрементального восстановления #
В этом подразделе описываются параметры, связанные с инкрементальным восстановлением кластера. Эти параметры могут передаваться с командой restore.
-I
инкрементальный_режим
--incremental-mode=
инкрементальный_режим
Выбирает инкрементальный режим. Поддерживаются следующие режимы:
CHECKSUM
— заменять только страницы с неподходящей контрольной суммой и LSN.LSN
— заменять только те страницы, LSN которых больше точки расхождения.NONE
— обычное восстановление.
Параметры частичного восстановления #
В этом подразделе описываются параметры, связанные с частичным восстановлением кластера. Эти параметры могут передаваться с командой restore.
--db-exclude=
имя_бд
Задаёт имя базы данных, которая должна быть исключена из числа восстанавливаемых. Все остальные базы данных в кластере будут восстанавливаться, включая
template0
иtemplate1
. Этот параметр можно задать несколько раз, таким образом исключив несколько баз данных.--db-include=
имя_бд
Задаёт имя базы данных, которая должна восстанавливаться. Все остальные базы данных восстанавливаться не будут, за исключением
template0
иtemplate1
. Этот параметр можно задать несколько раз, таким образом выбрав для восстановления несколько баз данных.
Параметры тестирования и отладки #
В этом подразделе описываются параметры, полезные лишь при тестировании или разработке.
PGPROBACKUP_TESTS_SKIP_HIDDEN
Указывает pg_probackup игнорировать копии, помеченные как скрытые. Заметьте, что сама утилита pg_probackup никогда не помечает копии как скрытые. Добиться такого состояния копии можно, только вручную отредактировав файл
backup.control
. Задать этот параметр можно только в переменных окружения.--destroy-all-other-dbs
По умолчанию pg_probackup завершает работу ошибкой при попытке выполнить частичное инкрементальное восстановление, поскольку при этом удаляются базы данных, не включённые в список восстановления. Этот флаг позволяет игнорировать ошибку и продолжать частичное инкрементальное восстановление (например, чтобы снимок тестовой БД находился в том же состоянии, что и снимок производственной БД). Этот параметр можно использовать с командой restore.
Важно
Никогда не используйте этот флаг в производственном кластере.
PGPROBACKUP_TESTS_SKIP_EMPTY_COMMIT
Указывает pg_probackup пропускать пустые транзакции после pg_backup_stop.
Версионирование #
При разработке pg_probackup используется семантическое версионирование.