pg_probackup

pg_probackup — управление резервным копированием и восстановлением кластеров баз данных Postgres Pro Enterprise

Синтаксис

pg_probackup init -B каталог_копий -D каталог_данных [параметр...]

pg_probackup set-config -B каталог_копий [параметр...]

pg_probackup show-config -B каталог_копий

pg_probackup backup -B каталог_копий -b режим_копирования [параметр...]

pg_probackup restore -B каталог_копий [параметр...]

pg_probackup validate -B каталог_копий [параметр...]

pg_probackup show -B каталог_копий [параметр...]

pg_probackup delete -B каталог_копий { -i ид_резервной_копии | --wal | --expired }

pg_probackup version

pg_probackup help [команда]

Описание

Содержание

Установка и подготовка

Справка по командной строке

Использование

pg_probackup — это утилита для управления резервным копированием и восстановлением кластеров баз данных Postgres Pro Enterprise. Она предназначена для регулярного создания резервных копий экземпляра Postgres Pro Enterprise, позволяющих восстанавливать сервер в случае необходимости. pg_probackup поддерживает Postgres Pro Enterprise версии 9.5 и новее.

По сравнению с другими средствами резервного копирования pg_probackup имеет следующие преимущества, полезные для реализации различных стратегий резервного копирования и работы с базами данных большого объёма:

  • Выбор между полным резервным копированием и инкрементальным, на уровне страниц, позволяющим ускорить процесс копирования и восстановления

  • Реализация единой стратегии резервного копирования для кластеров Postgres Pro Enterprise с несколькими серверами

  • Автоматический контроль целостности данных и проверка резервных копий без восстановления данных кластера

  • Управление резервными копиями в соответствии с политикой их сохранения

  • Выполнение резервного копирования, восстановления и проверки в параллельных потоках

  • Хранение копируемых данных в сжатом состоянии для экономии дискового пространства

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

Используя pg_probackup, вы можете выполнять полное или инкрементальное резервное копирование:

  • Полные резервные копии содержат все файлы данных, необходимые для восстановления кластера баз данных с нуля.

  • Инкрементальные резервные копии сохраняют только те данные, которые изменились со времени последнего копирования. Это позволяет уменьшить размер резервной копии и ускорить операции копирования и восстановления данных. pg_probackup поддерживает следующие режимы инкрементального копирования:

    • Режим PAGE. В этом режиме pg_probackup сканирует все файлы WAL в архиве с момента создания предыдущей полной или инкрементальной копии. Новая резервная копия будет содержать только страницы, фигурирующие в записях WAL. При этом необходимо, чтобы в архиве WAL сохранялись все файлы WAL, записанные после предыдущей копии. Если размер этих файлов сравним с общим размером файлов базы данных, ускорение будет менее значительным, но размер копии будет всё же меньше.

    • Режим PTRACK. В этом режиме Postgres Pro Enterprise отслеживает изменения страниц на лету. Чтобы он работал, не требуется производить непрерывное архивирование WAL. При каждом изменении страницы отношения она помечается в специальной карте PTRACK этого отношения. Так как для одной страницы в карте PTRACK требуется всего один бит, такие резервные копии довольно малы. Это отслеживание привносит небольшие издержки в работу сервера, но значительно ускоряет инкрементальное резервное копирование.

Вне зависимости от выбранного типа резервного копирования pg_probackup поддерживает следующие стратегии архивирования:

  • Автономные резервные копии включают все файлы, необходимые для восстановления согласованного состояния кластера на момент создания копии. Даже если непрерывное архивирование не производится, в эту копию включаются только необходимые сегменты WAL. Так как автономная резервная копия довольно компактна, вы можете перенести её в другую систему и восстановить кластер там.

  • Архивные резервные копии основаны на непрерывном архивировании. Такие копии требуют больше места на диске, но позволяют восстановить кластер на произвольный момент времени после момента создания копии (производить восстановление на момент времени).

См. также

Создание резервных копий

Ограничения

В настоящее время pg_probackup имеет следующие ограничения:

  • На сервере, где была сделана копия, и на сервере, где она будет восстанавливаться, должны быть одинаковые значения параметров block_size и wal_block_size и одинаковая основная версия.

  • Операционная система Microsoft Windows не поддерживается.

  • Инкрементальное копирование в режиме отслеживания изменений PTRACK не может выполняться с ванильным сервером PostgreSQL.

  • Конфигурационные файлы, расположенные вне каталога данных Postgres Pro Enterprise, не попадают в резервную копию и должны копироваться отдельно.

Установка и подготовка

Пакет pg_probackup входит в состав дистрибутивного набора Postgres Pro Enterprise. Установив pg_probackup, выполните следующие действия:

