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 имя_экземпляра
pg_probackup backup -B каталог_копий --instance имя_экземпляра -b режим_копирования [параметр...]
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 version
pg_probackup help [команда]
Описание
Содержание
pg_probackup — это утилита для управления резервным копированием и восстановлением кластеров баз данных Postgres Pro. Она предназначена для регулярного создания резервных копий экземпляра Postgres Pro, позволяющих восстанавливать сервер в случае необходимости. pg_probackup поддерживает Postgres Pro версии 9.5 и новее.
По сравнению с другими средствами резервного копирования pg_probackup имеет следующие преимущества, полезные для реализации различных стратегий резервного копирования и работы с базами данных большого объёма:
Выбор между полным резервным копированием и инкрементальным, на уровне страниц, позволяющим ускорить процесс копирования и восстановления
Реализация единой стратегии резервного копирования для кластеров Postgres Pro с несколькими серверами
Автоматический контроль целостности данных и проверка резервных копий без восстановления данных кластера
Управление резервными копиями в соответствии с политикой их сохранения
Выполнение резервного копирования, восстановления и проверки в параллельных потоках
Хранение копируемых данных в сжатом состоянии для экономии дискового пространства
Снятие резервной копии с ведомого сервера с целью избежать дополнительной нагрузки на ведущий сервер
Расширенные параметры ведения журнала
Дополнительные команды для упрощения архивации журнала WAL
Для управления резервными копиями pg_probackup создаёт каталог резервных копий. В этом каталоге сохраняются все файлы резервных копий с дополнительной метаинформацией, а также архивы WAL, необходимые для восстановления на момент времени. Вы можете хранить резервные копии разных экземпляров в отдельных подкаталогах одного каталога копий.
Используя pg_probackup, вы можете выполнять полное или инкрементальное резервное копирование:
Полные резервные копии содержат все файлы данных, необходимые для восстановления кластера баз данных с нуля.
Инкрементальные резервные копии сохраняют только те данные, которые изменились со времени последнего копирования. Это позволяет уменьшить размер резервной копии и ускорить операции копирования данных. pg_probackup поддерживает следующие режимы инкрементального копирования:
Режим
PAGE. В этом режиме pg_probackup сканирует все файлы WAL в архиве с момента создания предыдущей полной или инкрементальной копии. Новая резервная копия будет содержать только страницы, фигурирующие в записях WAL. При этом необходимо, чтобы в архиве WAL сохранялись все файлы WAL, записанные после предыдущей копии. Если размер этих файлов сравним с общим размером файлов базы данных, ускорение будет менее значительным, но размер копии будет всё же меньше.Режим
PTRACK. В этом режиме Postgres Pro отслеживает изменения страниц на лету. Чтобы он работал, не требуется производить непрерывное архивирование WAL. При каждом изменении страницы отношения она помечается в специальной картеPTRACKэтого отношения. Так как для одной страницы в слоеPTRACKтребуется всего один бит, такие карты довольно малы. Это отслеживание привносит небольшие издержки в работу сервера, но значительно ускоряет инкрементальное резервное копирование.
Вне зависимости от выбранного типа резервного копирования pg_probackup поддерживает следующие стратегии архивирования:
Автономные резервные копии включают все файлы, необходимые для восстановления согласованного состояния кластера на момент создания копии. Даже если непрерывное архивирование не производится, в эту копию включаются только необходимые сегменты WAL.
Архивные резервные копии основаны на непрерывном архивировании. Такие копии позволяют восстановить кластер на произвольный момент времени после момента создания копии (производить восстановление на момент времени).
См. также
Ограничения
В настоящее время pg_probackup имеет следующие ограничения:
Создание копий с удалённого сервера в настоящее время не поддерживается.
На сервере, где была сделана копия, и на сервере, где она будет восстанавливаться, должны быть одинаковые значения параметров block_size и wal_block_size и одинаковая основная версия.
Операционная система Microsoft Windows не поддерживается.
Конфигурационные файлы, расположенные вне каталога данных Postgres Pro, не попадают в резервную копию и должны копироваться отдельно.
Установка и подготовка
Пакет 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имя_экземпляра
где:
каталог_данных— каталог, содержащий данные кластера, копию которого вы хотите сделать. Для подготовки и использования pg_probackup необходимо иметь право записи в этот каталог.имя_экземпляра— это имя подкаталогов, в которых будут храниться файлы копируемых данных и WAL для этого кластера.
pg_probackup создаёт подкаталоги имя_экземпляра в каталогах backups/ и wal/ каталога резервных копий. Каталог backups/ содержит файл конфигурации имя_экземпляра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_wal() 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;
В зависимости от того, будете ли вы применять автономное или архивное резервное копирование, конфигурация кластера 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или выше.
Настройка архивного резервного копирования
Чтобы настроить кластер для архивного резервного копирования, выполните следующие действия:
Настройте следующие параметры в
postgresql.confдля включения постоянного архивирования на сервере Postgres Pro:Убедитесь, что в параметре
wal_levelустановлен уровеньreplicaили выше.Установите для
archive_modeзначениеon.Задайте в переменной
archive_command:archive_command = 'pg_probackup archive-push -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f'Параметры
каталог_данныхиимя_экземплярадолжны указывать на уже проинициализированный экземпляр для этого кластера баз данных.
Копирование данных с ведомого сервера
С 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имя_экземпляраИнициализирует новый копируемый экземпляр в каталоге
каталог_копийи создаёт файл конфигурацииpg_probackup.conf, управляющий параметрами копирования и восстановления для кластера, использующего указанныйкаталог_данных. За подробностями обратитесь к Подразделу «Определение копируемого экземпляра».del-instanceСинтаксис:
pg_probackup del-instance -B
каталог_копий--instanceимя_экземпляраУдаляет все файлы скопированных данных и WAL, связанные с указанным экземпляром.
set-configСинтаксис:
pg_probackup set-config -B
каталог_копий--instanceимя_экземпляра[--log-level=уровень_сообщений] [--log-filename=файл_журнала] [--error-log-filename=файл_журнала_ошибок] [--log-directory=каталог_журнала] [--log-rotation-size=размер_журнала_для_ротации] [--log-rotation-age=возраст_журнала_для_ротации] [-dимя_базы] [-hсервер] [-pпорт] [-Uимя_пользователя] [--master-db=имя_базы] [--master-host=сервер] [--master-port=порт] [--master-user=имя_пользователя] [--retention-redundancy=избыточность][--retention-window=окно] [--replica-timeout=тайм-аут]Добавляет заданные параметры соединения, сохранения, ведения журнала и подключения к реплике в конфигурационный файл
pg_probackup.confлибо изменяет ранее определённые значения.show-configСинтаксис:
pg_probackup show-config -B
каталог_копий--instanceимя_экземпляраВыводит содержимое файла
pg_probackup.conf, размещённого в каталоге. Для изменения параметров вкаталог_копий/backups/имя_экземпляраpg_probackup.confвоспользуйтесь командойset-config. Непосредственно редактироватьpg_probackup.confнельзя.backupСинтаксис:
pg_probackup backup -B
каталог_копий-bрежим_копирования--instanceимя_экземпляра[-C] [--stream [-Sимя_слота]] [--backup-pg-log] [-archive-timeout=тайм-аут] [--delete-expired] [-dимя_базы] [-hсервер] [-pпорт] [-Uимя_пользователя] [-w] [--master-db=имя_базы] [--master-host=сервер] [--master-port=порт] [--master-user=имя_пользователя] [-jчисло_потоков][--progress] [-q] [-v]Создаёт резервную копию экземпляра Postgres Pro. Какой именно режим копирования будет использоваться, устанавливает параметр
режим_копирования. За подробностями обратитесь к Подразделу «Создание резервной копии».restoreСинтаксис:
pg_probackup restore -B
каталог_копий--instanceinstance_name[-Dимя_экземпляра] [ -iид_резервной_копии| [{--time=время| --xid=ид_транзакции} [--inclusive=логическое_значение]]][--timeline=линия_времени] [-TСТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ] [-jчисло_потоков] [--progress] [-q] [-v]Восстанавливает экземпляр Postgres Pro из резервной копии, расположенной в каталоге
каталог_копий. Если вы укажете параметр точки восстановления, pg_probackup восстановит кластер до заданной точки. В противном случае будет восстановлена самая последняя копия.validateСинтаксис:
pg_probackup validate -B
каталог_копий[--instanceимя_экземпляра[ -iид_резервной_копии| [{--time=время| --xid=ид_транзакции} [--inclusive=логическое_значение]]]] [--timeline=линия_времени] [-jчисло_потоков] [--progress] [-q] [-v]Проверяет наличие и целостность всех файлов, необходимых для восстановления кластера. Если вы зададите
имя_экземплярабез дополнительных параметров, pg_probackup проверит самую последнюю копию, которая имеется для этого экземпляра. Если вы зададитеимя_экземплярас параметром точки восстановления илиид_резервной_копии, pg_probackup проверит, возможно ли восстановить кластер с этими параметрами. Еслиимя_экземпляране задано, pg_probackup проверяет все резервные копии, имеющиеся в каталоге копий.showСинтаксис:
pg_probackup show -B
каталог_копий[--instanceимя_экземпляра[-iид_резервной_копии]]Показывает содержимое каталога копий. Если указывается
имя_экземпляраиид_резервной_копии, также выводится подробная информация об этой копии.deleteСинтаксис:
pg_probackup delete -B
каталог_копий--instanceимя_экземпляра{-iид_резервной_копии| --wal | --expired}Удаляет файлы скопированных данных или WAL для указанного экземпляра копии из каталога
каталог_копий:При указании ключа
-iудаляется только заданная резервная копия.С параметром
walудаляются файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.С параметром
expiredудаляются резервные копии, которые считаются ненужными согласно текущей политике сохранения копий.
archive-pushСинтаксис:
pg_probackup archive-push -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f'Сохраняет файлы WAL в соответствующем подкаталоге каталога копий. Эту команду можно использовать в качестве
archive_commandвpostgresql.confдля выполнения архивного копирования. Помимо копирования файлов, эта команда также проверяет экземпляр по имениимя_экземпляра,system-identifierиPGDATA. Если параметры копируемого экземпляра не соответствуют параметрам кластера, выдаётся следующее сообщение об ошибке: «Refuse to push WAL segmentsegment_nameinto archive. Instance parameters mismatch.» Для каждого файла WAL, перемещаемого в каталог копий, вы увидите такое сообщение в журнале Postgres Pro: «pg_probackup archive-push completed successfully».archive-getСинтаксис:
pg_probackup archive-get -B
каталог_копий--instanceимя_экземпляра--wal-file-path %p --wal-file-name %f'Перемещает файлы WAL из соответствующего подкаталога каталога резервной копии в каталог журнала предзаписи кластера. Эта команда автоматически устанавливается программой pg_probackup в качестве
archive_commandвrecovery.confпри восстановлении архивных копий. Устанавливать её вручную не нужно.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=ид_резервной_копииЗадаёт уникальный идентификатор резервной копии.
-jчисло_потоков--threads=число_потоковЗадаёт число параллельных потоков для процессов резервного копирования, восстановления и проверки резервных копий.
--progressВключает вывод прогресса выполнения операций.
-q--quietВключает режим подавления сообщений о текущем процессе.
-v--verboseВключает вывод подробной информации о текущем процессе.
Параметры резервного копирования
С командой backup могут задаваться следующие параметры.
-bрежим--backup-mode=режимВыбирает режим резервного копирования. Поддерживаются следующие режимы:
FULL— создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.PAGE— создаётся инкрементальная резервная копия с файлами WAL, которые были изменены со времени последней полной или инкрементальной копии.PTRACK— создаётся инкрементальная резервная копия со страницами, изменения в которых отслеживались на лету.
За подробностями обратитесь к Подразделу «Создание резервной копии».
-C--smooth-checkpointSMOOTH_CHECKPOINTРастягивает выполнение контрольной точки во времени. По умолчанию pg_probackup пытается произвести контрольную точку максимально быстро.
--streamСоздаёт автономную резервную копию, включающую все необходимые файлы WAL, которые передаёт сервер баз данных по протоколу репликации.
-Sимя_слота--slot=имя_слотаЗадаёт слот репликации для передачи WAL. Этот параметр можно указать только вместе с
--stream.--backup-pg-logВключает в резервную копию каталог
pg_log. Этот каталог обычно содержит журналы сообщений сервера. По умолчанию каталогpg_logв копию не включается.--archive-timeout=время_ожиданияЗадаёт таймаут для архивирования сегментов WAL (в секундах). По умолчанию pg_probackup ждёт архивирования 300 секунд.
--delete-expiredПосле того, как резервная копия будет успешно создана, удаляет резервные копии, ставшие ненужными согласно текущей политике сохранения. Вы также можете удалить ненужные копии, запустив команду
deleteс параметромexpired. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».
Параметры точки восстановления
Если настроена стратегия архивного копирования, эти параметры можно использовать с командами restore и validate для указания момента, на который требуется восстановить кластер баз данных.
--time=времяУказывает точку времени, вплоть до которой будет производиться восстановление. Этот параметр нельзя использовать вместе с
xid.--xid=ид_транзакцииУказывает идентификатор транзакции, вплоть до которой будет производиться восстановление. Этот параметр нельзя использовать вместе с
time.--inclusive=логическое_значениеУказывает на необходимость остановки сразу после (
true), либо до (false) достижения целевой точки. Значение по умолчанию берётся из переменной recovery_target_inclusive.--timeline=линия_времениВыбирает определённую линию времени для восстановления кластера. По умолчанию выбирается последняя доступная линия времени.
Параметры восстановления
-TСТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ--tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГПеремещает табличное пространство из каталога
СТАРЫЙ_КАТАЛОГвНОВЫЙ_КАТАЛОГво время восстановления. ИСТАРЫЙ_КАТАЛОГ, иНОВЫЙ_КАТАЛОГдолжны задаваться абсолютными путями. Если путь содержит знак равно (=), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств.
Параметры удаления
--walУдаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.
--expiredУдаляет резервные копии, не удовлетворяющие политике сохранения, определённой в файле конфигурации
pg_probackup.conf. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».
Параметры сохранения
Параметры сохранения могут задаваться только с командой set-config. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».
--retention-redundancy=избыточностьУказывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть положительным целым числом.
--retention-window=окноКоличество дней, в течение которого возможно восстановление.
Параметры ведения журнала
--log-level=уровень_сообщенийУправляет уровнем сообщений, которые будут выводиться в журнал. Допустимые уровни:
VERBOSE,LOG,INFO,NOTICE,WARNING,ERROR,FATALиPANIC. Значение по умолчанию:INFO. Каждый уровень включает все последующие. По мере перехода от первых к последним уровням объём сообщений уменьшается. Сообщения уровня >=ERRORвыводятся вstderrвсегда.--log-filename=файл_журналаОпределяет имена для файлов журналов. Имена файлов обрабатываются по шаблону
strftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени. Если параметрlog-filenameне задан, pg_probackup пишет все сообщения вstderr.--error-log-filename=файл_журнала_событийЕсли в параметре
log-levelвыбран уровеньERRORили выше, данный параметр определяет имена для файлов журналов ошибок. Имена файлов обрабатываются по шаблонуstrftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени. Если параметрerror-log-filenameне задан, pg_probackup пишет все сообщения вstderr.--log-directory=каталог_журналаОпределяет каталог, в котором будут создаваться файлы журналов. Вы должны задать в этом параметре абсолютный путь. Этот каталог создаётся только при необходимости, когда в журнал выводится первое сообщение. По умолчанию файлы журналов сохраняются в
$BACKUP_PATH/log/.--log-rotation-size=размер_журнала_для_ротацииМаксимальный размер отдельного файла журнала, в килобайтах.
pg_probackup использует одно правило ротации журналов для
logfileи дляerror_logfile. Ротация производится при выполнении любой команды pg_probackup, кромеhelpиversion. Время создания последнего файла журнала записывается в$BACKUP_PATH/log/log_rotation.--log-rotation-age=возраст_журнала_для_ротацииМаксимальное время жизни отдельного файла журнала, в минутах.
Параметры подключения
-dимя_бд--dbname=имя_бдPGDATABASEЗадаёт имя базы данных для подключения. Это подключение используется только для управления процессом резервного копирования, так что вы можете подключиться к любой существующей базе. Если этот параметр не задаётся в командной строке, переменной окружения
PGDATABASEили в конфигурационном файлеpg_probackup.conf, pg_probackup принимает в качестве имени базы значение переменной окруженияPGUSERили имя текущего пользователя, если переменнаяPGUSERне задана.-hсервер--host=серверPGHOSTУказывает имя компьютера, на котором запущен сервер. Если значение начинается с косой черты, оно интерпретируется как имя каталога с доменным сокетом Unix.
-pпорт--port=портPGPORTУказывает TCP-порт или расширение файла Unix-сокета, через который сервер принимает подключения.
-Uимя_пользователя--username=имя_пользователяPGUSERИмя пользователя для подключения.
-w--no-passwordНе выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл
.pgpass, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.
Репликационные параметры
В этом разделе описаны параметры, требующиеся для снятия резервной копии с реплики. Параметры подключения необходимы для создания точки восстановления (это можно сделать только на ведущем сервере), которая будет использоваться для определения времени восстановления — самого раннего момента, на который вы сможете восстановить согласованное состояние кластера баз данных.
--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требуется для правильной обработки.
Использование
Создание резервной копии
Чтобы создать резервную копию, выполните следующую команду:
pg_probackup backup -Bкаталог_копий--instanceимя_экземпляра-bрежим_копирования
Здесь режим_копирования может быть следующим:
FULL— создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.PAGE— создаётся инкрементальная резервная копия с файлами WAL, которые были изменены со времени последней полной или инкрементальной копии.PTRACK— создаётся инкрементальная резервная копия со страницами, изменения в которых отслеживались на лету.
При восстановлении кластера из инкрементальной копии pg_probackup сначала использует предыдущую полную копию для восстановления всех файлов данных. Таким образом, прежде чем делать инкрементальные копии, необходимо сделать как минимум одну полную.
Если вы настроили резервное копирование PTRACK, pg_probackup будет очищать карту PTRACK обрабатываемого отношения при каждом выполнении полного или инкрементального резервного копирования. Таким образом, в следующую инкрементальную копию PTRACK войдут только страницы, изменённые со времени предыдущей копии. Если при резервном копировании произойдёт ошибка или оно будет прервано, для некоторых отношений карты PTRACK могут оказаться очищенными, так что следующая инкрементальная копия будет неполной. Это справедливо и тогда, когда на время выключается режим ptrack_enable. В этом случае вы должны сделать полную резервную копию, прежде чем пытаться сделать следующую инкрементальную копию PTRACK.
Чтобы сделать резервную копию автономной, добавьте к предыдущей команде параметр --stream. Например, чтобы создать полную автономную копию, выполните:
pg_probackup backup -Bкаталог_копий--instanceимя_экземпляра-b FULL --stream
Автономные резервные копии включают все сегменты WAL, необходимые для приведения кластера в согласованное состояние на момент создания копии. Для восстановления кластера из инкрементальной автономной копии для pg_probackup в любом случае необходима полная копия и все инкрементальные копии, от которых зависит целевая.
Даже если вы используете непрерывное архивирование, автономное резервное копирование может быть полезно по следующим причинам:
Автономные копии могут быть восстановлены на сервере, не имеющем файлового доступа к архиву WAL.
Автономное резервное копирование позволяет восстановить состояние кластера на тот момент времени, для которого уже нет файлов WAL.
Проверка резервных копий
Когда в кластере база данных включены контрольные суммы, pg_probackup использует их для проверки целостности файлов данных. При чтении каждой страницы pg_probackup проверяет, совпадает ли вычисленная сумма с контрольной суммой, хранящийся в странице. Это гарантирует, что в резервной копии не окажется испорченных страниц. Заметьте, что pg_probackup читает файлы баз данных с диска, поэтому при активной записи на диск во время резервного копирования возможны ложные выявления некорректных контрольных сумм из-за частичной записи.
Даже когда контрольные суммы страниц отключены, pg_probackup вычисляет контрольные суммы для всех файлов резервной копии. Эти контрольные суммы проверяются непосредственно после создания резервной копии и перед восстановлением для выявления возможных повреждений резервных копий.
Чтобы убедиться, что все необходимые файлы резервных копий имеются в наличии и что, используя их, можно восстановить кластер баз данных, вы можете выполнить команду validate с именно теми параметрами точки восстановления, с которыми вы будете производить восстановление. При выполнении этой команды без параметров будут проверены все имеющиеся копии.
Например, чтобы убедиться, что вы можете восстановить кластер баз данных из резервной копии до транзакции с указанным xid, выполните команду:
pg_probackup validate -Bкаталог_копий--instanceимя_экземпляра--xid=ид_транзакции
Если проверка проходит успешно, pg_probackup выдаёт сообщение об этом. В случае же неудачи вы получите сообщение об ошибке с указанием точного времени и идентификатора транзакции, до которой возможно восстановление.
Восстановление кластера
Чтобы восстановить кластер баз данных из резервной копии, воспользуйтесь командой restore:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра-Dкаталог_данных-iид_резервной_копии
Здесь:
каталог_данныхзадаёт расположение восстанавливаемого каталога данных кластера. Если параметр-Dопущен,каталог_данныхберётся из файла конфигурацииpg_probackup.confи кластер будет восстановлен в изначальном расположении.ид_резервной_копииопределяет, из какой резервной копии будет восстановлен кластер. Если этот параметр опускается, pg_probackup использует последнюю имеющуюся резервную копию для заданного экземпляра.
Примечание
Если вы выбираете восстановление инкрементальной копии, pg_probackup автоматически восстанавливает предыдущую полную копию, а затем последовательно применяет все необходимые инкрементальные копии.
Если вы настраивали архивное резервное копирование, вы можете восстановить состояние кластера на любой момент времени (точку восстановления), используя параметры точки восстановления. pg_probackup автоматически выбирает копию, ближайшую к заданной точке восстановления, и запускает процесс восстановления. По умолчанию параметр recovery_target_inclusive определяет, будет ли точка восстановления включаться в достигаемое при восстановлении состояние. Вы можете явно включить или исключить точку восстановления, воспользовавшись параметром --inclusive=.логическое_значение
Чтобы восстановить состояние кластера на определённое время, укажите это время в параметре time, в формате timestamp. Например:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра--time='2017-05-18 14:18:11'
Чтобы восстановить состояние кластера до определённой транзакции, воспользуйтесь ключом xid:
pg_probackup restore -Bкаталог_копий--instanceимя_экземпляра--xid=687
Если кластер, подлежащий восстановлению, содержит табличные пространства, 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 и будет готов принимать подключения.
Запуск 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имя_экземпляра[параметры_соединения] [параметры_сохранения] [параметры_журнала] [репликационные_параметры]
Чтобы просмотреть текущие параметры, выполните эту команду:
pg_probackup show-config -Bкаталог_копий--instanceимя_экземпляра
Указание параметров подключения
Если вы определите свойства соединения в файле конфигурации 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 удалит все резервные копии, не удовлетворяющие установленной политике сохранения.
Вы также можете определить политику сохранения и использовать ключ --delete-expired с командой backup, чтобы устаревшие резервные копии удалялись сразу после создания новой.
Управление каталогом резервных копий
С помощью pg_probackup вы можете управлять резервными копиями в командной строке:
Просмотр информации о резервных копиях
Чтобы просмотреть список существующих копий, выполните команду:
pg_probackup show -B каталог_копийpg_probackup выдаёт список всех имеющихся резервных копий. Например, вы можете получить следующую информацию:
BACKUP INSTANCE 'two' =============================================================================================================================== Instance ID Recovery time Mode WAL Current/Parent TLI Time Data Start LSN Stop LSN Status =============================================================================================================================== two ORHG08 2017-06-13 14:02:33 FULL STREAM 1 / 0 9s 55MB 0/5000028 0/50001B8 OK BACKUP INSTANCE 'one' =============================================================================================================================== Instance ID Recovery time Mode WAL Current/Parent TLI Time Data Start LSN Stop LSN Status =============================================================================================================================== one ORHFY4 2017-06-13 14:01:18 FULL ARCHIVE 1 / 0 3s 22MB 0/2000028 0/30000C8 OK ===============================================================================================================================
Для каждой копии выдаются следующие сведения:
Instance — имя экземпляра.
ID — идентификатор резервной копии.
Recovery time — самое ранее время, на которое можно восстановить кластер из данной копии.
Mode — режим, в котором была сделана копия. Возможные значения:
FULL,PAGE,PTRACK.WAL — вариант обработки журнала WAL. Возможные значения:
STREAM(для автономных копий) иARCHIVE(для архивных копий).Current/Parent TLI — текущая и родительская линии времени кластера.
Time — время, за которое была выполнена данная копия.
Data — объём файлов данных в этой копии. Это значение не включает в себя объём файлов WAL.
Start LSN — последовательный номер в журнале WAL, соответствующий началу процесса копирования.
Stop LSN — последовательный номер в журнале WAL, соответствующий окончанию процесса копирования.
Status — состояние резервной копии. Возможные значения:
OK— резервная копия сделана и пригодна к использованию.CORRUPT— некоторые файлы резервной копии повреждены.DONE— резервная копия сделана, но не проверена.ERROR— резервное копирование было прервано из-за неожиданной ошибки.RUNNING— резервное копирование выполняется.DELETING— файлы резервной копии удаляются.
Восстановить кластер из копии можно только для копий с состоянием
OK.
Чтобы получить более подробную информацию о копии, укажите в команде show её идентификатор:
pg_probackup show -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Пример вывода:
#Configuration backup-mode = FULL stream = false #Compatibility block-size = 8192 wal-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
Удаление резервных копий
Для удаления резервной копии, ставшей ненужной, выполните команду:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра-iид_резервной_копии
Эта команда удалит резервную копию с заданным ид_резервной_копии вместе со всеми инкрементальными копиями, следующими за ней (если таковые найдутся). Таким образом вы можете удалить некоторые последние инкрементальные копии, сохранив предыдущую полную копию и некоторые следующие за ней инкрементальные копии.
Примечание
В этом случае следующая резервная копия в режиме PTRACK окажется неполной, так как не будет содержать часть изменений с момента создания последней оставшейся копии. Поэтому в таких случаях необходимо создать либо полную резервную копию, либо инкрементальную в режиме PAGE (если все необходимые файлы WAL сохранились в архиве).
Для удаления старых файлов WAL, которые не нужны для восстановления никаких из оставшихся резервных копий, воспользуйтесь ключом --wal:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--wal
Чтобы удалить резервные копии, считающиеся ненужными согласно текущей политике сохранения, воспользуйтесь ключом --expired:
pg_probackup delete -Bкаталог_копий--instanceимя_экземпляра--expired
Авторы
Postgres Professional, Москва, Россия.
Благодарности
Программа pg_probackup основана на pg_arman, которая изначально была написана в NTT, а затем её развивал и поддерживал Мишель Пакье.
