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, записанные после предыдущей копии. Если размер этих файлов сравним с общим размером файлов базы данных, ускорение будет менее значительным, но размер копии будет всё же меньше.

    • Режим DELTA. В этом режиме pg_probackup считывает все файлы данных в каталоге данных и копирует только те страницы, которые изменились со времени предыдущего копирования. Для использования данного режима не требуется производить непрерывное архивирование. Заметьте, что в этом режиме объём ввода/вывода может равняться объёму при полном резервном копировании.

    • Режим 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, 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» и Подразделу «Копирование данных с ведомого сервера».

Настройка автономного резервного копирования

Чтобы настроить кластер для автономного резервного копирования, выполните следующие действия:

  1. Дайте право REPLICATION роли backup:

    ALTER ROLE backup WITH REPLICATION;
  2. В файле pg_hba.conf разрешите выполнение репликации для роли backup.

  3. Измените файл конфигурации postgresql.conf сервера Postgres Pro следующим образом:

    • Установите для параметра max_wal_senders достаточно большое значение, предусматривающее минимум одно подключение для процесса резервного копирования.

    • Установите в параметре wal_level уровень replica или выше.

Настройка архивного резервного копирования

Чтобы настроить кластер для архивного резервного копирования, выполните следующие действия:

  1. Настройте следующие параметры в 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 может копировать данные с ведомого сервера. Для этого требуется дополнительная настройка:

  1. Разрешите подключения для репликации на ведомом сервере:

    • Установите в файле postgresql.conf параметры max_wal_senders и hot_standby.

    • Настройте аутентификацию по сетевым узлам в pg_hba.conf.

  2. Включите параметр full_page_writes в postgresql.conf на ведущем сервере.

Примечание

Архивное копирование с ведомого сервера имеет следующие ограничения:

  • Если ведомый сервер переводится в роль ведущего во время архивного копирования, копирование прерывается с ошибкой.

  • Все необходимые для резервной копии записи WAL должны содержать полные страницы. Это требует включения режима full_page_writes на ведущем сервере и отказа от использования в archive_command утилит, удаляющих полные страницы из файлов WAL, как например pg_compresslog.

Копирование в режиме PTRACK