Инициализация каталога резервных копий

Для инициализации каталога резервных копий выполните команду:

pg_probackup init -B каталог_копий -D каталог_данных

где:

  • каталог_копий — это каталог, предназначенный для резервных копий. Если каталог_копий уже существует, он должен быть пустым. В противном случае pg_probackup выдаст ошибку.

  • каталог_данных — каталог, содержащий данные кластера, копию которого вы хотите сделать. Для подготовки и использования pg_probackup необходимо иметь право записи в этот каталог.

Эта утилита создаёт каталог_данных со следующими файлами и подкаталогами:

  • pg_probackup.conf — конфигурационный файл. Изначально он содержит следующие параметры:

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

    • system-identifier — уникальный идентификатор экземпляра Postgres Pro Enterprise.

  • wal/ — каталог для файлов WAL.

  • backups/ — каталог для файлов резервных копий.

Каталог резервных копий должен находиться в файловой системе сервера БД. Пользователь, запускающий pg_probackup, должен иметь полный доступ к содержимому этого каталога. Если вы зададите путь к этому каталогу в переменной окружения BACKUP_PATH, соответствующий параметр в командах pg_probackup можно не указывать.

Та как pg_probackup использует обычное подключение к PostgreSQL и стандартный протокол репликации, для команд pg_probackup необходимо задавать параметры подключения. Чтобы каждый раз не задавать эти параметры в командной строке, вы можете определить их в файле конфигурации pg_probackup.conf с помощью команды set-config. За подробностями обратитесь к Разделу «Настройка pg_probackup».

Настройка кластера баз данных

В зависимости от того, будете ли вы применять автономное или архивное резервное копирование, конфигурация кластера Postgres Pro Enterprise будет разной. Чтобы получить копию кластера баз данных с резервного сервера или создать резервную копию PTRACK, требуется дополнительная настройка. За подробностями обратитесь к Подразделу «Копирование в режиме PTRACK» и Подразделу «Копирование данных с резервного сервера».

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

Примечание

Создание копий с удалённого сервера в настоящее время не поддерживается.

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

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

  1. Создайте роль backup с правами LOGIN и REPLICATION.

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

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

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

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

  4. Дайте роли backup следующие права:

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_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;

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

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

  1. Создайте роль backup с правом LOGIN:

    CREATE ROLE backup WITH LOGIN;
  2. Настройте следующие параметры в postgresql.conf для включения постоянного архивирования на сервере Postgres Pro Enterprise:

    • Установите для archive_mode значение on.

    • Задайте в archive_command команды test ! -f каталог_копий/wal/%f && cp %p backup_dir/wal/%f, где каталог_копий — инициализированный каталог резервных копий.

  3. Дайте роли backup следующие права:

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_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;

Копирование данных с резервного сервера

С Postgres Pro Enterprise 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 каталог_копий -D каталог_данных

Инициализирует каталог_копий, в котором будут храниться резервные копии для заданного каталога_данных, вместе с архивом WAL и метаинформации. Если заданный каталог_копий уже существует, он должен быть пустым. В противном случае pg_probackup выдаст соответствующее сообщение об ошибке.

set-config

Синтаксис:

pg_probackup set-config -B каталог_копий 
[-d имя_бд] [-h сервер] [-p порт] [-U имя_пользователя] 
[--retention-redundancy=избыточность][--retention-window=окно]

Добавляет заданные параметры соединения и сохранения в конфигурационный файл pg_probackup.conf либо изменяет ранее заданные параметры.

show-config

Синтаксис:

pg_probackup show-config -B каталог_копий

Выводит содержимое файла pg_probackup.conf, размещённого в каталоге каталог_копий. Для изменения параметров в pg_probackup.conf, воспользуйтесь командой set-config. Непосредственно редактировать pg_probackup.conf нельзя.

backup

Синтаксис:

pg_probackup backup -B каталог_копий -b режим_копирования 
[-D каталог_данных]
[-C] [--stream [-S имя_слота]] [--backup-pg-log] 
-archive-timeout=таймаут] [--delete-expired] 
[-d имя_базы] [-h сервер] [-p порт] [-U имя_пользователя] [-w]
[-j число_потоков][--progress] [-q] [-v] 

Создаёт резервную копию экземпляра Postgres Pro Enterprise. Какой именно режим копирования будет использоваться, устанавливает параметр режим_копирования. За подробностями обратитесь к Подразделу «Создание резервной копии».

Примечание

Так как каталог копий может использоваться только для одного кластера баз данных, при указании в качестве каталога данных каталога, отличного от заданного в pg_probackup.conf, произойдёт ошибка.

restore

Синтаксис:

pg_probackup restore -B каталог_копий
[-D каталог_данных] 
[ -i ид_резервной_копии | [{--time=время | --xid=ид_транзакции } [--inclusive=логическое_значение]]][--timeline=линия_времени] [-T СТАРЫЙ_КАТАЛОГ=НОВЫЙ_КАТАЛОГ]
[-j число_потоков] [--progress] [-q] [-v]

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

validate

Синтаксис:

pg_probackup validate -B каталог_копий 
[-D каталог_данных] 
[ -i ид_резервной_копии | [{--time=время | --xid=ид_транзакции } [--inclusive=логическое_значение]]]
[--timeline=линия_времени]
[-j число_потоков] [--progress] [-q] [-v] 

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

show

Синтаксис:

pg_probackup show -B каталог_копий [-i ид_резервной_копии]

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

delete

Синтаксис:

pg_probackup delete -B каталог_копий {-i ид_резервной_копии | --wal | --expired}

Удаляет указанные файлы резервных копий из каталога каталог_копий:

  • При указании ключа -i удаляется только заданная резервная копия.

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

  • С параметром expired удаляются резервные копии, которые считаются ненужными согласно текущей политике сохранения копий.

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

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

Если настроена стратегия архивного копирования, эти параметры можно использовать с командами 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=окно

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

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

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

Использование

Создание резервной копии

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

pg_probackup backup -B каталог_копий -b режим_копирования

Здесь режим_копирования может быть следующим:

  • FULL — создаётся полная резервная копия, содержащая все файлы данных кластера, необходимые для его восстановления.

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

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

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

Если вы настроили резервное копирование PTRACK, pg_probackup будет очищать карту PTRACK обрабатываемого отношения при каждом выполнении полного или инкрементального резервного копирования. Таким образом, в следующую инкрементальную копию PTRACK войдут только страницы, изменённые со времени предыдущей копии. Если при резервном копировании произойдёт ошибка или оно будет прервано, для некоторых отношений карты PTRACK могут оказаться очищенными, так что следующая инкрементальная копия будет неполной. Это справедливо и тогда, когда на время выключается режим ptrack_enable. В этом случае вы должны сделать полную резервную копию, прежде чем пытаться сделать следующую инкрементальную копию PTRACK.

Чтобы сделать резервную копию автономной, добавьте к предыдущей команде параметр --stream. Например, чтобы создать полную автономную копию, выполните:

pg_probackup backup -B каталог_копий -b FULL --stream

Автономные резервные копии включают все сегменты WAL, необходимые для приведения кластера в согласованное состояние на момент создания копии. Для восстановления кластера из инкрементальной автономной копии для pg_probackup в любом случае необходима полная копия и все инкрементальные копии, от которых зависит целевая.

Даже если вы используете непрерывное архивирование, автономное резервное копирование может быть полезно по следующим причинам:

  • Автономные копии могут быть восстановлены на сервере, не имеющем файлового доступа к архиву WAL.

  • Автономное резервное копирование позволяет восстановить состояние кластера на тот момент времени, для которого уже нет файлов WAL.

Проверка резервных копий

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

Даже когда контрольные суммы страниц отключены, pg_probackup вычисляет контрольные суммы для всех файлов резервной копии. Эти контрольные суммы проверяются непосредственно после создания резервной копии и перед восстановлением для выявления возможных повреждений резервных копий.

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

Например, чтобы убедиться, что вы можете восстановить кластер баз данных из резервной копии до транзакции с указанным xid, выполните команду:

pg_probackup validate -B каталог_копий --xid=ид_транзакции

Если проверка проходит успешно, pg_probackup выдаёт сообщение об этом. В случае же неудачи вы получите сообщение об ошибке с указанием точного времени и идентификатора транзакции, до которой возможно восстановление.

Восстановление кластера

Важно

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

Чтобы восстановить кластер баз данных из резервной копии:

  1. Остановите службу Postgres Pro Enterprise.

  2. Выполните команду restore:

pg_probackup restore -B каталог_копий -D каталог_данных -i ид_резервной_копии

Здесь:

  • datadir задаёт расположение восстанавливаемого каталога данных кластера. Если параметр -D опущен, значение datadir берётся из файла конфигурации pg_probackup.conf и восстановленный кластер заменяет исходный.

  • ид_резервной_копии определяет, из какой резервной копии будет восстановлен кластер. Если параметр -i опущен, pg_probackup использует последнюю имеющуюся резервную копию.

Примечание

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

Если вы настраивали архивное резервное копирование, вы можете восстановить состояние кластера на любой момент времени (точку восстановления), используя параметры точки восстановления. pg_probackup автоматически выбирает копию, ближайшую к заданной точке восстановления, и запускает процесс восстановления. По умолчанию параметр recovery_target_inclusive определяет, будет ли точка восстановления включаться в достигаемое при восстановлении состояние. Вы можете явно включить или исключить точку восстановления, воспользовавшись параметром --inclusive=логическое_значение.

