pg_probackup
pg_probackup — управление резервным копированием и восстановлением кластеров баз данных Postgres Pro
Синтаксис
pg_probackup init -B каталог_копий
pg_probackup add-instance -B каталог_копий -D каталог_данных --instance имя_экземпляра
pg_probackup del-instance -B каталог_копий --instance имя_экземпляра
pg_probackup set-config -B каталог_копий --instance имя_экземпляра [параметр...]
pg_probackup show-config -B каталог_копий --instance имя_экземпляра [--format=]формат
pg_probackup backup -B каталог_копий --instance имя_экземпляра -b режим_копирования [параметр...]
pg_probackup merge -B каталог_копий --instance имя_экземпляра -i ид_резервной_копии [параметр...]
pg_probackup restore -B каталог_копий --instance имя_экземпляра [параметр...]
pg_probackup validate -B каталог_копий [параметр...]
pg_probackup show -B каталог_копий [параметр...]
pg_probackup delete -B каталог_копий --instance имя_экземпляра { -i ид_резервной_копии | --wal | --expired }
pg_probackup archive-push -B каталог_копий --instance имя_экземпляра --wal-file-path %p --wal-file-name %f [параметр...]
pg_probackup archive-get -B каталог_копий --instance имя_экземпляра --wal-file-path %p --wal-file-name %f
pg_probackup checkdb -B каталог_копий --instance имя_экземпляра -D каталог_данных [параметр...]
pg_probackup version
pg_probackup help [команда]
Описание
pg_probackup — это утилита для управления резервным копированием и восстановлением кластеров баз данных Postgres Pro. Она предназначена для регулярного создания резервных копий экземпляра Postgres Pro, позволяющих восстанавливать сервер в случае необходимости. pg_probackup поддерживает Postgres Pro версии 9.5 и новее.
Обзор
По сравнению с другими средствами резервного копирования pg_probackup имеет следующие преимущества, полезные для реализации различных стратегий резервного копирования и работы с базами данных большого объёма:
Выбор между полным резервным копированием и инкрементальным, на уровне страниц, позволяющим ускорить процесс копирования и восстановления
Реализация единой стратегии резервного копирования для кластеров Postgres Pro с несколькими серверами
Автоматический контроль целостности данных и проверка резервных копий без восстановления данных кластера
Управление резервными копиями в соответствии с политикой их сохранения
Выполнение резервного копирования, восстановления и проверки в параллельных потоках
Хранение копируемых данных в сжатом состоянии для экономии дискового пространства
Снятие резервной копии с ведомого сервера с целью избежать дополнительной нагрузки на ведущий сервер
Расширенные параметры ведения журнала
Дополнительные команды для упрощения архивации журнала WAL
Резервное копирование файлов и каталогов, расположенных вне каталога данных Postgres Pro, например файлов конфигурации или журналов сервера
Для управления резервными копиями pg_probackup создаёт каталог резервных копий. В этом каталоге сохраняются все файлы резервных копий с дополнительной метаинформацией, а также архивы WAL, необходимые для восстановления на момент времени. Вы можете хранить резервные копии разных экземпляров в отдельных подкаталогах одного каталога копий.
Используя pg_probackup, вы можете выполнять полное или инкрементальное резервное копирование:
Полные резервные копии содержат все файлы данных, необходимые для восстановления кластера баз данных с нуля.
Инкрементальные резервные копии сохраняют только те данные, которые изменились со времени последнего копирования. Это позволяет уменьшить размер резервной копии и ускорить операции копирования данных. pg_probackup поддерживает следующие режимы инкрементального копирования:
Режим
PAGE. В этом режиме pg_probackup сканирует все файлы WAL в архиве с момента создания предыдущей полной или инкрементальной копии. Новая резервная копия будет содержать только страницы, фигурирующие в записях WAL. При этом необходимо, чтобы в архиве WAL сохранялись все файлы WAL, записанные после предыдущей копии. Если размер этих файлов сравним с общим размером файлов базы данных, ускорение будет менее значительным, но размер копии будет всё же меньше.Режим
DELTA. В этом режиме pg_probackup считывает все файлы данных в каталоге данных и копирует только те страницы, которые изменились со времени предыдущего копирования. Для использования данного режима не требуется производить непрерывное архивирование. Заметьте, что в этом режиме объём ввода/вывода может равняться объёму при полном резервном копировании.Режим
PTRACK. В этом режиме Postgres Pro отслеживает изменения страниц на лету. Чтобы он работал, не требуется производить непрерывное архивирование WAL. При каждом изменении страницы отношения она помечается в специальной картеPTRACKэтого отношения. Так как для одной страницы в слоеPTRACKтребуется всего один бит, такие карты довольно малы. Это отслеживание привносит небольшие издержки в работу сервера, но значительно ускоряет инкрементальное резервное копирование.
Вне зависимости от выбранного типа резервного копирования pg_probackup поддерживает следующие стратегии архивирования:
Автономные резервные копии включают все файлы, необходимые для восстановления согласованного состояния кластера на момент создания копии. Даже если непрерывное архивирование не производится, в эту копию включаются только необходимые сегменты WAL.
Архивные резервные копии основаны на непрерывном архивировании. Такие копии позволяют восстановить кластер на произвольный момент времени после момента создания копии (производить восстановление на момент времени).
См. также
Ограничения
В настоящее время pg_probackup имеет следующие ограничения:
Создание копий с удалённого сервера на платформе Windows в настоящее время не поддерживается.
На сервере, где была сделана копия, и на сервере, где она будет восстанавливаться, должны быть одинаковые значения параметров block_size и wal_block_size и одинаковая основная версия.
Установка и подготовка
Пакет pg_probackup входит в состав дистрибутивного набора Postgres Pro. Установив pg_probackup, выполните следующие действия:
Инициализация каталога резервных копий
pg_probackup сохраняет все файлы копируемых данных и WAL в соответствущих подкаталогах каталога резервных копий.
Для инициализации каталога резервных копий выполните команду:
pg_probackup init -B каталог_копийздесь каталог_копий — это каталог, предназначенный для резервных копий. Если каталог_копий уже существует, он должен быть пустым. В противном случае pg_probackup выдаст ошибку.
pg_probackup создаёт каталог_копий со следующими подкаталогами:
wal/— каталог для файлов WAL.backups/— каталог для файлов резервных копий.
Проинициализировав каталог резервных копий, вы можете определить копируемый экземпляр.
Определение копируемого экземпляра
pg_probackup может сохранять резервные копии разных кластеров баз данных в одном каталоге резервных копий. Для создания необходимых подкаталогов вы должны определить копируемый экземпляр в каталоге копий для каждого кластера баз данных, копию которого вы будете делать.
Для определения копируемого экземпляра выполните команду:
pg_probackup add-instance -Bкаталог_копий-Dкаталог_данных--instanceимя_экземпляра[--external-dirs=путь_внешних_каталогов] [параметры_удалённого_сервера]
где:
каталог_данных— каталог, содержащий данные кластера, копию которого вы хотите сделать. Для подготовки и использования pg_probackup необходимо иметь право записи в этот каталог.имя_экземпляра— это имя подкаталогов, в которых будут храниться файлы копируемых данных и WAL для этого кластера.Необязательный параметр
--external-dirsзадаёт путь к одному или нескольким каталогам, которые находятся вне каталога данных, но должны попасть в резервную копию. Чтобы задать несколько внешних каталогов, разделите их пути двоеточиями.
pg_probackup создаёт подкаталоги имя_экземпляра в каталогах backups/ и wal/ каталога резервных копий. Каталог backups/ содержит файл конфигурации имя_экземпляраpg_probackup.conf, управляющий параметрами копирования и восстановления для данного экземпляра копии. Если вы используете дополнительный параметр --external-dirs, его значение добавляется в pg_probackup.conf, так что указанные внешние каталоги будут копироваться при каждом создании резервной копии этого экземпляра. Подробнее тонкая настройка конфигурации pg_probackup описана в Подразделе «Настройка pg_probackup».
Каталог резервных копий должен находиться в файловой системе сервера БД. Пользователь, запускающий pg_probackup, должен иметь полный доступ к содержимому этого каталога. Если вы зададите путь к этому каталогу в переменной окружения BACKUP_PATH, соответствующий параметр в командах pg_probackup можно не указывать.
Так как pg_probackup использует обычное подключение к PostgreSQL и стандартный протокол репликации, для команд pg_probackup необходимо задавать параметры подключения. Чтобы каждый раз не задавать эти параметры в командной строке, вы можете определить их в файле конфигурации pg_probackup.conf с помощью команды set-config. За подробностями обратитесь к Подразделу «Настройка pg_probackup».
Настройка кластера баз данных
Хотя pg_probackup можно использовать от имени суперпользователя, рекомендуется создать отдельного пользователя или роль с минимальными правами, необходимыми для выбранной стратегии копирования. В этих инструкциях по настройке такой ролью служит роль backup.
Для выполнения резервного копирования требуются следующие права:
CREATE ROLE backup WITH LOGIN; GRANT USAGE ON SCHEMA pg_catalog TO backup; GRANT EXECUTE ON FUNCTION current_setting(text) TO backup; GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup; GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup; GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean) TO backup; GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup; GRANT EXECUTE ON FUNCTION pg_switch_xlog() TO backup; GRANT EXECUTE ON FUNCTION txid_current() TO backup; GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup; GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup;
Так как программа pg_probackup должна читать непосредственно файлы кластера, запускать pg_probackup нужно от имени пользователя ОС, который имеет доступ на чтение всех файлов и каталогов внутри каталога данных (PGDATA).
В зависимости от того, будете ли вы применять автономное или архивное резервное копирование, конфигурация кластера Postgres Pro будет разной (об особенностях рассказывается ниже). Чтобы получить копию кластера баз данных с ведомого сервера или создать резервную копию PTRACK, требуется дополнительная настройка. За подробностями обратитесь к Подразделу «Копирование в режиме PTRACK» и Подразделу «Копирование данных с ведомого сервера».
Настройка автономного резервного копирования
Чтобы настроить кластер для автономного резервного копирования, выполните следующие действия:
Дайте право
REPLICATIONролиbackup:ALTER ROLE backup WITH REPLICATION;
В файле
pg_hba.confразрешите выполнение репликации для ролиbackup.Измените файл конфигурации
postgresql.confсервера Postgres Pro следующим образом:Установите для параметра
max_wal_sendersдостаточно большое значение, предусматривающее минимум одно подключение для процесса резервного копирования.Установите в параметре
wal_levelуровеньreplicaили выше.
Если вы намерены выполнять страничное резервное копирование (в режиме
PAGE), вам также необходимо настроить архивирование WAL как описано в Подразделе «Настройка архивного резервного копирования».
После этого вы сможете выполнять резервное копирование в режимах FULL, PAGE или DELTA с ведущего сервера. Если вы намерены выполнять резервное копирование с ведомого сервера или осуществлять копирование в режиме PTRACK, потребуется дополнительная настройка по инструкциям в Подразделе «Копирование данных с ведомого сервера» или Подразделе «Копирование в режиме PTRACK», соответственно.
Настройка архивного резервного копирования
Чтобы настроить кластер для архивного резервного копирования, выполните следующие действия:
Настройте следующие параметры в
postgresql.confдля включения постоянного архивирования на сервере Postgres Pro:Убедитесь, что в параметре
wal_levelустановлен уровеньreplicaили выше.Установите параметр
archive_mode. Если вы настраиваете резервное копирование на ведущем сервере, параметрarchive_modeдолжен иметь значениеon. Для выполнения резервного копирования на ведомом сервере требуется значениеalways.Задайте в переменной
archive_command:archive_command = 'pg_probackup archive-push -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f'Параметры
каталог_данныхиимя_экземплярадолжны указывать на уже проинициализированный экземпляр для этого кластера баз данных.
После этого вы сможете выполнять резервное копирование в режимах FULL, PAGE или DELTA с ведущего сервера. Если вы намерены выполнять резервное копирование с ведомого сервера или осуществлять копирование в режиме PTRACK, потребуется дополнительная настройка по инструкциям в Подразделе «Копирование данных с ведомого сервера» или Подразделе «Копирование в режиме PTRACK», соответственно.
Копирование данных с ведомого сервера
С Postgres Pro 9.6 или новее pg_probackup может копировать данные с ведомого сервера. Для этого требуется дополнительная настройка:
Разрешите подключения для репликации на ведомом сервере:
Установите в файле
postgresql.confпараметрыmax_wal_sendersиhot_standby.Настройте аутентификацию по сетевым узлам в
pg_hba.conf.
Включите параметр
full_page_writesвpostgresql.confна ведущем сервере.
Примечание
Архивное копирование с ведомого сервера имеет следующие ограничения:
Если ведомый сервер переводится в роль ведущего во время архивного копирования, копирование прерывается с ошибкой.
Все необходимые для резервной копии записи WAL должны содержать полные страницы. Это требует включения режима
full_page_writesна ведущем сервере и отказа от использования вarchive_commandутилит, удаляющих полные страницы из файлов WAL, как например pg_compresslog.
Копирование в режиме PTRACK
Если вы хотите копировать данные в режиме PTRACK, выполните следующие дополнительные действия:
Задайте в
postgresql.confдля параметраptrack_enableзначениеon.Дайте права на выполнения функций
ptrackролиbackup:
GRANT EXECUTE ON FUNCTION pg_ptrack_clear() TO backup; GRANT EXECUTE ON FUNCTION pg_ptrack_get_and_clear(oid, oid) TO backup;
Роль backup должна иметь доступ ко всем базам данных в кластере.
Справка по командной строке
Команды
В этом разделе описываются команды pg_probackup. У этих команд могут быть как обязательные, так и дополнительные параметры, За подробным описанием обратитесь к Подразделу «Параметры».
initСинтаксис:
pg_probackup init -B
каталог_копийИнициализирует
каталог_копий, в котором будут храниться резервные копии, архив WAL и метаинформация о скопированных кластерах баз данных. Если заданныйкаталог_копийуже существует, он должен быть пустым. В противном случае pg_probackup выдаст соответствующее сообщение об ошибке.add-instanceСинтаксис:
pg_probackup add-instance -B
каталог_копий-Dкаталог_данных--instanceимя_экземпляра[--external-dirs=путь_внешних_каталогов]Инициализирует новый копируемый экземпляр в каталоге
каталог_копийи создаёт файл конфигурацииpg_probackup.conf, управляющий параметрами копирования и восстановления для кластера, использующего указанныйкаталог_данных. За подробностями обратитесь к Подразделу «Определение копируемого экземпляра».del-instanceСинтаксис:
pg_probackup del-instance -B
каталог_копий--instanceимя_экземпляраУдаляет все файлы скопированных данных и WAL, связанные с указанным экземпляром.
set-configСинтаксис:
pg_probackup set-config -B
каталог_копий--instanceимя_экземпляра[--log-level-console=уровень_сообщений] [--log-level-file=уровень_сообщений] [--log-filename=файл_журнала] [--error-log-filename=файл_журнала_ошибок] [--log-directory=каталог_журнала] [--log-rotation-size=размер_журнала_для_ротации] [--log-rotation-age=возраст_журнала_для_ротации] [--retention-redundancy=избыточность][--retention-window=окно] [--compress-algorithm=алгоритм_сжатия] [--compress-level=уровень_сжатия] [-dимя_базы] [-hузел] [-pпорт] [-Uимя_пользователя] [--archive-timeout=тайм-аут] [--external-dirs=путь_внешних_каталогов] [параметры_удалённого_сервера]Добавляет заданные параметры соединения, сохранения, ведения журнала, подключения к реплике, сжатия и внешних каталогов в конфигурационный файл
pg_probackup.confлибо изменяет ранее определённые значения.show-configСинтаксис:
pg_probackup show-config -B
каталог_копий--instanceимя_экземпляра[--format=plain|json]Выводит содержимое файла
pg_probackup.conf, размещённого в каталоге. Вы можете добавить параметркаталог_копий/backups/имя_экземпляра--format=jsonдля получения результата в формате JSON. По умолчанию параметры конфигурации выводятся обычным текстом.Для изменения параметров в
pg_probackup.confвоспользуйтесь командойset-config. Непосредственно редактироватьpg_probackup.confнельзя.backupСинтаксис:
pg_probackup backup -B
каталог_копий-bрежим_копирования--instanceимя_экземпляра[-C] [--stream [-Sимя_слота] [--temp-slot]] [--backup-pg-log] [--external-dirs=путь_внешних_каталогов] [--delete-expired] [--merge-expired] [--delete-wal] [--no-validate] [--skip-block-validation] [--retention-redundancy=избыточность] [--retention-window=окно] [-dимя_базы] [-hсервер] [-pпорт] [-Uимя_пользователя] [-w --no-password] [-W --password] [--archive-timeout=тайм-аут] [--compress] [--compress-algorithm=алгоритм_сжатия] [--compress-level=уровень_сжатия] [-jчисло_потоков][--progress] [параметры_журнала] [параметры_удалённого_сервера]Создаёт резервную копию экземпляра Postgres Pro. Какой именно режим копирования будет использоваться, устанавливает параметр
режим_копирования. За подробностями обратитесь к Подразделу «Создание резервной копии».mergeСинтаксис:
pg_probackup merge -B
каталог_копий--instanceимя_экземпляра-iид_резервной_копии[-jчисло_потоков][--progress] [параметры_журнала] [параметры_удалённого_сервера]Объединяет указанную инкрементальную копию с её родительской полной копией, вместе со всеми инкрементальными копиями между ними. В результате полная копия будет вмещать в себя все данные, а инкрементальные копии будут удалены как избыточные. Подробности описаны в Подразделе «Объединение резервных копий».
restoreСинтаксис:
pg_probackup restore -B
каталог_копий--instanceимя_экземпляра[-Dкаталог_данных] [-iид_резервной_копии] [{--recovery-target=immediate|latest | --recovery-target-time=время| --recovery-target-xid=ид_транзакции| --recovery-target-lsn=lsn| --recovery-target-name=имя_цели_восстановления} [--recovery-target-inclusive=логическое_значение]] [--recovery-target-timeline=линия_времени] [-TСТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ] [--external-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ] [--skip-external-dirs] [--recovery-target-action=pause|promote|shutdown] [-R | --restore-as-replica] [--no-validate] [--skip-block-validation] [-jчисло_потоков] [--progress] [параметры_журнала] [параметры_удалённого_сервера]Восстанавливает экземпляр Postgres Pro из резервной копии, расположенной в каталоге
каталог_копий. Если вы укажете параметр точки восстановления, pg_probackup восстановит кластер до заданной точки. В противном случае будет восстановлена самая последняя копия.validateСинтаксис:
pg_probackup validate -B
каталог_копий[--instanceимя_экземпляра] [-iид_резервной_копии] [{--recovery-target-time=время| --recovery-target-xid=ид_транзакции| --recovery-target-lsn=lsn| --recovery-target-name=имя_цели_восстановления} [--recovery-target-inclusive=логическое_значение]] [--recovery-target-timeline=линия_времени] [--skip-block-validation] [-jчисло_потоков] [--progress]Проверяет наличие и целостность всех файлов, необходимых для восстановления кластера. Если вы зададите
имя_экземплярабез дополнительных параметров, pg_probackup проверит все резервные копии, которые имеются для этого экземпляра. Если вы зададитеимя_экземплярас параметром точки восстановления илиид_резервной_копии, pg_probackup проверит, возможно ли восстановить кластер с этими параметрами. Еслиимя_экземпляране задано, pg_probackup проверяет все резервные копии, имеющиеся в каталоге копий.showСинтаксис:
pg_probackup show -B
каталог_копий[--instanceимя_экземпляра[-iид_резервной_копии]] [--format=plain|json]Показывает содержимое каталога копий. Если задано
имя_экземпляраиид_резервной_копии, выводится подробная информация об этой копии. Добавив ключ--format=json, вы сможете получить результат в формате JSON. По умолчанию содержимое каталога копий выводится обычным текстом.deleteСинтаксис:
pg_probackup delete -B
каталог_копий--instanceимя_экземпляра[--wal] {-iид_резервной_копии| --expired [--merge-expired] | --merge-expired} [--dry-run]Удаляет файлы скопированных данных или WAL для указанного экземпляра копии из каталога
каталог_копий:С параметром
walудаляются файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.При указании ключа
-iудаляется только заданная резервная копия.С параметром
expiredудаляются резервные копии, которые считаются ненужными согласно текущей политике сохранения копий. Совместно с параметромmerge-expiredданный параметр действует только после объединения копий.Ключ
merge-expiredобъединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики сохранения, с её родительскими копиями, срок хранения которых истёк.С параметром
dry-runвыводится текущее состояние всех имеющихся резервных копий, но никакие операции, например, удаление или объединение старых копий, не производятся.
archive-pushСинтаксис:
pg_probackup archive-push -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f' [--compress][--compress-algorithm=алгоритм_сжатия][--compress-level=уровень_сжатия] [--overwrite] [параметры_удалённого_сервера]Сохраняет файлы WAL в соответствующем подкаталоге каталога копий и проверяет экземпляр копии по имени
имя_экземпляра,system-identifierиPGDATA. Если параметры копируемого экземпляра не соответствуют параметрам кластера, выдаётся следующее сообщение об ошибке: «Refuse to push WAL segmentsegment_nameinto archive. Instance parameters mismatch.» (Отказано в помещении в архив сегмента WALимя_сегмента. Параметры экземпляра не совпадают.) Для каждого файла WAL, перемещаемого в каталог копий, вы увидите такое сообщение в журнале Postgres Pro: «pg_probackup archive-push completed successfully» (Команда pg_probackup archive-push выполнена успешно). Если копируемые файлы уже существуют в каталоге копии, pg_probackup вычисляет и сравнивает их контрольные суммы. При совпадении контрольных сумм операцияarchive-pushпропускает соответствующий файл и возвращает код успешного завершения. В противном случае эта операция завершается ошибкой. Если вы хотите, чтобы при несовпадении контрольных сумм файлы WAL заменялись, добавьте к командеarchive-pushключ--overwrite.Команду
archive-pushможно задать в качестве archive_command вpostgresql.confдля выполнения архивного резервного копирования.archive-getСинтаксис:
pg_probackup archive-get -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f' [параметры_удалённого_сервера]Перемещает файлы WAL из соответствующего подкаталога каталога резервной копии в каталог журнала предзаписи кластера. Эта команда автоматически устанавливается программой pg_probackup в качестве
restore_commandвrecovery.confпри восстановлении архивных копий с применением архива WAL. Устанавливать её вручную не нужно.checkdbСинтаксис:
pg_probackup checkdb -D
каталог_данных[-Bкаталог_копий] [--instanceимя_экземпляра] [--amcheck [--heapallindexed] [--skip-block-validation]] [--progress] [-jчисло_потоков]Проверяет все файлы данных, расположенные в заданном каталоге данных, проводя проверку контрольных сумм на уровне блоков и проверку корректности заголовков страниц. При запуске с ключом
--amcheckэта команда также выполняет логическую проверку всех индексов в указанном экземпляре Postgres Pro, используя расширение amcheck.versionСинтаксис:
pg_probackup version
Выводит версию pg_probackup.
helpСинтаксис:
pg_probackup help [
команда]Выдаёт справку по командам pg_probackup. Если в параметрах задаётся одна из команд pg_probackup, выводит подробную информацию по параметрам, которые принимает эта команда.
Параметры
В этом разделе описываются все параметры командной строки для команд pg_probackup. Если какое-либо значение параметра может быть получено из переменной окружения, имя этой переменной указывается в верхнем регистре ниже параметра командной строки. Некоторые значения могут быть получены из файла конфигурации pg_probackup.conf, находящегося в каталоге копий. За подробностями обратитесь к Подразделу «Настройка pg_probackup».
Если некоторый параметр задаётся несколькими способами, значение в командной строке имеет наивысший приоритет, а значение в pg_probackup.conf — наименьший.
Общие параметры
-Bкаталог--backup-path=каталогBACKUP_PATHЗадаёт абсолютный путь к каталогу копий. Каталог копий — это каталог, в котором хранятся все файлы резервных копий и метаинформация. Поскольку это расположение необходимо задавать почти для всех команд pg_probackup, имеет смысл указать его один раз в переменной окружения
BACKUP_PATH. В этом случае каждый раз указывать этот путь в командной строке не нужно.-Dкаталог--pgdata=каталогPGDATAЗадаёт абсолютный путь к каталогу данных кластера. Этот параметр является обязательным только для команды
init. Другие команды могут получать этот путь из переменной окруженияPGDATAили из файла конфигурацииpg_probackup.conf.-iид_резервной_копии-backup-id=ид_резервной_копииЗадаёт уникальный идентификатор резервной копии.
--skip-block-validationОтключает проверку контрольных сумм на уровне блоков для ускорения проверки целостности. Если этот ключ используется с командами
backup,restoreиvalidate, будут проверяться только контрольные суммы на уровне файлов. При выполнении командыcheckdbс параметром--amcheckключ--skip-block-validationполностью отключает проверку файлов данных.-jчисло_потоков--threads=число_потоковЗадаёт число параллельных потоков для процессов резервного копирования, восстановления и проверки резервных копий.
--progressВключает вывод прогресса выполнения операций.
Параметры резервного копирования
С командой backup могут задаваться следующие параметры.
-bрежим--backup-mode=режимВыбирает режим резервного копирования. Поддерживаются следующие режимы:
FULL— создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.DELTA— считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых со времени предыдущего копирования.PAGE— создаётся инкрементальная резервная копия с файлами WAL, которые были изменены со времени последней полной или инкрементальной копии.PTRACK— создаётся инкрементальная резервная копия со страницами, изменения в которых отслеживались на лету.
За подробностями обратитесь к Подразделу «Создание резервной копии».
-C--smooth-checkpointSMOOTH_CHECKPOINTРастягивает выполнение контрольной точки во времени. По умолчанию pg_probackup пытается произвести контрольную точку максимально быстро.
--streamСоздаёт автономную резервную копию, включающую все необходимые файлы WAL, которые передаёт сервер баз данных по протоколу репликации.
-Sимя_слота--slot=имя_слотаЗадаёт слот репликации для передачи WAL. Этот параметр можно указать только вместе с
--stream.--temp-slotСоздаёт временный слот физической репликации для передачи WAL с архивируемого экземпляра Postgres Pro. Это гарантирует, что все нужные сегменты WAL будут доступны в процессе создания резервной копии. Этот параметр может использоваться только вместе с параметром
--stream.--backup-pg-logВключает в резервную копию каталог
pg_log. Этот каталог обычно содержит журналы сообщений сервера. По умолчанию каталогpg_logв копию не включается.-Eпуть_внешних_каталогов--external-dirs=путь_внешних_каталоговВключает в создаваемую копию указанный каталог. Этот параметр полезен для архивирования файлов конфигурации, расположенных вне каталога данных. Если вы хотите архивировать несколько внешних каталогов, разделите их пути двоеточиями.
--archive-timeout=время_ожиданияЗадаёт таймаут для архивирования сегментов WAL (в секундах). По умолчанию pg_probackup ждёт архивирования 300 секунд.
--delete-expiredПосле того как резервная копия будет успешно создана, удаляет резервные копии, ставшие ненужными согласно текущей политике сохранения. Вы также можете удалить ненужные копии, запустив команду
deleteс параметромexpired. При использовании с ключомmerge-expiredданный параметр оказывает действие после завершения объединения. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».--merge-expiredПосле успешного создания резервной копии объединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики сохранения, с её родительскими копиями, срок хранения которых истёк.
--delete-walПосле того как резервная копия будет успешно создана, удаляет файлы WAL, ставшие ненужными согласно текущей политике сохранения. Вы также можете удалить ненужные файлы WAL, запустив команду
deleteс параметромwal. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».
Параметры восстановления
--recovery-target-action=pause|promote|shutdownЗадаёт действие, которое должен выполнить сервер по достижении цели восстановления, подобно параметру recovery_target_action в файле конфигурации
recovery.conf.По умолчанию:
pause-R | --restore-as-replicaЗаписать минимальный
recovery.confв выходной каталог для облегчения настройки ведомого сервера. Пароль в этом файле не сохраняется. Если пароль требуется для соединения репликации, его потребуется указать вручную.-TСТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ--tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГПеремещает табличное пространство из каталога
СТАРЫЙ_КАТАЛОГвНОВЫЙ_КАТАЛОГво время восстановления. ИСТАРЫЙ_КАТАЛОГ, иНОВЫЙ_КАТАЛОГдолжны задаваться абсолютными путями. Если путь содержит знак равно (=), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств.--external-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГПеремещает внешний каталог, включённый в резервную копию, из каталога
СТАРЫЙ_КАТАЛОГвНОВЫЙ_КАТАЛОГво время восстановления. ИСТАРЫЙ_КАТАЛОГ, иНОВЫЙ_КАТАЛОГдолжны задаваться абсолютными путями. Если путь содержит знак равно (=), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для нескольких каталогов.--skip-external-dirsПропускать внешние каталоги, включённые в резервную копию указанием
--external-dirs. Содержимое этих каталогов не будет восстановлено.--recovery-target-timeline=линия_времениВыбирает определённую линию времени для восстановления кластера. По умолчанию выбирается линия времени указанной резервной копии.
--no-validateПропускает проверку резервного копирования. Этот ключ может быть полезен, если вы регулярно проверяете копии и хотите сэкономить время на операциях копирования и восстановления данных.
Параметры точки восстановления
Если настроено непрерывное архивирование WAL, вы можете воспользоваться одним из этих параметров команд restore или validate, чтобы указать момент, до которого должен быть восстановлен кластер баз данных.
--recovery-target=immediate|latestОпределяет, когда остановить восстановление:
Со значением
immediateвосстановление завершается сразу после достижения согласованного состояния выбранной копии, либо последней копии из имеющихся, если параметр-iне указан.Со значением
latestвосстановление продолжается до тех пор, пока не будут применены все имеющиеся в архиве сегменты WAL.
--recovery-target-lsn=lsnУказывает последовательный номер в журнале предзаписи, до которого будет производиться восстановление.
--recovery-target-name=имя_цели_восстановленияУказывает именованную точку сохранения, вплоть до которой будут восстановлены данные кластера.
--recovery-target-time=времяУказывает точку времени, вплоть до которой будет производиться восстановление.
--recovery-target-xid=ид_транзакцииУказывает идентификатор транзакции, вплоть до которой будет производиться восстановление.
--recovery-target-inclusive=логическое_значениеУказывает на необходимость остановки сразу после (
true), либо до (false) достижения целевой точки. Этот параметр можно использовать только вместе с параметрамиrecovery-target-name,recovery-target-time,recovery-target-lsnиrecovery-target-xid. Значение по умолчанию берётся из переменной recovery_target_inclusive.
Параметры удаления
--walУдаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.
--expiredУдаляет резервные копии, не удовлетворяющие политике сохранения, определённой в файле конфигурации
pg_probackup.conf. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».--merge-expiredОбъединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики сохранения, с её родительскими копиями, срок хранения которых истёк.
--dry-runВыводит текущее состояние всех имеющихся резервных копий, но никакие операции, например, удаление или объединение старых копий, при этом не производятся.
Параметры сохранения
Подробнее о настройке политики сохранения рассказывается в Подразделе «Настройка политики сохранения резервных копий».
--retention-redundancy=избыточностьУказывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть положительным целым числом. Ноль отключает сохранение.
По умолчанию: 0
--retention-window=окноКоличество дней, в течение которого возможно восстановление. При нулевом значении окно восстановления отсутствует.
По умолчанию: 0
Параметры ведения журнала
--log-level-console=уровень_сообщенийУправляет уровнем сообщений, которые будут выводиться в журнал консоли. Допустимые уровни:
verbose,log,info,notice,warning,errorиoff. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. Вариантoffотключает вывод в журнал консоли.По умолчанию:
info--log-level-file=уровень_сообщенийУправляет уровнем сообщений, которые будут выводиться в файл журнала. Допустимые уровни:
verbose,log,info,notice,warning,errorиoff. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. Вариантoffотключает вывод в файл журнала.По умолчанию:
off--log-filename=файл_журналаОпределяет имена создаваемых файлов журналов. Имена файлов обрабатываются по шаблону strftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени, как описано в log_filename. Например, если задать шаблон
pg_probackup-%u.log, pg_probackup будет записывать журнал в отдельные файлы по дням недели, и символы%uв имени будут заменяться соответствующим десятичным номером:pg_probackup-1.logв понедельник,pg_probackup-2.logво вторник и т. д.Этот параметр действует, если включена запись в журнал (параметром
log-level-file).По умолчанию:
pg_probackup.log--error-log-filename=файл_журнала_событийОпределяет имена для файлов журналов ошибок. Имена файлов обрабатываются по шаблону strftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени, как описано в log_filename.
Если параметр
error-log-filenameне задан, pg_probackup выводит все сообщения об ошибках вstderr.По умолчанию:
none--log-directory=каталог_журналаОпределяет каталог, в котором будут создаваться файлы журналов. Вы должны задать в этом параметре абсолютный путь. Этот каталог создаётся только при необходимости, когда в журнал выводится первое сообщение.
По умолчанию:
$BACKUP_PATH/log/--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
Параметры подключения
-dимя_бд--dbname=имя_бдPGDATABASEЗадаёт имя базы данных для подключения. Это подключение используется только для управления процессом резервного копирования, так что вы можете подключиться к любой существующей базе. Если этот параметр не задаётся в командной строке, переменной окружения
PGDATABASEили в конфигурационном файлеpg_probackup.conf, pg_probackup принимает в качестве имени базы значение переменной окруженияPGUSERили имя текущего пользователя, если переменнаяPGUSERне задана.-hсервер--host=серверPGHOSTУказывает имя системы, в которой работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
По умолчанию: локальный сокет
-pпорт--port=портPGPORTУказывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения.
По умолчанию: 5432
-Uимя_пользователя--username=имя_пользователяPGUSERИмя пользователя для подключения.
-w--no-passwordНе выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл
.pgpass, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.-W--passwordЗапрашивать пароль.
Параметры сжатия
--compressВключает сжатие для файлов данных. Вы можете выбрать алгоритм и уровень сжатия, воспользовавшись ключами
--compress-algorithmи--compress-level, соответственно. Если присутствует только ключ--compress, применяется алгоритм сжатияzlibс уровнем сжатия 1.По умолчанию сжатие отключено.
--compress-algorithm=алгоритм_сжатияОпределяет алгоритм, который будет использоваться для сжатия файлов данных. Возможные значения:
zlib,pglzиnone. При выбореzlibилиpglzданный параметр включает сжатие, вне зависимости от присутствия ключа--compress. По умолчанию сжатие отключено.Для команды
archive-pushалгоритм сжатияpglzне поддерживается.--compress-level=уровень_сжатияОпределяет уровень сжатия (от 0 до 9, где 0 обозначает отсутствие сжатия, а 9 — наилучшее). Этот параметр может использоваться только вместе с
--compressили--compress-algorithm.По умолчанию: 1
Репликационные параметры
В этом разделе описываются параметры, относящиеся к резервному копированию с ведомого сервера.
Примечание
Начиная с версии pg_probackup 2.0.24, резервное копирование возможно напрямую с ведомого сервера, без подключения к ведущему, так что эти параметры более не требуются. В предыдущих версиях программа pg_probackup должна была подключаться к ведущему, чтобы определить время восстановления — самый ранний момент, на который можно восстановить согласованное состояние кластера баз данных.
--master-db=имя_бдУстаревший параметр. Указывает имя базы данных на ведущем сервере, к которой нужно подключиться. Это подключение будет использоваться только для управления процессом копирования, так что вы можете подключиться к любой существующей базе данных. Это имя может быть задано в
pg_probackup.confс помощью командыset-config. Если оно не указано, подразумеваетсяpostgres, база данных по умолчанию в Postgres Pro.--master-host=серверУстаревший параметр. Указывает имя компьютера, на котором работает ведущий сервер.
--master-port=портУстаревший параметр. Указывает TCP-порт или расширение файла Unix-сокета, через который сервер принимает подключения. Если не указано, подразумевается
5432, порт по умолчанию в Postgres Pro.--master-user=имя_пользователяУстаревший параметр. Имя пользователя для подключения. Если не задано, подразумевается
postgres, имя пользователя по умолчанию в Postgres Pro.--replica-timeout=тайм-аутУстаревший параметр. Время ожидания передачи сегментов WAL средствами репликации (в секундах). По умолчанию pg_probackup ожидает 300 секунд. Вы также можете определить этот параметр в файле конфигурации
pg_probackup.confс помощью командыset-config.
Параметры архивации
--wal-file-path=путь_файла_wal%pЗадаёт путь файла WAL для
archive_commandиrestore_command, используемых в pg_probackup. Переменная%pтребуется для правильной обработки.--wal-file-name=имя_файла_wal%fЗадаёт имя файла WAL для
archive_commandиrestore_command, используемых в pg_probackup. Переменная%fтребуется для правильной обработки.--overwriteПерезаписать заархивированный файл WAL. Этот ключ можно использовать с командой
archive-push, если указанный подкаталог каталога резервных копий уже содержит данный файл WAL, и его нужно заменить новой копией. Без этого ключаarchive-pushсообщит, что сегмент WAL уже существует, и прервёт операцию. Если заменяемый файл не изменился,archive-pushпропускает его, независимо от ключа--overwrite.
Параметры checkdb
--amcheckПроизводит логическую проверку индексов для указанного экземпляра Postgres Pro, если не были выявлены ошибки при проверке данных. По желанию вы можете пропустить проверку файлов данных, добавив параметр
--skip-block-validation. Для проверки индексов в базе данных должно быть установлено расширение amcheck. В базах данных, где amcheck отсутствует, индексы проверяться не будут.--heapallindexedПроверяет, отражены ли в индексы все кортежи кучи, которые должны быть проиндексированы. Этот параметр можно использовать вместе с параметром
--amcheck, начиная с Postgres Pro 11.
Параметры удалённого сервера
В этом разделе описываются параметры, связанные с удалённым выполнением операций резервного копирования и восстановления по SSH. Эти параметры могут использоваться с командами add-instance, set-config, backup, restore, archive-push и archive-get.
--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.
Использование
Создание резервной копии
Чтобы создать резервную копию, выполните следующую команду:
pg_probackup backup -Bкаталог_копий--instanceимя_экземпляра-bрежим_копирования
Здесь режим_копирования может быть следующим:
FULL— создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.DELTA— считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых со времени предыдущего копирования.PAGE— создаётся инкрементальная резервная копия с файлами WAL, которые были изменены со времени последней полной или инкрементальной копии.PTRACK— создаётся инкрементальная резервная копия со страницами, изменения в которых отслеживались на лету.
При восстановлении кластера из инкрементальной копии pg_probackup сначала использует предыдущую полную копию для восстановления всех файлов данных. Таким образом, прежде чем делать инкрементальные копии, необходимо сделать как минимум одну полную.
Если вы настроили резервное копирование PTRACK, pg_probackup будет очищать карту PTRACK обрабатываемого отношения при каждом выполнении полного или инкрементального резервного копирования. Таким образом, в следующую инкрементальную копию PTRACK войдут только страницы, изменённые со времени предыдущей копии. Если при резервном копировании произойдёт ошибка или оно будет прервано, для некоторых отношений карты PTRACK могут оказаться очищенными, так что следующая инкрементальная копия будет неполной. Это справедливо и тогда, когда на время выключается режим ptrack_enable. В этом случае вы должны сделать полную резервную копию, прежде чем пытаться сделать следующую инкрементальную копию PTRACK.
Чтобы сделать резервную копию автономной, добавьте к предыдущей команде параметр --stream. Например, чтобы создать полную автономную копию, выполните:
pg_probackup backup -Bкаталог_копий--instanceимя_экземпляра-b FULL --stream --temp-slot
Необязательный параметр --temp-slot обеспечивает наличие необходимых сегментов в случае прокрутки WAL до завершения резервного копирования.
Автономные резервные копии включают все сегменты WAL, необходимые для приведения кластера в согласованное состояние на момент создания копии. Для восстановления кластера из инкрементальной автономной копии для pg_probackup в любом случае необходима полная копия и все инкрементальные копии, от которых зависит целевая.
Даже если вы используете непрерывное архивирование, автономное резервное копирование может быть полезно по следующим причинам:
Автономные копии могут быть восстановлены на сервере, не имеющем файлового доступа к архиву WAL.
Автономное резервное копирование позволяет восстановить состояние кластера на тот момент времени, для которого уже нет файлов WAL.
Чтобы заархивировать каталог, размещённый вне каталога данных, воспользуйтесь необязательным параметром --external-dirs, в котором можно задать путь к нужному каталогу. Если вы хотите заархивировать несколько внешних каталогов, разделите их пути двоеточиями. Например, чтобы включить каталоги /etc/dir1/ и /etc/dir2/ в полную копию вашего экземпляра node, которая будет сохранена в каталоге node_backup, выполните:
pg_probackup backup -B node_backup --instance node -b FULL --external-dirs=/etc/dir1:/etc/dir2
Для каждого внешнего каталога pg_probackup создаёт отдельный подкаталог в каталоге резервной копии. Так как внешние каталоги, попадающие в разные резервные копии, не обязательно должны быть одинаковыми, при восстановлении кластера из инкрементальной копии будут восстановлены только те каталоги, которые относятся именно к ней. Внешние каталоги, сохранённые в предыдущих копиях, восстановлены не будут. Чтобы включить те же каталоги в другую резервную копию вашего экземпляра, их можно добавить в файл конфигурации pg_probackup.conf командой set-config с ключом --external-dirs.
Проверка резервных копий
Когда в кластере база данных включены контрольные суммы, pg_probackup использует их для проверки целостности файлов данных. При чтении каждой страницы pg_probackup проверяет, совпадает ли вычисленная сумма с контрольной суммой, хранящийся в странице. Это гарантирует, что в резервной копии не окажется испорченных страниц. Заметьте, что pg_probackup читает файлы баз данных с диска, поэтому при активной записи на диск во время резервного копирования возможны ложные выявления некорректных контрольных сумм из-за частичной записи.
Даже когда контрольные суммы страниц отключены, pg_probackup вычисляет контрольные суммы для всех файлов резервной копии. Эти контрольные суммы проверяются непосредственно после создания резервной копии и перед восстановлением для выявления возможных повреждений резервных копий. Если вы хотите пропустить проверку, вы можете добавить ключ --no-validate при выполнении команд backup и restore.
Чтобы убедиться, что все необходимые файлы резервных копий имеются в наличии и что, используя их, можно восстановить кластер баз данных, вы можете выполнить команду validate с именно теми параметрами точки восстановления, с которыми вы будете производить восстановление. При выполнении этой команды без параметров будут проверены все имеющиеся копии.
Например, чтобы убедиться, что вы можете восстановить кластер баз данных из резервной копии до транзакции с указанным xid, выполните команду:
pg_probackup validate -Bкаталог_копий--instanceимя_экземпляра--recovery-target-xid=ид_транзакции
Если проверка проходит успешно, pg_probackup выдаёт сообщение об этом. В случае же неудачи вы получите сообщение об ошибке с указанием точного времени и идентификатора транзакции, до которой возможно восстановление.
Восстановление кластера
Чтобы восстановить кластер баз данных из резервной копии, выполните команду restore как минимум со следующими параметрами:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Здесь:
каталог_копий— каталог, в котором хранятся все файлы резервных копий и метаданные.имя_экземпляра— имя экземпляра резервной копии кластера, которая будет восстановлена.ид_резервной_копииопределяет, из какой резервной копии будет восстановлен кластер. Если этот параметр опускается, pg_probackup использует последнюю копию для заданного экземпляра. Если вы выбираете для восстановления инкрементальную копию, pg_probackup автоматически восстанавливает нижележащую полную копию и затем последовательно применяет все необходимые добавления.
Если кластер, подлежащий восстановлению, содержит табличные пространства, pg_probackup по умолчанию восстанавливает их в исходные расположения. Чтобы сменить расположения табличных пространств, воспользуйтесь параметром --tablespace-mapping. В противном случае при восстановлении кластера на том же сервере произойдёт ошибка, если эти табличные пространства будут использоваться, так как восстанавливаемые данные нужно будет записать в те же каталоги.
Используя параметр --tablespace-mapping, вы должны задать абсолютные пути к старому и новому каталогу табличного пространства. Если путь содержит знак равно (=), экранируйте его обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств. Например:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра-Dкаталог_данных-j 4 -iид_резервной_копии-Tкаталог_табл_пространства1=новый_каталог_табл_пространства1-Tкаталог_табл_пространства2=новый_каталог_табл_пространства2
Когда команда restore окончит работу, запустите сервер баз данных. Если восстанавливалась автономная копия, восстановление завершается сразу, и кластер возвращается в согласованное состояние на момент времени, в который была сделана резервная копия. Для копий с непрерывным архивом Postgres Pro воспроизводит все заархивированные сегменты WAL, в результате чего восстанавливается самое последнее состояние кластера. Это поведение можно изменить, воспользовавшись параметром recovery_target команды restore. Заметьте, что вариант recovery-target=latest может использоваться с автономными копиями, только если в доступном архиве WAL находятся сегменты, захватывающие момент создания автономной резервной копии.
Примечание
По умолчанию команда restore проверяет указанную резервную копию перед восстановлением кластера. Если вы проводите проверку копий регулярно и хотели бы сэкономить время при восстановлении кластера, вы можете добавить параметр --no-validate для пропуска проверки и ускорения восстановления.
Выполнение восстановления на момент времени (PITR)
Если вы настраивали непрерывное архивирование WAL до создания резервных копий, вы можете восстановить состояние кластера на любой момент времени (recovery target), используя с командой restore параметры точки восстановления вместо показанного выше параметра -i. Программа pg_probackup автоматически выбирает копию, ближайшую к заданной точке восстановления, и запускает процесс восстановления.
Чтобы восстановить состояние кластера на определённое время, укажите это время в параметре recovery-target-time, в формате timestamp. Например:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра--recovery-target-time='2017-05-18 14:18:11'
Чтобы восстановить состояние кластера до определённой транзакции, воспользуйтесь ключом 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_inclusive определяет, будет ли точка восстановления включаться в достигаемое при восстановлении состояние. Вы можете явно включить или исключить точку восстановления, добавив к показанным выше командам параметр --recovery-target-inclusive со значением on или off, соответственно.
Использование pg_probackup с удалённым сервером
Программа pg_probackup позволяет выполнять операции резервного копирования и восстановления удалённо по SSH. В режиме удалённого сервера каталог резервных копий находится в локальной системе, а целевой экземпляр Postgres Pro работает на удалённом компьютере. При этом pg_probackup должен быть установлен в обоих системах.
Типичная схема его использования выглядит так:
Настройте pg_probackup в локальной системе, как описывается в Разделе «Установка и подготовка». Для команд
add-instanceиset-configнеобходимо задать параметры удалённого сервера, указывающие на сервер с экземпляром Postgres Pro.Если вы хотите выполнять архивное резервное копирование, настройте непрерывное архивирование WAL на удалённой системе, как описано в Подразделе «Настройка архивного резервного копирования». Для команд
archive-pushиarchive-getвы должны указать параметры удалённого сервера, указывающие на вашу локальную систему.Запустите команду
backupилиrestoreс параметрами удалённого сервера в вашей локальной системе. Программа pg_probackup подключится к удалённой системе по SSH и соответственно создаст резервную копию в локальной системе или восстановит ранее сделанную копию на удалённой системе.
Примечание
Использование удалённого сервера на платформе Windows в настоящее время не поддерживается.
Запуск pg_probackup в параллельных потоках
Процессы резервного копирования, восстановления и проверки могут выполняться в несколько параллельных потоков. Это может существенно ускорять работу pg_probackup при наличии достаточных ресурсов (ядер процессора, пропускной способности дисковой подсистемы и сети).
Параллельным выполнением управляет ключ командной строки -j/--threads. Например, запустить резервное копирование в четыре параллельных потока можно, выполнив:
pg_probackup backup -Bкаталог_копий--instanceимя_экземпляра-b FULL -j 4
Примечание
Восстановление происходит в параллельном режиме только на этапе копирования данных из каталога копий в каталог данных кластера. При запуске сервера Postgres Pro он должен будет воспроизвести записи из WAL, а это может происходить только последовательно.
Настройка pg_probackup
Проинициализировав каталог резервных копий и определив копируемый экземпляр, вы можете использовать файл pg_probackup.conf в каталоге backups/ для тонкой настройки конфигурации pg_probackup.имя_экземпляра
Изначально 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, можно переопределить при выполнении команды backup.
Указание параметров подключения
Если вы определите свойства соединения в файле конфигурации pg_probackup.conf, вы можете не указывать параметры соединения во всех последующих командах pg_probackup. Однако, если установлены соответствующие переменные окружения, они имеют больший приоритет. Параметры, заданные в командной строке, переопределяют как переменные окружения, так и свойства в файле конфигурации.
Если не задано ничего, используются значения по умолчанию. pg_probackup пытается подключиться к локальному серверу, а в качестве имени базы данных и имени пользователя выбирает значение переменной окружения PGUSER, либо имя текущего пользователя ОС.
Настройка политики сохранения резервных копий
По умолчанию все резервные копии, которые создаёт pg_probackup, сохраняются в предназначенном для них каталоге. Для экономии дискового пространства вы можете настроить политику сохранения копий и в соответствии с ней периодически удалять ненужные резервные копии.
Чтобы настроить эту политику, задайте одну или несколько следующих переменных в файле pg_probackup.conf:
retention-redundancy— определяет, сколько полных резервных копий будет сохраняться в каталоге данных.retention-window— определяет самый ранний момент времени, на который pg_probackup может выполнить восстановление. Этот параметр задаётся в числе дней от текущего момента. Например, еслиretention-window=7, программа pg_probackup должна сохранять минимум одну полную резервную копию старее семи дней со всеми соответствующими файлами WAL.
Если установлены параметры retention-redundancy и retention-window, pg_probackup оставляет только те резервные копии, которые удовлетворяют обоим условиям. Например, если задать параметры retention-redundancy=2 и retention-window=7, pg_probackup очищает каталог копий, чтобы в нём оставалось только две полных резервных копии, если минимум одна из них старее семи дней.
Чтобы очистить каталог резервных копий в соответствии с политикой их сохранения, запустите:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--expired
pg_probackup удалит все резервные копии, не удовлетворяющие установленной политике сохранения.
Если вы хотите также удалить файлы WAL, которые больше не требуются ни для каких копий, добавьте ключ --wal:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--expired --wal
Вы также можете удалить старые резервные копии после создания новой, передав ключи --delete-expired и --delete-wal с командой backup.
Так как для инкрементальных копий требуется наличие всех родительских полных копий и всех предыдущих инкрементальных копий, даже по истечении срока их хранения эти копии нельзя удалить, пока минимум одна инкрементальная копия в цепочке удовлетворяет политике сохранения. Чтобы не хранить устаревшие копии, которые всё ещё нужны для восстановления нужной инкрементальной копии, вы можете объединить их с ней, выполнив команду backup или delete с ключом --merge-expired.
Предположим, что вы заархивировали экземпляр node в каталог node-backup со значением retention-window (окно сохранения), равным 7, и на 10 апреля 2019 г. у вас есть следующие копии:
BACKUP INSTANCE 'node' =========================================================================================================================================== Instance Version ID Recovery time Mode WAL Current/Parent TLI Time Data Start LSN Stop LSN Status =========================================================================================================================================== node 10 P7XDHR 2019-04-10 05:27:15+03 FULL STREAM 1 / 0 11s 200MB 0/18000059 0/18000197 OK node 10 P7XDQV 2019-04-08 05:32:59+03 DELTA STREAM 1 / 0 11s 19MB 0/15000060 0/15000198 OK node 10 P7XDJA 2019-04-03 05:28:36+03 PTRACK STREAM 1 / 0 21s 32MB 0/13000028 0/13000198 OK node 10 P7XDHU 2019-04-02 05:27:59+03 PTRACK STREAM 1 / 0 31s 33MB 0/11000028 0/110001D0 OK node 10 P7XDHB 2019-04-01 05:27:15+03 FULL STREAM 1 / 0 11s 200MB 0/F000028 0/F000198 OK node 10 P7XDFT 2019-03-29 05:26:25+03 FULL STREAM 1 / 0 11s 200MB 0/D000028 0/D000198 OK
Несмотря на то, что копии P7XDHB и P7XDHU выходят за рамки окна сохранения, их нельзя удалить, так как это приведёт к потере последующих инкрементальных копий P7XDHU и P7XDQV, которые всё ещё нужны. Поэтому, если вы выполните команду delete с ключом --expired, будет удалена только полная копия P7XDFT. Однако с ключом --merge-expired копия P7XDJA будет объединена с базовыми для неё копиями P7XDHB и P7XDHU и станет полной, в результате чего эти старые копии окажутся ненужными:
pg_probackup delete -B node-backup --instance node --expired --merge-expired pg_probackup show -B node-backup BACKUP INSTANCE 'node' ============================================================================================================================================ Instance Version ID Recovery time Mode WAL Current/Parent TLI Time Data Start LSN Stop LSN Status ============================================================================================================================================ node 10 P7XDHR 2019-04-10 05:27:15+03 FULL STREAM 1 / 0 11s 200MB 0/18000059 0/18000197 OK node 10 P7XDQV 2019-04-08 05:32:59+03 DELTA STREAM 1 / 0 11s 19MB 0/15000060 0/15000198 OK node 10 P7XDJA 2019-04-04 05:28:36+03 FULL STREAM 1 / 0 5s 200MB 0/13000028 0/13000198 OK
Заметьте, что поле Time (Время) для объединённой копии показывает время, которое заняла процедура объединения.
Управление каталогом резервных копий
С помощью pg_probackup вы можете управлять резервными копиями в командной строке:
Просмотр информации о резервных копиях
Чтобы просмотреть список существующих копий, выполните команду:
pg_probackup show -B каталог_копийpg_probackup выводит список всех имеющихся резервных копий. Например:
BACKUP INSTANCE 'node' ============================================================================================================================================ Instance Version ID Recovery time Mode WAL Current/Parent TLI Time Data Start LSN Stop LSN Status ============================================================================================================================================ node 10 P7XDQV 2018-04-29 05:32:59+03 DELTA STREAM 1 / 0 11s 19MB 0/15000060 0/15000198 OK node 10 P7XDJA 2018-04-29 05:28:36+03 PTRACK STREAM 1 / 0 21s 32MB 0/13000028 0/13000198 OK node 10 P7XDHU 2018-04-29 05:27:59+03 PTRACK STREAM 1 / 0 31s 33MB 0/11000028 0/110001D0 OK node 10 P7XDHB 2018-04-29 05:27:15+03 FULL STREAM 1 / 0 11s 39MB 0/F000028 0/F000198 OK node 10 P7XDFT 2018-04-29 05:26:25+03 PTRACK STREAM 1 / 0 11s 40MB 0/D000028 0/D000198 OK
Для каждой копии выдаются следующие сведения:
Instance — имя экземпляра.
Version — версия Postgres Pro.
ID — идентификатор резервной копии.
Recovery time — самое ранее время, на которое можно восстановить кластер из данной копии.
Mode — режим, в котором была сделана копия. Возможные значения:
FULL,PAGE,DELTA,PTRACK.WAL — вариант обработки журнала WAL. Возможные значения:
STREAM(для автономных копий) иARCHIVE(для архивных копий).Current/Parent TLI — текущая и родительская линии времени кластера.
Time — время, за которое была выполнена данная копия.
Data — объём файлов данных в этой копии. Это значение не включает в себя объём файлов WAL.
Start LSN — последовательный номер в журнале WAL, соответствующий началу процесса копирования.
Stop LSN — последовательный номер в журнале WAL, соответствующий окончанию процесса копирования.
Status — состояние резервной копии. Возможные значения:
OK— резервная копия сделана и пригодна к использованию.CORRUPT— некоторые файлы резервной копии повреждены.DONE— резервная копия сделана, но не проверена.ERROR— резервное копирование было прервано из-за неожиданной ошибки.RUNNING— резервное копирование выполняется.MERGING— резервная копия объединяется.ORPHAN— резервная копия непригодна к использованию, так как её родительская копия испорчена.DELETING— файлы резервной копии удаляются.
Восстановить кластер из копии можно только для копий с состоянием
OK.
Чтобы получить более подробную информацию о копии, укажите в команде show её идентификатор:
pg_probackup show -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Пример вывода:
#Configuration backup-mode = FULL stream = false #Compatibility block-size = 8192 xlog-block-size = 8192 checksum-version = 0 #Result backup info timelineid = 1 start-lsn = 0/04000028 stop-lsn = 0/040000f8 start-time = '2017-05-16 12:57:29' end-time = '2017-05-16 12:57:31' recovery-xid = 597 recovery-time = '2017-05-16 12:57:31' data-bytes = 22288792 status = OK
Объединение резервных копий
По мере того, как вы будете делать новые и новые инкрементальные копии, общий размер каталога резервных копий может существенно увеличиться. Для экономии места на диске вы можете объединить инкрементальные копии с родительской полной копией, выполнив команду merge и передав ей идентификатор копии самой последней резервной копии, подлежащей объединению:
pg_probackup merge -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Эта команда объединяет указанную инкрементальную резервную копию с её родительской полной копией и всеми инкрементальными копиями между ними. После завершения объединения эти инкрементальные копии удаляются как избыточные. Таким образом, операция объединения практически равносильна созданию новой полной копии и удалению всех ставших неактуальными копий, но позволяет сэкономить много времени, особенно при больших объёмах данных.
Перед объединением pg_probackup проверяет все задействуемые резервные копии, чтобы удостовериться в их целостности. Вы можете проверить текущее состояние резервной копии, выполнив команду show с идентификатором этой копии. В процессе объединения резервная копия будет иметь состояние MERGING. Если объединение прерывается, вы можете перезапустить его.
Удаление резервных копий
Для удаления резервной копии, ставшей ненужной, выполните команду:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Эта команда удалит резервную копию с заданным ид_резервной_копии вместе со всеми инкрементальными копиями, следующими за ней (если таковые найдутся). Таким образом вы можете удалить некоторые последние инкрементальные копии, сохранив предыдущую полную копию и некоторые следующие за ней инкрементальные копии.
Примечание
В этом случае следующая резервная копия в режиме PTRACK окажется неполной, так как не будет содержать часть изменений с момента создания последней оставшейся копии. Поэтому в таких случаях необходимо создать либо полную резервную копию, либо инкрементальную в режиме PAGE (если все необходимые файлы WAL сохранились в архиве).
Для удаления старых файлов WAL, которые не нужны для восстановления никаких из оставшихся резервных копий, воспользуйтесь ключом --wal:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--wal
Чтобы удалить резервные копии, считающиеся ненужными согласно текущей политике сохранения, воспользуйтесь ключом --expired:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--expired
Заметьте, что копии с истёкшим сроком нельзя удалить, пока на них базируется минимум одна инкрементальная копия, удовлетворяющая политике сохранения. Если вы хотите сократить число резервных копий, требующихся для восстановления инкрементальных копий, укажите параметр --merge-expired при выполнении этой команды:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--expired --merge-expired
В этом случае pg_probackup ищет самую старую инкрементальную копию, удовлетворяющую политике сохранения и объединяет её с базовыми для неё полной и инкрементальными копиями, срок хранения которых истёк, тем самым превращая её в полную копию. После завершения объединения освободившиеся старые копии удаляются.
Прежде чем объединять или удалять резервные копии, вы можете выполнить команду delete с параметром dry-run и получить в результате состояние всех имеющихся копий в соответствии с текущей политикой сохранения; никакие необратимые действия при этом выполняться не будут.
Авторы
Postgres Professional, Москва, Россия.
Благодарности
Программа pg_probackup основана на pg_arman, которая изначально была написана в NTT, а затем её развивал и поддерживал Микаэль Пакье.