Если вы хотите копировать данные в режиме PTRACK, выполните следующие дополнительные действия:

  1. Задайте в postgresql.conf для параметра ptrack_enable значение on.

  2. Дайте права на выполнения функций 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-console=уровень_сообщений] [--log-level-file=файл_журнала] [--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 каталог_копий --instance имя_экземпляра
[-D datadir]
[ -i ид_резервной_копии | --immediate | [{--time=время | --xid=ид_транзакции | --recovery-target-name=имя_цели_восстановления } [--inclusive=логическое_значение]]][--timeline=линия_времени] [-T СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ]
[--recovery-target-action=pause|promote|shutdown]
[-R | --write-recovery-conf]
[-j число_потоков] [--progress] [-q] [-v]

Восстанавливает экземпляр Postgres Pro из резервной копии, расположенной в каталоге каталог_копий. Если вы укажете параметр точки восстановления, pg_probackup восстановит кластер до заданной точки. В противном случае будет восстановлена самая последняя копия.

validate

Синтаксис:

pg_probackup validate -B каталог_копий
[--instance имя_экземпляра
[ -i ид_резервной_копии | [{--time=время | --xid=ид_транзакции | --recovery-target-name=имя_цели_восстановления }
[--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 segment segment_name into 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 — создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.

  • DELTA — считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых со времени предыдущего копирования.

  • PAGE — создаётся инкрементальная резервная копия с файлами WAL, которые были изменены со времени последней полной или инкрементальной копии.

  • PTRACK — создаётся инкрементальная резервная копия со страницами, изменения в которых отслеживались на лету.

За подробностями обратитесь к Подразделу «Создание резервной копии».

-C
--smooth-checkpoint
SMOOTH_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. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».

Параметры восстановления

--immediate

Останавливает восстановление, как только достигается согласованное состояние.

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

--recovery-target-action=pause|promote|shutdown

Задаёт действие, которое должен выполнить сервер по достижении цели восстановления, подобно параметру recovery_target_action в файле конфигурации recovery.conf.

По умолчанию: paused

-R | --write-recovery-conf

Записать минимальный recovery.conf в выходной каталог для облегчения настройки ведомого сервера. Пароль в этом файле не сохраняется. Если пароль требуется для соединения репликации, его потребуется указать вручную.

-T СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ
--tablespace-mapping=СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ

Перемещает табличное пространство из каталога СТАРЫЙ_КАТАЛОГ в НОВЫЙ_КАТАЛОГ во время восстановления. И СТАРЫЙ_КАТАЛОГ, и НОВЫЙ_КАТАЛОГ должны задаваться абсолютными путями. Если путь содержит знак равно (=), экранируйте этот знак обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств.

--timeline=линия_времени

Выбирает определённую линию времени для восстановления кластера. По умолчанию выбирается последняя доступная линия времени.

Параметры точки восстановления

Если настроена стратегия архивного копирования, один из этих параметров можно использовать с командами restore и validate для указания момента, на который требуется восстановить кластер баз данных.

--recovery-target-name=имя_цели_восстановления

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

--time=время

Указывает точку времени, вплоть до которой будет производиться восстановление.

--xid=ид_транзакции

Указывает идентификатор транзакции, вплоть до которой будет производиться восстановление.

--inclusive=логическое_значение

Указывает на необходимость остановки сразу после (true), либо до (false) достижения целевой точки. Этот параметр можно использовать только вместе с recovery-target-name, time или xid. Значение по умолчанию берётся из переменной recovery_target_inclusive.

Параметры удаления

--wal

Удаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.

--expired

Удаляет резервные копии, не удовлетворяющие политике сохранения, определённой в файле конфигурации pg_probackup.conf. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».

Параметры сохранения

Параметры сохранения могут задаваться только с командой set-config. За подробностями обратитесь к Подразделу «Настройка политики сохранения резервных копий».

--retention-redundancy=избыточность

Указывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть положительным целым числом.

--retention-window=окно

Количество дней, в течение которого возможно восстановление.

Параметры ведения журнала

--log-level-console=уровень_сообщений

Управляет уровнем сообщений, которые будут выводиться в журнал консоли. Допустимые уровни: verbose, log, info, notice, warning, error, fatal, panic и off. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. С уровнем off вывод в журнал консоли отключается.

По умолчанию: info

--log-level-file=уровень_сообщений

Управляет уровнем сообщений, которые будут выводиться в файл журнала. Допустимые уровни: verbose, log, info, notice, warning, error, fatal, panic и off. Каждый уровень включает все последующие, и с каждым последующим уровнем объём сообщений уменьшается. С уровнем off вывод в журнал консоли отключается.

По умолчанию: off

--log-filename=файл_журнала

Определяет имена для создаваемых файлов журналов. Имена файлов обрабатываются по шаблону strftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени. Этот параметр действует, только если запись в файлы включена параметром log-level-file.

По умолчанию: pg_probackup.log

--error-log-filename=файл_журнала_событий

Определяет имена для файлов журналов ошибок. Имена файлов обрабатываются по шаблону strftime, так что вы можете использовать спецкоды с % для выбора имён файлов, зависящих от времени. Если параметр error-log-filename не задан, pg_probackup пишет все сообщения об ошибках в stderr.

По умолчанию: none

--log-directory=каталог_журнала

Определяет каталог, в котором будут создаваться файлы журналов. Вы должны задать в этом параметре абсолютный путь. Этот каталог создаётся только при необходимости, когда в журнал выводится первое сообщение.

По умолчанию: $BACKUP_PATH/log/

--log-rotation-size=размер_журнала_для_ротации

Максимальный размер отдельного файла журнала. Если это значение достигается, файл журнала прокручивается при выполнении какой-либо команды pg_probackup, за исключением help и version. Нулевое значение отключает прокрутку в зависимости от размера.

По умолчанию: 0

--log-rotation-age=возраст_журнала_для_ротации

Максимальное время жизни отдельного файла журнала. Если это значение достигается, файл журнала прокручивается при выполнении какой-либо команды pg_probackup, за исключением help и version. Время создания последнего файла журнала сохраняется в $BACKUP_PATH/log/log_rotation. Нулевое значение отключает прокрутку по времени.

По умолчанию: 0

Параметры подключения

-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 — создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.

  • DELTA — считываются все файлы данных в каталоге данных и создаётся инкрементальная копия для страниц, изменённых со времени предыдущего копирования.

  • 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 '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, 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, а затем её развивал и поддерживал Мишель Пакье.