Чтобы восстановить состояние кластера на определённое время, укажите это время в параметре time, в формате timestamp. Например:

pg_probackup restore -B каталог_копий --time='2017-05-18 14:18:11'

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

pg_probackup restore -B каталог_копий --xid=687

Если кластер, подлежащий восстановлению, содержит табличные пространства, pg_probackup по умолчанию восстанавливает их в исходные расположения. Чтобы сменить расположения табличных пространств, воспользуйтесь параметром --tablespace-mapping. В противном случае при восстановлении кластера на том же сервере произойдёт ошибка, если эти табличные пространства будут использоваться, так как восстанавливаемые данные нужно будет записать в те же каталоги, где табличные пространства находились изначально.

Используя параметр --tablespace-mapping, вы должны задать абсолютные пути к старому и новому каталогу табличного пространства. Если путь содержит знак равно (=), экранируйте его обратной косой чертой. Данный параметр может указываться неоднократно для перемещения нескольких табличных пространств. Например:

pg_probackup restore -B каталог_копий -D каталог_данных -j 4 -i ид_резервной_копии -T каталог_табл_пространства1=новый_каталог_табл_пространства1 -T каталог_табл_пространства1=новый_каталог_табл_пространства2

Когда команда restore завершит работу, запустить службу баз данных. Postgres Pro Enterprise восстановит согласованное состояние, воспроизведя файлы WAL и будет готов принимать подключения.

Запуск pg_probackup в параллельных потоках

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

Параллельным выполнением управляет ключ командной строки -j/--threads. Например, запустить резервное копирование в четыре параллельных потока можно, выполнив:

pg_probackup backup -B каталог_копий -b FULL -j 4

Примечание

Восстановление происходит в параллельном режиме только на этапе копирования данных из каталога копий в каталог данных кластера. При запуске сервера Postgres Pro Enterprise он должен будет воспроизвести записи из WAL, а это может происходить только последовательно.

Настройка pg_probackup

После инициализации каталога копий в файл конфигурации pg_probackup.conf записывается уникальный идентификатор кластера и путь к каталогу данных этого кластера. Кроме того, вы можете задать в нём параметры подключения и параметры сохранения, воспользовавшись командой set-config:

pg_probackup set-config -B каталог_копий [параметры_подключения] [параметры_сохранения]

где:

  • Допустимые параметры_подключения: [-d имя_базы] [-h сервер] [-p порт] [-U имя_пользователя]

  • Допустимые параметры_сохранения: [--retention-redundancy=избыточность] [--retention-window=окно]

Чтобы просмотреть текущие параметры, выполните эту команду:

pg_probackup show-config

Указание параметров подключения

Если вы определите параметры подключения в файле конфигурации 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 --expired

pg_probackup удалит все резервные копии, не удовлетворяющие установленной политике сохранения.

Вы также можете определить политику сохранения и использовать ключ --delete-expired с командой backup, чтобы устаревшие резервные копии удалялись сразу после создания новой.

Управление каталогом резервных копий

С помощью pg_probackup вы можете управлять резервными копиями в командной строке:

Просмотр информации о резервных копиях

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

pg_probackup show

pg_probackup выдаёт список всех имеющихся резервных копий. Для каждой копии выводится следующая информация:

  • 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.

Чтобы получить более подробную информацию о копии, укажите в команде show её идентификатор:

pg_probackup show -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

Удаление резервных копий

Для удаления резервной копии, ставшей ненужной, выполните команду:

pg_probackup delete -i ид_резервной_копии

Эта команда удалит резервную копию с заданным ид_резервной_копии вместе со всеми инкрементальными копиями, следующими за ней (если таковые найдутся). Таким образом вы можете удалить некоторые последние инкрементальные копии, сохранив предыдущую полную копию и некоторые следующие за ней инкрементальные копии.

Примечание

В этом случае следующая резервная копия в режиме PTRACK окажется неполной, так как не будет содержать часть изменений с момента создания последней оставшейся копии. Поэтому в таких случаях необходимо создать либо полную резервную копию, либо инкрементальную в режиме PAGE (если все необходимые файлы WAL сохранились в архиве).

Для удаления старых файлов WAL, которые не нужны для восстановления никаких из оставшихся резервных копий, воспользуйтесь ключом --wal:

pg_probackup delete --wal

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

pg_probackup delete --expired

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

Авторы

Postgres Professional, Москва, Россия.

Благодарности

Программа pg_probackup основана на pg_arman, которая изначально была написана в NTT, а затем её развивал и поддерживал Мишель Пакье.