Перейти к содержанию

Это многостраничная версия текущего раздела для печати. .

Вернуться к обычному виду страницы.

Документация pgBackRest 2.59.3

Надёжное резервное копирование и восстановление PostgreSQL — документация и справочник pgBackRest.

Введение

pgBackRest — надёжное решение для резервного копирования и восстановления PostgreSQL, которое легко масштабируется даже для крупнейших баз данных и самых высоких нагрузок.

Это зеркало документации описывает pgBackRest v2.59.3 . Примечания к выпускам доступны на странице Выпуски .

В версии 2.59.3 исправлена возможная генерация слабых подключей шифрования и солей. Обновление не заменяет существующие слабые подключи stanza; способы проверки и устранения проблемы см. в разделе Слабые подключи шифрования и соли .

Поставьте нам звезду на GitHub , если вам нравится pgBackRest!


Новости

4 октября 2026 - Слабые подключи шифрования и соли

4 октября 2026 — Выпущен pgBackRest 2.59.3

27 сентября 2026 года — Выпущен pgBackRest 2.59.2


Спонсоры

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

Наши спонсоры: AWS , Supabase , pgEdge , Tiger Data , Percona , Eon , Xata , Dalibo и Data Egret .

Мы благодарны нашим спонсорам за инвестиции в инфраструктуру с открытым исходным кодом, которая приносит пользу всему сообществу PostgreSQL.

Бывшие спонсоры: Crunchy Data , Resonate .


Функции

Параллельное резервное копирование и восстановление

Сжатие обычно является узким местом при выполнении операций резервного копирования, поэтому pgBackRest решает эту проблему за счёт параллельной обработки и более эффективных алгоритмов сжатия, таких как lz4 и zstd.

Локальная или удалённая работа

Собственный протокол позволяет pgBackRest создавать резервные копии, восстанавливать данные и архивировать локально или удалённо через TLS/SSH с минимальной конфигурацией. Протокол также предоставляет интерфейс для запросов к PostgreSQL, поэтому прямое удалённое подключение к PostgreSQL не требуется, что повышает безопасность.

Несколько репозиториев

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

Полные, дифференциальные и инкрементные резервные копии (на уровне файлов или блоков)

Поддерживаются полные, дифференциальные и инкрементные резервные копии. pgBackRest не подвержен проблемам, связанным с точностью временных меток в rsync, что делает дифференциальные и инкрементные резервные копии безопасными без необходимости проверки контрольной суммы каждого файла. Резервные копии на уровне блоков экономят место, копируя только те части файлов, которые изменились.

Ротация резервных копий и удаление устаревших архивов

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

Целостность резервной копии

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

Резервные копии в репозитории могут храниться в том же формате, что и стандартный кластер PostgreSQL (включая табличные пространства). Если отключено сжатие и включены жёсткие ссылки, возможно сделать снимок резервной копии в репозитории и запустить кластер PostgreSQL непосредственно на этом снимке. Это удобно для баз данных терабайтного масштаба, восстановление которых традиционным способом занимает много времени.

Все операции используют fsync для файлов и каталогов, чтобы гарантировать сохранность данных.

Проверка контрольных сумм страниц

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

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

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

Возобновление резервного копирования

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

Потоковое сжатие и контрольные суммы

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

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

Дельта-восстановление

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

Параллельная асинхронная передача и получение WAL

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

При отправке WAL автоматически обнаруживаются повторно передаваемые сегменты: если сегменты идентичны, дубликаты устраняются; в противном случае выдаётся ошибка. Асинхронная отправка WAL позволяет передать эту работу отдельному процессу, который параллельно сжимает сегменты WAL для достижения максимальной пропускной способности. Это может быть критически важной функцией для баз данных с чрезвычайно высоким объёмом записей.

Асинхронное получение WAL поддерживает локальную очередь сегментов WAL, которые уже распакованы и готовы к воспроизведению. Это сокращает время, необходимое для предоставления WAL PostgreSQL, что максимизирует скорость воспроизведения. Наибольшую выгоду от этого получают соединения и хранилища с высокой задержкой (например, S3).

Команды отправки и получения проверяют соответствие базы данных и репозитория, сравнивая версии PostgreSQL и системные идентификаторы. Это практически исключает возможность неправильной настройки расположения архива WAL.

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

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

Поддержка объектных хранилищ S3, Azure и GCS

Репозитории pgBackRest могут находиться в объектных хранилищах, совместимых с S3, Azure и GCS для обеспечения практически неограниченной ёмкости и срока хранения.

Шифрование

pgBackRest может шифровать репозиторий для обеспечения безопасности резервных копий независимо от места их хранения.

Защита от программ-вымогателей и вредоносного ПО

Когда репозиторий хранится в хранилище объектов с версионированием, pgBackRest может читать репозиторий в состоянии на определённый момент времени. Если резервные копии удалены или повреждены случайно, вредоносным ПО или программами-вымогателями, можно использовать целевое время для восстановления данных, существовавших до повреждения.

Версионирование поддерживается хранилищами, совместимыми с S3, Azure и GCS. Блокировка объектов в S3 и обратимое удаление в GCS или Azure могут обеспечить дополнительную защиту от несанкционированных изменений.

Совместимость с десятью версиями PostgreSQL

pgBackRest предоставляет поддержку десяти версий PostgreSQL: пяти поддерживаемых версий и последних пяти версий, поддержка которых завершена. Это обеспечивает достаточное время для обновления до поддерживаемой версии.


Начало работы

pgBackRest стремится быть простым в настройке и эксплуатации:


Участие в разработке

Участие в разработке pgBackRest всегда приветствуется! Порядок добавления функций, внесения улучшений и сообщения о проблемах описан в руководстве для участников .


Поддержка

pgBackRest полностью бесплатен и является программным обеспечением с открытым исходным кодом под лицензией MIT . Его можно использовать в личных или коммерческих целях без каких-либо ограничений. К сообщениям об ошибках относятся очень серьёзно; ошибки исправляются как можно быстрее. Пожалуйста, сообщайте об ошибках здесь .

Разработка надёжной политики аварийного восстановления с подходящими стратегиями репликации и резервного копирования может оказаться чрезвычайно сложной задачей. На этапе проектирования архитектуры может потребоваться помощь, а для бесперебойной работы корпоративной системы — постоянная поддержка.

Наши спонсоры предлагают продукты и услуги с поддержкой pgBackRest и могут помочь обеспечить аварийное восстановление.

1 - Новости

Официальные новости проекта pgBackRest, объявления о выпусках и сведения о сопровождении.

Слабые подключи шифрования и соли

4 октября 2026

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

Такая ошибка должна возникать редко. Возможные причины — песочница или политика seccomp, блокирующая системный вызов getrandom(), а также некорректная конфигурация OpenSSL.

Основную опасность представляют подключи в archive.info и backup.info. Они создаются однократно командой stanza-create и используются на протяжении всего срока существования stanza, поэтому обновление не заменяет слабый подключ. Слабые подключи резервных копий и соли удаляются по мере истечения срока хранения резервных копий и WAL.

Последствия

Подключ WAL хранится в archive.info, а подключ манифестов — в backup.info. Слабый подключ легче угадать, чем случайный; угаданный подключ позволяет расшифровать зашифрованные им файлы без repo-cipher-pass. Насколько это легче, зависит от содержимого памяти, которое различается в зависимости от платформы и сборки. Слабый подключ в archive.info ставит под угрозу все WAL в репозитории. Слабый подключ в backup.info ставит под угрозу все резервные копии, поскольку манифесты зашифрованы этим подключом, а каждый манифест хранит подключ для файлов соответствующей резервной копии. Это относится и к WAL и резервным копиям, добавленным после обновления.

Подключ для файлов резервной копии генерируется для каждой полной резервной копии и также используется дифференциальными и инкрементальными копиями на её основе. Слабый подключ резервной копии ставит под угрозу файлы во всех этих копиях.

Слабая соль не раскрывает подключ. Файлы, зашифрованные с одинаковыми подключом и солью, используют одинаковые ключ и IV, поэтому одинаковые данные в этих файлах дают одинаковые зашифрованные данные. Соль хранится в незашифрованном виде в начале каждого файла; слабая соль может содержать до 8 байт данных, ранее находившихся в памяти.

Проверка подключей

Выполните следующие команды на узле с доступом к репозиторию, указав имя stanza в STANZA. Чтобы проверить репозиторий, отличный от первого, добавьте --repo к командам pgbackrest.

STANZA=demo

for file in archive/$STANZA/archive.info backup/$STANZA/backup.info; do
    for key in $(pgbackrest --stanza=$STANZA repo-get $file | grep '^cipher-pass=' | grep -oE '[A-Za-z0-9+/]{64}'); do
        echo "$(printf '%s' $key | base64 -d | od -An -v -tx1 | tr -s ' ' '\n' | grep -c '^00$') $file"
    done
done

Первый столбец — число нулевых байтов в подключе. Случайный подключ содержит 6 или более нулевых байтов реже чем в одном случае из 25 000 000, тогда как слабые подключи, обнаруженные при тестировании, содержали 13 или более. Подключ с 6 или более нулевыми байтами следует считать слабым.

OpenSSL 1.0

Версии pgBackRest до 2.53 можно было собирать с OpenSSL 1.0. Если ему не удаётся получить случайные данные от операционной системы, он генерирует случайные данные из состояния, которое не было инициализировано случайными данными. Созданные таким образом слабые подключи нельзя обнаружить описанной выше проверкой.

Устранение проблемы

  • Обновитесь до pgBackRest 2.59.3 или более новой версии: они сообщают об ошибке, если не удаётся сгенерировать случайные данные.
  • Если подключ в archive.info или backup.info слабый, создайте stanza в новом репозитории и сохраняйте старый репозиторий лишь до тех пор, пока нужны его резервные копии.
  • Рассмотрите возможность создания новой полной резервной копии после обновления, поскольку дифференциальные и инкрементальные копии используют подключ своей полной резервной копии.
  • Слабые подключи резервных копий и соли удаляются по мере истечения срока хранения резервных копий и WAL, созданных до обновления. Копии с длительным сроком хранения сохраняют их до истечения этого срока.

Выпущен pgBackRest 2.59.3

4 октября 2026

Сообщество pgBackRest радо объявить о выпуске pgBackRest 2.59.3 — новой версии надёжного и простого в использовании решения для резервного копирования и восстановления, которое легко масштабируется для работы с крупнейшими базами данных и самыми высокими нагрузками.

pgBackRest предоставляет широкий набор надёжных средств управления инфраструктурой резервного копирования и восстановления: параллельное резервное копирование и восстановление, полные, дифференциальные и инкрементные резервные копии, инкрементное копирование на уровне блоков, несколько репозиториев, дельта-восстановление, параллельное асинхронное архивирование, защиту от вредоносных программ и программ-вымогателей, контрольные суммы отдельных файлов, проверку контрольных сумм страниц при резервном копировании (если они включены), несколько типов сжатия, шифрование, возобновление частично выполненного или прерванного резервного копирования, копирование с резервного сервера, поддержку табличных пространств и ссылок, поддержку S3/Azure/GCS/SFTP, удаление резервных копий по сроку хранения, локальную и удалённую работу через SSH или TLS, гибкую конфигурацию и многое другое.

pgBackRest можно установить из репозитория PostgreSQL Yum или репозитория PostgreSQL APT ; пакеты также доступны для многих других дистрибутивов. Исходный код можно загрузить со страницы выпусков .

Исправления ошибок

  • Исправлена возможная генерация слабых подключей шифрования и солей (j0uinim)
  • Исправлена возможная ошибка контрольной суммы при загрузке зашифрованных информационных файлов и манифестов (j0uinim)

Дополнительные исправления и улучшения описаны в примечаниях к выпуску 2.59.3 .

Важные примечания

  • В предыдущих версиях при ошибке доступа к системным случайным данным могли генерироваться слабые подключи шифрования и соли. Подробности см. в разделе Слабые подключи шифрования и соли .

Спонсорская поддержка

Этот выпуск стал возможен благодаря щедрой спонсорской поддержке AWS , Supabase , pgEdge , Tiger Data , Percona , Eon , Xata , Dalibo и Data Egret .


Выпущен pgBackRest 2.59.2

27 сентября 2026

Сообщество pgBackRest радо объявить о выпуске pgBackRest 2.59.2 — новой версии надёжного и простого в использовании решения для резервного копирования и восстановления, которое легко масштабируется для работы с крупнейшими базами данных и самыми высокими нагрузками.

pgBackRest предоставляет широкий набор надёжных средств управления инфраструктурой резервного копирования и восстановления: параллельное резервное копирование и восстановление, полные, дифференциальные и инкрементные резервные копии, инкрементное копирование на уровне блоков, несколько репозиториев, дельта-восстановление, параллельное асинхронное архивирование, защиту от вредоносных программ и программ-вымогателей, контрольные суммы отдельных файлов, проверку контрольных сумм страниц при резервном копировании (если они включены), несколько типов сжатия, шифрование, возобновление частично выполненного или прерванного резервного копирования, копирование с резервного сервера, поддержку табличных пространств и ссылок, поддержку S3/Azure/GCS/SFTP, удаление резервных копий по сроку хранения, локальную и удалённую работу через SSH или TLS, гибкую конфигурацию и многое другое.

pgBackRest можно установить из репозитория PostgreSQL Yum или репозитория PostgreSQL APT ; пакеты также доступны для многих других дистрибутивов. Исходный код можно загрузить со страницы выпусков .

Новые возможности и исправления ошибок

  • Поддержка PostgreSQL 19beta4 (David Steele)
  • Исправлена обработка пустой карты блоков при усечении файла до нулевого размера во время резервного копирования (David Steele)
  • Отключены повторные попытки чтения, если драйверу переданы фильтры (David Steele)
  • Исправлена постраничная выдача списка версий S3 (David Steele)
  • Добавлена установка заголовка версии Azure при аутентификации SAS (David Steele)
  • Исправлено зависание асинхронной команды archive-push на файле истории резервного копирования нулевого размера (Andrew Kroh)
  • Исправлена работа команды annotate с удалённым зашифрованным репозиторием (Douglas J Hunley)

Дополнительные исправления и улучшения описаны в примечаниях к выпуску 2.59.2 .

Важные примечания

  • В PostgreSQL 19beta4 изменены форматы pg_control и WAL, поэтому кластеры и WAL более ранних бета-версий 19 больше не поддерживаются. Кластеры, работающие на более ранней бета-версии, следует создать заново с использованием 19beta4.

Спонсорская поддержка

Этот выпуск стал возможен благодаря щедрой спонсорской поддержке AWS , Supabase , pgEdge , Tiger Data , Percona , Eon , Xata , Dalibo и Data Egret .


Выпущен pgBackRest 2.59.1

17 августа 2026

Сообщество pgBackRest радо объявить о выпуске pgBackRest 2.59.1 — новой версии надёжного и простого в использовании решения для резервного копирования и восстановления, которое легко масштабируется для работы с крупнейшими базами данных и самыми высокими нагрузками.

pgBackRest предоставляет широкий набор надёжных средств управления инфраструктурой резервного копирования и восстановления: параллельное резервное копирование и восстановление, полные, дифференциальные и инкрементные резервные копии, инкрементное копирование на уровне блоков, несколько репозиториев, дельта-восстановление, параллельное асинхронное архивирование, защиту от вредоносных программ и программ-вымогателей, контрольные суммы отдельных файлов, проверку контрольных сумм страниц при резервном копировании (если они включены), несколько типов сжатия, шифрование, возобновление частично выполненного или прерванного резервного копирования, копирование с резервного сервера, поддержку табличных пространств и ссылок, поддержку S3/Azure/GCS/SFTP, удаление резервных копий по сроку хранения, локальную и удалённую работу через SSH или TLS, гибкую конфигурацию и многое другое.

pgBackRest можно установить из репозитория PostgreSQL Yum или репозитория PostgreSQL APT ; пакеты также доступны для многих других дистрибутивов. Исходный код можно загрузить со страницы выпусков .

Новые возможности и исправления ошибок

  • Поддержка PostgreSQL 19beta3 (Lardière Sébastien)
  • Исправлено зависание, возникавшее, когда буфер блока меньше входного буфера (David Steele)
  • Новая метка резервной копии теперь сравнивается только с метками в наборе её собственной полной резервной копии (David Steele)
  • Исправлено отсутствие необходимых для сборки файлов в архивах исходного кода, создаваемых GitHub (David Steele)

Дополнительные исправления и улучшения описаны в примечаниях к выпуску 2.59.1 .

Важные примечания

  • В PostgreSQL 19beta3 изменён формат WAL, поэтому WAL, заархивированный в более ранних бета-версиях PostgreSQL 19, больше не читается. Кластеры, работающие на более ранней бета-версии, следует создать заново с использованием 19beta3.

Спонсорская поддержка

Этот выпуск стал возможен благодаря щедрой спонсорской поддержке AWS , Supabase , pgEdge , Tiger Data , Percona , Eon , Xata , Dalibo и Data Egret .


Новый дистрибутивный tar-архив

20 июля 2026

Начиная с pgBackRest 2.59.0 каждый выпуск включает дистрибутивный tar-архив, упрощающий сборку из исходного кода. Он содержит уже сгенерированный исходный код и готовую документацию, поэтому pgBackRest можно собрать и установить без средств генерации кода и документации, необходимых при сборке рабочей копии репозитория git.

Архив содержит исходный код pgBackRest, включая предварительно сгенерированный код, справочную страницу man с описанием команд, документацию HTML и базовый тест работоспособности для проверки сборки. Сборка выполняется с помощью meson и ninja и требует только обычных библиотек pgBackRest.

Архив прилагается к каждому выпуску как файл pgbackrest-{version}.tar.gz вместе с соответствующей контрольной суммой .sha256sum. Его можно загрузить со страницы выпусков на GitHub; инструкции по сборке и тестированию находятся в файле README.md внутри архива.

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


Выпущен pgBackRest 2.59.0

20 июля 2026

Сообщество pgBackRest радо объявить о выпуске pgBackRest 2.59.0 — новой версии надёжного и простого в использовании решения для резервного копирования и восстановления, которое легко масштабируется для работы с крупнейшими базами данных и самыми высокими нагрузками.

pgBackRest предоставляет широкий набор надёжных средств управления инфраструктурой резервного копирования и восстановления: параллельное резервное копирование и восстановление, полные, дифференциальные и инкрементные резервные копии, инкрементное копирование на уровне блоков, несколько репозиториев, дельта-восстановление, параллельное асинхронное архивирование, защиту от вредоносных программ и программ-вымогателей, контрольные суммы отдельных файлов, проверку контрольных сумм страниц при резервном копировании (если они включены), несколько типов сжатия, шифрование, возобновление частично выполненного или прерванного резервного копирования, копирование с резервного сервера, поддержку табличных пространств и ссылок, поддержку S3/Azure/GCS/SFTP, удаление резервных копий по сроку хранения, локальную и удалённую работу через SSH или TLS, гибкую конфигурацию и многое другое.

pgBackRest можно установить из репозитория PostgreSQL Yum или репозитория PostgreSQL APT ; пакеты также доступны для многих других дистрибутивов. Исходный код можно загрузить со страницы выпусков .

Основные новые возможности и улучшения

  • Поддержка PostgreSQL 19 (David Steele)
  • Добавлен параметр archive-expire-before для очистки архива WAL (Stefan Fercot)
  • Добавлена поддержка S3 Outposts (Shiva Kumar Ambigi)
  • Добавлена аутентификация S3 с получением учётных данных через внешний процесс (David Steele)
  • Добавлено кэширование пользователей и групп для ускорения построения манифеста (Gunnar Lindholm)
  • Добавлено повторное подключение к хранилищу SFTP после разрыва сервером неактивного соединения (David Steele)
  • В вывод команды info добавлен ход резервного копирования для каждого репозитория (Will Morland)
  • Добавлено пакетное удаление в хранилище Azure (David Steele)
  • В команду verify добавлены проверки backup.info (Denis Garsh)
  • Добавлена возможность настройки конечной точки S3 STS (Simon Gratton)
  • Добавлена интеграция с механизмом уведомлений systemd notify (Andrew Jackson)
  • При запуске от имени root без включённого allow-root теперь выдаётся ошибка (David Steele)
  • Асинхронная команда archive-push теперь завершается при первой ошибке (David Steele)

Дополнительные возможности и улучшения описаны в примечаниях к выпуску 2.59.0 .

Важные примечания

  • По умолчанию от имени root можно запускать только команду restore. Для запуска остальных команд от имени root используется allow-root (хотя это не рекомендуется).
  • Для упрощения подготовки пакетов к каждому выпуску прилагается новый дистрибутивный tar-архив с предварительно сгенерированными документацией, страницей man и кодом. Подробнее см. Новый дистрибутивный tar-архив .
  • Добавлена новая необязательная зависимость от libsystemd.

Спонсорская поддержка

Этот выпуск стал возможен благодаря щедрой спонсорской поддержке AWS , Supabase , pgEdge , Tiger Data , Percona , Eon , Xata , Dalibo и Data Egret .


Разработка pgBackRest продолжится!

18 мая 2026

Рад сообщить, что разработка pgBackRest продолжится! За последние несколько недель группа спонсоров объединилась для финансирования дальнейшей разработки. Благодаря их поддержке проект больше не зависит от одного спонсора, что обеспечивает pgBackRest необходимую долгосрочную стабильность.

Хочу поблагодарить каждого из наших спонсоров:

Amazon Web Services предоставляет облачные вычислительные ресурсы по запросу частным лицам, компаниям и государственным организациям. Доступны вычислительные мощности, хранилища, базы данных, машинное обучение и более 200 сервисов с оплатой только за использованные ресурсы. Компания помогает клиентам расти и инвестирует в сообщества, частью которых мы являемся.

Supabase — полноценная платформа для серверной части приложений на базе PostgreSQL, которая позволяет разработчикам быстро создавать и масштабировать приложения, не занимаясь управлением инфраструктурой. Она включает базу данных Postgres, аутентификацию пользователей, подписки в реальном времени, файловое хранилище, периферийные и бессерверные функции; всё это поддерживает активное сообщество разработчиков открытого ПО.

pgEdge — корпоративная платформа Postgres с открытым исходным кодом для ИИ, высокой доступности и других задач. Она включает встроенные средства агентного ИИ и рабочую среду администратора баз данных, мониторинг и реагирование на инциденты, гибкое развёртывание и обслуживание без простоя. Платформа масштабируется от одного узла до конфигурации с несколькими ведущими узлами в режиме active-active в облаке, на собственной инфраструктуре или в изолированных от сети средах.

Tiger Data , создатели TimescaleDB, разрабатывает базу данных временных рядов с открытым исходным кодом на основе PostgreSQL и предоставляет Tiger Cloud — управляемую платформу для временных рядов, аналитики и задач ИИ. Варианты с самостоятельным управлением и облачные решения позволяют организациям собирать, хранить и анализировать большие объёмы временных рядов как на периферийных узлах, так и в централизованных облачных развёртываниях.

Percona разрабатывает открытое программное обеспечение для баз данных, оказывает поддержку и предоставляет услуги, помогая организациям сохранять полный контроль над своей инфраструктурой данных. Компания помогает предприятиям безопасно и эффективно использовать MySQL, PostgreSQL, MongoDB, Valkey и Redis благодаря свободно доступному ПО с открытым исходным кодом, экспертной поддержке 24/7 и практическому опыту работы с базами данных.

Eon.io — интеллектуальная облачная инфраструктура для резервного копирования, восстановления и управления данными. Она помогает командам эффективнее хранить резервные копии и обращаться к ним, предоставляя доступ к данным для аналитики и процессов ИИ. Решение обеспечивает быстрое восстановление отдельных объектов и значительно снижает затраты на хранение для Postgres и задач с интенсивной обработкой данных во всех облаках, в том числе при восстановлении после случайной потери данных и регрессий, вызванных агентами ИИ.

Эти организации используют pgBackRest для надёжного аварийного восстановления своих продуктов и систем клиентов. Их инвестиции отражают важнейшую роль pgBackRest в экосистеме PostgreSQL, а совместная поддержка обеспечивает устойчивость проекта в долгосрочной перспективе.

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


Новости о сопровождении

4 мая 2026

После объявления о прекращении сопровождения pgBackRest на меня обрушился поток писем. На их разбор ушло немало времени: во многих были добрые пожелания и слова благодарности за многолетнюю работу.

Но вскоре стала понятна общая картина. Многие пользователи pgBackRest, особенно те, кто сами поддерживают пользователей pgBackRest, хотели бы продолжения проекта со мной в роли основного сопровождающего. Я и сам очень этого хочу, но после месяцев поиска финансирования уже решил, что это невозможно.

Теперь ситуация изменилась, и, по всей видимости, мне почти наверняка удастся получить достаточно средств для продолжения проекта. На этот раз pgBackRest будет финансировать группа спонсоров, чтобы покупка одной компании больше не влияла на мою возможность работать над проектом. Ожидается, что мы также сможем привлечь ещё одного сопровождающего, чтобы распределить нагрузку и обеспечить преемственность в будущем.

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

Рассчитываю сделать более определённое заявление к концу недели. До тех пор прошу подождать: мы активно работаем над возобновлением разработки pgBackRest.


Сопровождение pgBackRest прекращено

27 апреля 2026

Кратко: сопровождение pgBackRest прекращено. Если вы создаёте ответвление pgBackRest, пожалуйста, выберите для своего проекта новое имя.

После долгих размышлений я решил прекратить работу над pgBackRest. Это решение далось мне нелегко. Последние тринадцать лет pgBackRest был проектом, которому я отдавал душу. Большую часть этого времени мне повезло получать поддержку компаний, но было и немало поздних вечеров и выходных, которые я вместе со множеством участников потратил на то, чтобы pgBackRest стал таким, какой он сегодня. Каждый разработчик открытого ПО прекрасно понимает, о чём я говорю и сколько жизни уходит на дорогой сердцу проект.

После продажи Crunchy Data я продолжал сопровождать pgBackRest и искал работу, которая позволила бы мне заниматься им дальше, но пока безуспешно. Поиск спонсорской поддержки также принёс значительно меньше средств, чем необходимо для жизнеспособности проекта.

Как и всем, мне нужно зарабатывать на жизнь, а выбор работы, связанной с pgBackRest, очень ограничен. Теперь я могу рассматривать более широкий круг предложений, но они не оставят времени на pgBackRest: сопровождение, исправление ошибок, рецензирование PR, ответы на обращения и прочие задачи требуют немало времени. И это ещё без разработки новых возможностей — того, что я люблю больше всего. Думаю, лучше полностью остановиться, чем работать некачественно или от случая к случаю.

Полагаю, со временем у pgBackRest появится ответвление, но это будет новый проект с новыми сопровождающими, которым предстоит заслужить доверие так же, как это сделали мы.

Ещё раз огромное спасибо всем, кто участвовал в разработке pgBackRest за эти годы. Мне было приятно работать с вами!

2 - Руководство пользователя (Debian/Ubuntu)

Пошаговое руководство по настройке и использованию pgBackRest в системах Debian и Ubuntu.

Введение

Это руководство следует читать последовательно от начала до конца: каждый раздел опирается на предыдущий. Например, раздел Восстановление предполагает настройку, выполненную в разделе Быстрый старт . После установки и запуска pgBackRest можно переходить между разделами, но при первом знакомстве рекомендуется пройти руководство по порядку.

Хотя примеры в этом руководстве рассчитаны на Debian/Ubuntu и PostgreSQL 17, их должно быть довольно легко адаптировать к любому дистрибутиву Unix и любой версии PostgreSQL. От ОС зависят только команды создания, запуска, остановки и удаления кластеров PostgreSQL. Команды pgBackRest одинаковы во всех системах Unix, хотя расположение исполняемого файла может различаться. pgBackRest стремится работать одинаково с разными версиями PostgreSQL, однако между ними есть небольшие различия, которые могут проявляться в отдельных примерах этого руководства, например в путях, именах файлов и настройках PostgreSQL.

Сведения о настройке и документация PostgreSQL доступны в руководстве PostgreSQL .

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

Все команды рассчитаны на выполнение непривилегированным пользователем с правами sudo для пользователей root и postgres. Команды также можно без изменений выполнять непосредственно от имени соответствующих пользователей; в этом случае префиксы sudo можно убрать.


Основные понятия

Ниже приведены определения понятий в контексте pgBackRest, PostgreSQL и этого руководства.

Резервная копия

Резервная копия — это согласованная копия кластера баз данных, которую можно восстановить после аппаратного сбоя, для возврата к определённому моменту времени или для запуска нового резервного сервера.

Полная резервная копия: pgBackRest копирует в резервную копию всё содержимое кластера баз данных. Первая резервная копия кластера всегда является полной. pgBackRest всегда может восстановить полную резервную копию непосредственно. Её согласованность не зависит от файлов за пределами самой полной резервной копии.

Дифференциальная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней полной резервной копии. При восстановлении дифференциальной резервной копии pgBackRest копирует все файлы выбранной дифференциальной копии и соответствующие неизменившиеся файлы предыдущей полной копии. Преимущество дифференциальной копии в том, что она занимает меньше места, чем полная, однако для её восстановления должны быть исправны как дифференциальная, так и полная резервная копия.

Инкрементная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней резервной копии (другой инкрементной, дифференциальной или полной). Поскольку инкрементная копия включает лишь файлы, изменившиеся после предыдущей копии, она обычно значительно меньше полной или дифференциальной. Как и в случае дифференциальной копии, восстановление инкрементной копии зависит от исправности других резервных копий. Поскольку инкрементная копия содержит только файлы, изменившиеся после последней копии, для её восстановления должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей дифференциальной, сама эта дифференциальная копия и предшествующая полная копия. Если дифференциальной копии нет, должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей полной копии, наличие которой обязательно, а также сама полная копия.

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

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

Журнал предзаписи (WAL)

WAL — механизм, с помощью которого PostgreSQL гарантирует сохранность зафиксированных изменений. Транзакции последовательно записываются в WAL; транзакция считается зафиксированной после того, как эти записи сброшены на диск. Затем фоновый процесс записывает изменения в основные файлы кластера баз данных (также называемые кучей). После аварийного завершения WAL воспроизводится, чтобы привести базу данных в согласованное состояние.

Концептуально WAL бесконечен, но на практике он разбит на отдельные файлы размером 16MB, называемые сегментами. Имена сегментов WAL имеют вид 0000000100000A1E000000FE: первые 8 шестнадцатеричных цифр обозначают временную шкалу, а следующие 16 — логический порядковый номер (LSN).

Шифрование

Шифрование — это преобразование данных в формат, который невозможно распознать без соответствующего пароля (также называемого парольной фразой).

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


Обновление pgBackRest

Обновление pgBackRest с v2.x до v2.y

Обновление с v2.x до v2.y несложно. Формат репозитория не изменился, поэтому в большинстве установок достаточно установить исполняемые файлы новой версии. Понижение версии также возможно, если не использовались новые функции, которые не поддерживаются старой версией.

ВАЖНО:

Локальная и удалённая версии pgBackRest должны в точности совпадать, поэтому их следует обновлять одновременно. При несовпадении версий архивирование WAL и резервное копирование не будут работать, пока версии не совпадут. В этом случае выводится ошибка: [ProtocolError] expected value '2.x' for greeting key 'version' but got '2.y'.


Сборка

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

Сборку из исходного кода лучше выполнять на отдельном сервере сборки, а не в рабочей среде. Многие необходимые для сборки инструменты обычно не следует устанавливать в рабочей среде. pgBackRest состоит из одного исполняемого файла, поэтому после сборки его легко скопировать на другой сервер.

build ⇒ Загрузить pgBackRest версии 2.59.3 в каталог /build

mkdir -p /build
curl -fsSL \
       https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.3/pgbackrest-2.59.3.tar.gz | \
       tar zx -C /build

build ⇒ Установить зависимости для сборки

sudo apt-get install python3-distutils meson gcc libpq-dev libssl-dev libxml2-dev \
       pkg-config liblz4-dev libzstd-dev libbz2-dev libz-dev libssh2-1-dev libsystemd-dev

build ⇒ Настроить и скомпилировать pgBackRest

meson setup /build/pgbackrest /build/pgbackrest-2.59.3
ninja -C /build/pgbackrest

build ⇒ При необходимости запустить базовые тесты, чтобы проверить правильность сборки pgBackRest

meson test -C /build/pgbackrest --suite smoke
ninja: Entering directory `/build/pgbackrest'
ninja: no work to do.
1/1 smoke OK               11.07s


       [filtered 7 lines of output]

Установка

Для демонстрационного кластера и выполнения примеров pgBackRest создаётся новый сервер с именем pg-primary.

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

Пакеты pgBackRest для Debian/Ubuntu доступны на apt.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-primary ⇒ Установить зависимости

sudo apt-get install postgresql-client libxml2 libssh2-1

pg-primary ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-primary ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Теперь pgBackRest должен быть установлен правильно, но лучше это проверить. Если какие-либо зависимости пропущены, при запуске pgBackRest из командной строки возникнет ошибка.

pg-primary ⇒ Убедиться в успешной установке

sudo -u postgres pgbackrest
pgBackRest 2.59.3 - General help

Usage:
    pgbackrest [options] [command]

Commands:
    annotate        add or modify backup annotation
    archive-get     get a WAL segment from the archive
    archive-push    push a WAL segment to the archive
    backup          backup a database cluster
    check           check the configuration
    expire          expire backups that exceed retention
    help            get help
    info            retrieve information about backups
    repo-get        get a file from a repository
    repo-ls         list files in a repository
    restore         restore a database cluster
    server          pgBackRest server
    server-ping     ping pgBackRest server
    stanza-create   create the required stanza data
    stanza-delete   delete a stanza
    stanza-upgrade  upgrade a stanza
    start           allow pgBackRest processes to run
    stop            stop pgBackRest processes from running
    verify          verify contents of a repository
    version         get version

Use 'pgbackrest help [command]' for more information.

Быстрый старт

В разделе «Быстрый старт» рассматривается базовая настройка pgBackRest и PostgreSQL, а также команды backup, restore и info.

Создание демонстрационного кластера

Создавать демонстрационный кластер необязательно, но настоятельно рекомендуется, особенно новым пользователям: команды в примерах этого руководства обращаются именно к нему. Предполагается, что демонстрационный кластер работает на порту по умолчанию (5432). Кластер будет запущен в одном из следующих разделов, поскольку сначала нужно завершить настройку.

pg-primary ⇒ Создать демонстрационный кластер

sudo -u postgres /usr/lib/postgresql/17/bin/initdb \
       -D /var/lib/postgresql/17/demo -k -A peer
sudo pg_createcluster 17 demo
Configuring already existing cluster (configuration: /etc/postgresql/17/demo, data: /var/lib/postgresql/17/demo, owner: 102:103)
Ver Cluster Port Status Owner    Data directory              Log file
17  demo    5432 down   postgres /var/lib/postgresql/17/demo /var/log/postgresql/postgresql-17-demo.log

Настройка stanza кластера

Stanza — это конфигурация кластера баз данных PostgreSQL, определяющая его расположение, способ резервного копирования, параметры архивирования и т. д. На большинстве серверов баз данных работает только один кластер PostgreSQL, поэтому достаточно одной stanza. На серверах резервного копирования требуется отдельная stanza для каждого кластера, резервные копии которого нужно создавать.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных этого кластера. Поскольку имя stanza будет использоваться для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, например main или prod.

Имя «demo» точно отражает назначение этого кластера, поэтому подходит и в качестве имени stanza.

pgBackRest должен знать расположение основного каталога данных кластера PostgreSQL. Путь можно запросить непосредственно у PostgreSQL, но при восстановлении процесс PostgreSQL будет недоступен. Во время резервного копирования значение, переданное pgBackRest, сравнивается с путём, который использует работающий PostgreSQL: они должны совпадать, иначе резервное копирование завершится ошибкой. Убедитесь, что pg-path в точности совпадает с data_directory, возвращаемым PostgreSQL.

По умолчанию Debian/Ubuntu хранит кластеры в /var/lib/postgresql/[version]/[cluster], поэтому правильный путь к каталогу данных определить легко.

При создании файла /etc/pgbackrest/pgbackrest.conf владелец базы данных (обычно postgres) должен получить права на его чтение.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог данных кластера PostgreSQL

[demo]

pg1-path=/var/lib/postgresql/17/demo

Файлы конфигурации pgBackRest используют формат, похожий на INI в Windows. Секции обозначаются текстом в квадратных скобках, каждая секция содержит пары ключ/значение. Строки, начинающиеся с #, игнорируются и могут использоваться как комментарии, но комментарии после значения в той же строке не поддерживаются. Кавычки не поддерживаются, пробельные символы по краям ключей и значений удаляются. Повторно встречающиеся секции объединяются.

Файлы конфигурации pgBackRest могут загружаться несколькими способами:

  • config и config-include-path имеют значения по умолчанию: загружается файл конфигурации по умолчанию, если он существует, затем добавляются файлы *.conf из каталога включаемой конфигурации по умолчанию, если они существуют.
  • Указан параметр config: загружается только указанный файл конфигурации; он должен существовать.
  • Указан config-include-path: загружаются файлы *.conf из каталога включаемой конфигурации; сам каталог должен существовать. Файл конфигурации по умолчанию загружается, если он существует. Чтобы загрузить только файлы из указанного каталога включаемой конфигурации, можно также передать параметр --no-config.
  • Указаны config и config-include-path: используются заданные пользователем значения; загружается файл конфигурации, затем добавляются файлы *.conf из каталога включаемой конфигурации. Файлы должны существовать.
  • Указан config-path: эта настройка переопределяет базовый путь к файлу конфигурации по умолчанию и/или базовый путь настройки config-include-path по умолчанию, если параметры config и/или config-include-path не заданы явно.

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

  • [stanza:command]
  • [stanza]
  • [global:command]
  • [global]

ПРИМЕЧАНИЕ:

--config, --config-include-path и --config-path доступны только в командной строке.

pgBackRest также можно настраивать через переменные среды (пример ниже); эти переменные действуют для таких команд, как backup , restore и archive-push .

pg-primary ⇒ Настроить log-path через переменную среды

sudo -u postgres bash -c ' \
       export PGBACKREST_LOG_PATH=/path/set/by/env && \
       pgbackrest --log-level-console=error help backup log-path'
pgBackRest 2.59.3 - 'backup' command - 'log-path' option help

Path where log files are stored.

The log path provides a location for pgBackRest to store log files. Note that
if log-level-file=off then no log path is required.

current: /path/set/by/env
default: /var/log/pgbackrest

Создание репозитория

Репозиторий — место, где pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить необходимое место может быть непросто. Лучше всего создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за сутки. Это даст общее представление о требуемом месте, хотя со временем требования, скорее всего, будут меняться по мере развития базы данных.

В этом примере репозиторий будет храниться на том же сервере, что и PostgreSQL. Это простейшая конфигурация; она полезна, когда для резервного копирования сервера баз данных используется обычное ПО резервного копирования.

pg-primary ⇒ Создать репозиторий pgBackRest

sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest

Путь к репозиторию необходимо настроить, чтобы pgBackRest знал, где его искать.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить путь к репозиторию pgBackRest

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-path=/var/lib/pgbackrest

Можно настроить и несколько репозиториев. Подробности см. в разделе Несколько репозиториев .

Настройка архивирования

Для резервного копирования работающего кластера PostgreSQL должно быть включено архивирование WAL. Через %p PostgreSQL указывает расположение сегмента WAL, который нужно архивировать. Обратите внимание: в ходе резервного копирования создаётся как минимум один сегмент WAL, даже если в кластер явно ничего не записывается.

pg-primary:/etc/postgresql/17/demo/postgresql.conf ⇒ Настроить параметры архивирования

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

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

pg-primary ⇒ Перезапустить демонстрационный кластер

sudo pg_ctlcluster 17 demo restart

Настройка hot_standby включена по умолчанию; её следует оставлять включённой на всех кластерах. В дальнейшем любой кластер может быть восстановлен как резервный, например первичный сервер, заново созданный в качестве резервного после переключения при отказе. Без этой настройки резервный сервер не принимает соединения для чтения.

Если ожидается, что архивирование сегмента WAL в репозиторий pgBackRest займёт более 60 секунд (значение по умолчанию), следует увеличить параметр pgBackRest archive-timeout. Это не то же самое, что параметр PostgreSQL archive_timeout, который принудительно переключает сегмент WAL и полезен для баз данных с длительными периодами отсутствия активности. Дополнительные сведения о параметре PostgreSQL archive_timeout см. в разделе Журнал предзаписи документации PostgreSQL.

Для команды archive-push можно задать отдельные параметры. Например, меньший уровень сжатия может ускорить архивирование, не влияя на сжатие резервных копий.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить archive-push на меньший уровень сжатия

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-path=/var/lib/pgbackrest



[global:archive-push]

compress-level=3

Этот способ настройки применим к любой команде и даже к конкретной stanza, например demo:archive-push.

Настройка срока хранения

pgBackRest удаляет устаревшие резервные копии на основании параметров срока хранения.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить хранение 2 полных резервных копий

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2



[global:archive-push]

compress-level=3

Дополнительные сведения приведены в разделе Срок хранения .

Настройка шифрования репозитория

Для демонстрации шифрования в репозитории будут настроены тип шифра и ключ. Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3 или другое объектное хранилище) поддерживает шифрование.

В качестве ключа шифрования важно использовать длинную случайную парольную фразу. Подходящий способ её создания — команда openssl rand -base64 48.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить шифрование репозитория pgBackRest

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2



[global:archive-push]

compress-level=3

ПРИМЕЧАНИЕ:

Выше настройки шифрования размещены в секции [global], чтобы команда info могла читать все stanza. Без параметра stanza команда info читает настройки шифрования только из секции [global], поэтому при настройке шифрования для отдельных stanza для чтения зашифрованной stanza требуется параметр stanza.

После настройки репозитория, создания и проверки stanza изменить настройки шифрования репозитория нельзя.

Создание stanza

Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.

pg-primary ⇒ Создать stanza и проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=415-9c2d1500 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: stanza-create for stanza 'demo' on repo1
P00   INFO: stanza-create command end: completed successfully

Проверка конфигурации

Команда check проверяет, правильно ли настроены pgBackRest и параметр archive_command для архивирования и резервного копирования указанной stanza. Она попытается проверить все репозитории и базы данных, настроенные для сервера, на котором выполняется. Команда выявляет ошибки конфигурации, особенно архивирования, из-за которых резервные копии оказываются неполными, поскольку необходимые сегменты WAL не попали в архив. Команду можно выполнять на сервере PostgreSQL или сервере репозитория. Её также можно выполнять на резервном сервере, однако, поскольку на нём нельзя вызвать pg_switch_xlog()/pg_switch_wal(), в этом случае проверяется только конфигурация репозитория.

Обратите внимание: для принудительного архивирования сегмента WAL в PostgreSQL вызываются pg_create_restore_point('pgBackRest Archive Check') и pg_switch_xlog()/pg_switch_wal().

pg-primary ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=424-7270037b --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000001 successfully archived to '/var/lib/pgbackrest/archive/demo/17-1/0000000100000000/000000010000000000000001-e8eb01b8d8aaf321d368dc8edf5b559247841eb1.gz' on repo1
P00   INFO: check command end: completed successfully

Настройка производительности

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

  • compress-type — определяет алгоритм сжатия для команд backup и archive-push. По умолчанию используется gz (Gzip), но рекомендуется zst (Zstandard): он гораздо быстрее и обеспечивает степень сжатия, близкую к gz. Значение zst поддерживается параметром compress-type начиная с v2.27 . Подробности см. в разделе Тип сжатия .
  • repo-bundle — объединяет небольшие файлы при резервном копировании, экономя место и ускоряя команды backup и restore, особенно в объектных хранилищах, таких как S3. Параметр repo-bundle появился в v2.39 . Подробности см. в разделе Пакетирование файлов .
  • repo-block — при резервном копировании diff/incr командой backup сохраняет только изменившиеся части файлов, а не файлы целиком. Это экономит место и ускоряет backup. Параметр repo-block появился в v2.46 , но рекомендуется как минимум v2.52.1 . Подробности см. в разделе Блочное инкрементное копирование .

Есть и другие параметры производительности, отключённые по умолчанию, поскольку они требуют дополнительной настройки или значение по умолчанию безопасно, но не оптимально. Эти параметры доступны во всех версиях pgBackRest v2.

  • process-max — определяет количество процессов, используемых командами. Значение по умолчанию — 1, и оно почти никогда не является подходящим. Каждая команда использует process-max по-своему; подробности см. в документации соответствующей команды.
  • archive-async — архивирует файлы WAL в репозиторий пакетами, что значительно ускоряет архивирование. По умолчанию отключён, поскольку требует создания каталога очереди. Подробности см. в разделе Асинхронное архивирование .
  • backup-standby — выполняет резервное копирование с резервного сервера вместо первичного, снижая нагрузку на первичный сервер. По умолчанию отключён, поскольку требует дополнительной настройки и наличия одного или нескольких резервных серверов. Подробности см. в разделе Резервное копирование с резервного сервера .

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

По умолчанию pgBackRest перед началом резервного копирования ждёт следующей плановой контрольной точки. В зависимости от настроек checkpoint_timeout и checkpoint_segments в PostgreSQL до завершения контрольной точки и начала резервного копирования может пройти немало времени. Обычно лучше задать start-fast=y, чтобы резервное копирование начиналось сразу. Это принудительно создаёт контрольную точку, но, поскольку резервные копии обычно создаются раз в сутки, дополнительная контрольная точка не должна заметно влиять на производительность. Однако на очень нагруженных кластерах может быть лучше передавать --start-fast в командной строке по мере необходимости.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить быстрый запуск резервного копирования

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=451-67e8eca3 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 000000010000000000000002, lsn = 0/2000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 000000010000000000000002:000000010000000000000003
P00   INFO: new backup label = 20261002-190624F
P00   INFO: full backup size = 22MB, file total = 963
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=451-67e8eca3 --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo

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

Параметр type позволяет явно указать полное или дифференциальное резервное копирование.

pg-primary ⇒ Создать дифференциальную резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 7 lines of output]
P00   INFO: check archive for segment(s) 000000010000000000000004:000000010000000000000005
P00   INFO: new backup label = 20261002-190624F_20261002-190626D
P00   INFO: diff backup size = 8.3KB, file total = 963
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=477-af59c897 --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo

На этот раз предупреждения не было, поскольку полная резервная копия уже существовала. Инкрементные копии могут опираться на полную или дифференциальную копию, а дифференциальные должны опираться на полную. Для создания полной копии выполните команду backup с --type=full.

Во время резервного копирования работающего кластера pgBackRest ожидает архивирования сегментов WAL, необходимых для согласованности резервной копии. Время ожидания задаётся параметром pgBackRest archive-timeout, значение которого по умолчанию составляет 60 секунд. Если известно, что архивирование отдельного сегмента занимает больше времени, этот параметр следует увеличить.

Планирование резервного копирования

Резервное копирование можно запускать по расписанию с помощью таких утилит, как cron.

В следующем примере настроены два задания cron: полное резервное копирование каждое воскресенье в 6:30 утра и дифференциальное в 6:30 утра с понедельника по субботу. Если этот crontab устанавливается впервые посреди недели, при первом запуске задания дифференциального копирования pgBackRest создаст полную копию, а на следующий день — дифференциальную.

#m h   dom mon dow   command
30 06  *   *   0     pgbackrest --type=full --stanza=demo backup
30 06  *   *   1-6   pgbackrest --type=diff --stanza=demo backup

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

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

Для получения сведений о резервных копиях используйте команду info.

pg-primary ⇒ Получить сведения о демонстрационном кластере

sudo -u postgres pgbackrest info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (17): 000000010000000000000001/000000010000000000000005

        full backup: 20261002-190624F
            timestamp start/stop: 2026-10-02 19:06:24+00 / 2026-10-02 19:06:26+00
            wal start/stop: 000000010000000000000002 / 000000010000000000000003
            database size: 22MB, database backup size: 22MB
            repo1: backup set size: 2.9MB, backup size: 2.9MB

        diff backup: 20261002-190624F_20261002-190626D
            timestamp start/stop: 2026-10-02 19:06:26+00 / 2026-10-02 19:06:28+00
            wal start/stop: 000000010000000000000004 / 000000010000000000000005
            database size: 22MB, database backup size: 8.3KB
            repo1: backup set size: 2.9MB, backup size: 448B
            backup reference total: 1 full

Команда info работает с одной stanza или со всеми stanza. По умолчанию используется текстовый вывод, который содержит удобную для чтения сводку резервных копий запрошенных stanza. Этот формат может измениться в любом выпуске.

Для машиночитаемого вывода используйте --output=json. Вывод JSON содержит намного больше сведений, чем текстовый, и остаётся стабильным, если только не обнаружена ошибка.

Чтобы ускорить выполнение, ограничьте вывод сведениями о ходе выполнения, указав --detail-level=progress. При этом пропускаются все проверки, кроме проверки доступности stanza.

Для каждой stanza выводится отдельный раздел; параметром --stanza можно ограничить вывод одной stanza. Поле «status» кратко отражает состояние stanza. Значение «ok» означает, что pgBackRest работает нормально. При наличии нескольких репозиториев статус «mixed» указывает на проблемы со stanza в одном или нескольких репозиториях; в этом случае её состояние подробно приводится для каждого репозитория. Если ошибка репозитория не соответствует ни одному из известных кодов ошибок, используется код «other» и выводятся полные сведения об ошибке. Поле «wal archive min/max» показывает минимальный и максимальный WAL, хранящиеся в архиве; при наличии нескольких репозиториев оно охватывает их все, если не задан параметр --repo. Учтите, что из-за политик срока хранения архива или по другим причинам в последовательности могут быть пропуски.

Если на сервере сейчас выполняется одна из соответствующих команд, рядом со сведениями «status» появляются сообщения «backup/expire running» и/или «restore running». В текстовом выводе также отображается ход выполнения по каждому репозиторию, а в вывод JSON добавляется массив «repo».

Резервные копии выводятся от старых к новым. Самая старая копия всегда полная (обозначается F в конце метки), а самая новая может быть полной, дифференциальной (метка оканчивается на D) или инкрементной (оканчивается на I).

Поле «timestamp start/stop» задаёт период выполнения резервного копирования. По «timestamp stop» можно выбрать копию для восстановления на определённый момент времени. Дополнительные сведения приведены в разделе Восстановление на определённый момент времени .

Поле «wal start/stop» определяет диапазон WAL, необходимый для приведения базы данных в согласованное состояние при восстановлении. Перед завершением команда backup убеждается, что этот диапазон WAL есть в архиве.

Поле «database size» — полный размер базы данных без сжатия, а «database backup size» — объём данных базы, которые фактически нужно скопировать (для полных копий эти значения совпадают).

Поле «repo» указывает, в каком репозитории находится копия. Поле «backup set size» включает все файлы этой копии и тех копий репозитория, на которые она ссылается и которые необходимы для восстановления базы данных из неё, а «backup size» — только файлы самой этой копии (для полных копий эти значения также совпадают). Если в pgBackRest включено сжатие, размеры в репозитории учитывают сжатый размер файлов.

Поле «backup reference total» содержит сводку дополнительных резервных копий, необходимых для восстановления этой копии. Чтобы вывести полный список ссылок, используйте параметр --set.

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

Резервные копии защищают от ряда аварийных ситуаций; наиболее распространены аппаратные сбои и повреждение данных. Простейший способ имитировать повреждение данных — удалить важный файл кластера PostgreSQL.

pg-primary ⇒ Остановить демонстрационный кластер и удалить файл pg_control

sudo pg_ctlcluster 17 demo stop
sudo -u postgres rm /var/lib/postgresql/17/demo/global/pg_control

При запуске кластера без этого важного файла возникнет ошибка.

pg-primary ⇒ Попытаться запустить повреждённый демонстрационный кластер

sudo pg_ctlcluster 17 demo start
Error: /usr/lib/postgresql/17/bin/pg_ctl /usr/lib/postgresql/17/bin/pg_ctl start -D /var/lib/postgresql/17/demo -l /var/log/postgresql/postgresql-17-demo.log -s -o  -c config_file="/etc/postgresql/17/demo/postgresql.conf"  exited with status 1:
postgres: could not find the database system
Expected to find it in the directory "/var/lib/postgresql/17/demo",
but could not open file "/var/lib/postgresql/17/demo/global/pg_control": No such file or directory
Examine the log output.

Чтобы восстановить резервную копию кластера PostgreSQL, запустите pgBackRest с командой restore. Кластер необходимо остановить (в данном случае он уже остановлен), а из каталога данных PostgreSQL удалить все файлы.

pg-primary ⇒ Удалить старые файлы демонстрационного кластера

sudo -u postgres find /var/lib/postgresql/17/demo -mindepth 1 -delete

pg-primary ⇒ Восстановить демонстрационный кластер и запустить PostgreSQL

sudo -u postgres pgbackrest --stanza=demo restore
sudo pg_ctlcluster 17 demo start

На этот раз кластер успешно запустился, поскольку при восстановлении был возвращён отсутствующий файл pg_control.

Дополнительные сведения о команде restore приведены в разделе Восстановление .


Мониторинг

Мониторинг — важная часть любой рабочей системы. Доступно множество инструментов, и с небольшой доработкой любой из них можно использовать для мониторинга pgBackRest.

pgBackRest может выводить сведения о репозитории в формате JSON, включая список всех резервных копий для каждой stanza и сведения об архиве WAL.

В PostgreSQL

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

pg-primary ⇒ Загрузить функцию получения сведений pgBackRest для PostgreSQL

sudo -u postgres cat \
       /var/lib/postgresql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql
-- An example of monitoring pgBackRest from within PostgreSQL
--
-- Use copy to export data from the pgBackRest info command into the jsonb
-- type so it can be queried directly by PostgreSQL.

-- Create monitor schema
create schema monitor;

-- Get pgBackRest info in JSON format
create function monitor.pgbackrest_info()
    returns jsonb AS $$
declare
    data jsonb;
begin
    -- Create a temp table to hold the JSON data
    create temp table temp_pgbackrest_data (data text);

    -- Copy data into the table directly from the pgBackRest info command
    copy temp_pgbackrest_data (data)
        from program
            'pgbackrest --output=json info' (format text);

    select replace(temp_pgbackrest_data.data, E'\n', '\n')::jsonb
      into data
      from temp_pgbackrest_data;

    drop table temp_pgbackrest_data;

    return data;
end $$ language plpgsql;
sudo -u postgres psql -f \
       /var/lib/postgresql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql

Теперь с помощью функции monitor.pgbackrest_info() можно узнать время последней успешной резервной копии и архивированный WAL для stanza.

pg-primary ⇒ Запросить время последней успешной резервной копии и архивированный WAL

sudo -u postgres cat \
       /var/lib/postgresql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
-- Get last successful backup for each stanza
--
-- Requires the monitor.pgbackrest_info function.
with stanza as
(
    select data->'name' as name,
           data->'backup'->(
               jsonb_array_length(data->'backup') - 1) as last_backup,
           data->'archive'->(
               jsonb_array_length(data->'archive') - 1) as current_archive
      from jsonb_array_elements(monitor.pgbackrest_info()) as data
)
select name,
       to_timestamp(
           (last_backup->'timestamp'->>'stop')::numeric) as last_successful_backup,
       current_archive->>'max' as last_archived_wal
  from stanza;
sudo -u postgres psql -f \
       /var/lib/postgresql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
  name  | last_successful_backup |    last_archived_wal
--------+------------------------+--------------------------
 "demo" | 2026-10-02 19:06:28+00 | 000000010000000000000005
(1 row)

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

jq — утилита командной строки, с помощью которой легко извлекать данные из JSON.

pg-primary ⇒ Установить утилиту jq

sudo apt-get install jq

Теперь с помощью jq можно запросить время последней успешной резервной копии для stanza.

pg-primary ⇒ Запросить время последней успешной резервной копии

sudo -u postgres pgbackrest --output=json --stanza=demo info | \
       jq '.[0] | .backup[-1] | .timestamp.stop'
1790967988

Или последний архивированный WAL.

pg-primary ⇒ Запросить последний архивированный WAL

sudo -u postgres pgbackrest --output=json --stanza=demo info | \
       jq '.[0] | .archive[-1] | .max'
"000000010000000000000005"

ПРИМЕЧАНИЕ:

Для этого синтаксиса требуется jq v1.5.

ПРИМЕЧАНИЕ:

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


Резервное копирование

Если настроено несколько репозиториев, pgBackRest создаёт резервную копию в репозитории с наивысшим приоритетом (например, repo1), если не указан параметр --repo.

У pgBackRest нет встроенного планировщика, поэтому лучше запускать его из cron или другого планировщика.

Дополнительные сведения и примеры см. в разделе Создание резервной копии .

Пакетирование файлов

Объединение файлов в пакеты в репозитории экономит время резервного копирования и часть места в репозитории. Это особенно заметно, когда репозиторий находится в объектном хранилище, таком как S3, или в файловой системе с большим размером блока. Создание отдельного файла в объектном хранилище занимает больше времени, а хранение очень маленьких файлов может стоить столько же, сколько хранение более крупных.

Пакетирование файлов включается параметром repo-bundle.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-bundle

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Без пакетирования файлов каталог полной резервной копии содержит 1000+ файлов, а с пакетированием их общее количество значительно уменьшается. Дополнительное преимущество: файлы нулевой длины не сохраняются (кроме записи в манифесте), тогда как при обычном резервном копировании каждый такой файл хранится отдельно.

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full backup

pg-primary ⇒ Проверить общее количество файлов

sudo -u postgres find /var/lib/pgbackrest/backup/demo/latest/ -type f | wc -l
5

Для настройки можно использовать параметры repo-bundle-size и repo-bundle-limit, хотя значения по умолчанию должны быть оптимальными в большинстве случаев.

Хотя пакетирование файлов обычно эффективнее, оно затрудняет ручное извлечение файлов из репозитория. Для хранилища с дедупликацией оно может быть не лучшим выбором: каждая полная резервная копия размещает файлы в пакетах по-разному. Наконец, копирование пакетов файлов нельзя возобновить, поэтому не следует задавать слишком большое значение repo-bundle-limit.

Блочное инкрементное копирование

Блочные инкрементные резервные копии экономят место: сохраняются лишь части файла, изменившиеся после предыдущей резервной копии, а не весь файл.

Блочное инкрементное копирование включается параметром repo-block и наиболее эффективно, когда включено для всех типов резервных копий. Пакетирование файлов также должно быть включено.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-block

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Аннотации резервных копий

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

pg-primary ⇒ Создать полную резервную копию с аннотациями

sudo -u postgres pgbackrest --stanza=demo --annotation=source="demo backup" \
       --annotation=key=value --type=full backup

В текстовом выводе команды info аннотации отображаются, когда резервная копия указана через --set; в выводе JSON они присутствуют всегда.

pg-primary ⇒ Получить сведения о демонстрационном кластере

sudo -u postgres pgbackrest --stanza=demo --set=20261002-190643F info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (17): 000000020000000000000007/000000020000000000000009

        full backup: 20261002-190643F
            timestamp start/stop: 2026-10-02 19:06:43+00 / 2026-10-02 19:06:44+00
            wal start/stop: 000000020000000000000008 / 000000020000000000000009
            lsn start/stop: 0/8000028 / 0/9000050
            database size: 22MB, database backup size: 22MB
            repo1: backup size: 2.9MB
            database list: postgres (5)
            annotation(s)
                key: value
                source: demo backup

Аннотации, заданные в команде backup, впоследствии можно добавлять, изменять или удалять с помощью команды annotate.

pg-primary ⇒ Изменить аннотации резервной копии

sudo -u postgres pgbackrest --stanza=demo --set=20261002-190643F \
       --annotation=key= --annotation=new_key=new_value annotate
sudo -u postgres pgbackrest --stanza=demo --set=20261002-190643F info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (17): 000000020000000000000007/000000020000000000000009

        full backup: 20261002-190643F
            timestamp start/stop: 2026-10-02 19:06:43+00 / 2026-10-02 19:06:44+00
            wal start/stop: 000000020000000000000008 / 000000020000000000000009
            lsn start/stop: 0/8000028 / 0/9000050
            database size: 22MB, database backup size: 22MB
            repo1: backup size: 2.9MB
            database list: postgres (5)
            annotation(s)
                new_key: new_value
                source: demo backup

Срок хранения

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

pgBackRest выполняет ротацию полных резервных копий в зависимости от типа срока хранения: по количеству или по периоду времени. Если задано количество, при удалении учитывается не время создания копий, а то, сколько их нужно сохранить. Дифференциальные копии хранятся по количеству, но всегда удаляются при удалении полной копии, от которой зависят. Инкрементные копии не удаляются по сроку хранения независимо: они всегда удаляются вместе со связанной полной или дифференциальной копией. Подробности и примеры см. в разделах Хранение полных резервных копий и Хранение дифференциальных резервных копий .

По умолчанию архивированный WAL сохраняется для резервных копий, срок хранения которых не истёк. Этот порядок можно изменить отдельно для каждого репозитория параметрами retention-archive, хотя делать это не рекомендуется. Подробности и примеры см. в разделе Хранение архива .

Команда expire автоматически выполняется после каждого успешного резервного копирования; её также может запускать пользователь. При ручном запуске удаление выполняется в соответствии с настройками срока хранения каждого настроенного репозитория. Если передан параметр --repo, удаление выполняется только в указанном репозитории. Пользователь может также ограничить удаление конкретным набором резервной копии с помощью --set; если при этом не указан --repo, поиск выполняется во всех репозиториях и удаляются все совпадающие наборы. Следует учитывать, что при каждом запуске expire проверяется и применяется политика хранения архива.

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

Параметр repo1-retention-full-type определяет, как интерпретировать repo1-retention-full: как количество сохраняемых полных резервных копий или как число дней их хранения. Удаление выполняется только после завершения новых резервных копий. То есть при repo1-retention-full-type=count и repo1-retention-full=2 перед удалением самой старой копии будут храниться три полные копии; при repo1-retention-full-type=time и repo1-retention-full=20 для начала удаления должна существовать хотя бы одна полная копия возрастом не менее 20 дней.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-full

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Для резервного копирования задано repo1-retention-full=2, но пока существует только одна полная копия, поэтому создание следующей полной копии не приведёт к удалению полных копий.

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full \
       --log-level-console=detail backup
       [filtered 975 lines of output]
P00   INFO: repo1: remove expired backup 20261002-190641F
P00 DETAIL: repo1: 17-1 archive retention on backup 20261002-190643F, start = 000000020000000000000008
P00   INFO: repo1: 17-1 remove archive, start = 000000020000000000000007, stop = 000000020000000000000007
P00   INFO: expire command end: completed successfully

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

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full \
       --log-level-console=info backup
       [filtered 11 lines of output]
P00   INFO: repo1: expire full backup 20261002-190643F
P00   INFO: repo1: remove expired backup 20261002-190643F
P00   INFO: repo1: 17-1 remove archive, start = 000000020000000000000008, stop = 00000002000000000000000A
P00   INFO: expire command end: completed successfully

Полная резервная копия 20261002-190624F удаляется, а хранение архива теперь определяется копией 20261002-190646F, которая стала самой старой полной копией.

Хранение дифференциальных резервных копий

Установите repo1-retention-diff равным нужному количеству дифференциальных резервных копий. Дифференциальные копии зависят только от предыдущей полной копии, поэтому можно создать «скользящий» набор дифференциальных копий за последние сутки или более длительный период. Это обеспечивает быстрое восстановление на недавние моменты времени и при этом уменьшает общий расход места.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=1

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Для резервного копирования задано repo1-retention-diff=1, поэтому прежде, чем одна дифференциальная копия будет удалена, нужно создать две. Для демонстрации удаления инкрементной копии добавляется инкрементное резервное копирование; в данном случае её удаление зависит от удаления дифференциальной копии.

pg-primary ⇒ Создать дифференциальную и инкрементную резервные копии

sudo -u postgres pgbackrest --stanza=demo --type=diff backup
sudo -u postgres pgbackrest --stanza=demo --type=incr backup

Теперь создание дифференциальной резервной копии приведёт к удалению предыдущих дифференциальной и инкрементной копий, оставив только одну дифференциальную.

pg-primary ⇒ Создать дифференциальную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 10 lines of output]
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=956-fb652d58 --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=demo
P00   INFO: repo1: expire diff backup set 20261002-190648F_20261002-190650D, 20261002-190648F_20261002-190651I
P00   INFO: repo1: remove expired backup 20261002-190648F_20261002-190651I
P00   INFO: repo1: remove expired backup 20261002-190648F_20261002-190650D
P00   INFO: expire command end: completed successfully

Хранение архива

Хотя pgBackRest автоматически удаляет архивированные сегменты WAL при удалении устаревших резервных копий (по умолчанию WAL полных копий удаляется на основании параметра repo1-retention-full), для экономии дискового пространства может быть полезно удалять архив более активно. При хранении архива дифференциальных копий полные копии также считаются дифференциальными.

При удалении архива никогда не удаляются сегменты WAL, необходимые для согласованности резервной копии. Однако восстановление на определённый момент времени (PITR) возможно только при непрерывном потоке WAL, поэтому при агрессивном удалении архива вне обычного процесса удаления резервных копий следует соблюдать осторожность. Чтобы узнать, что будет удалено, ничего фактически не удаляя, можно передать в командной строке параметр dry-run команде expire.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

pg-primary ⇒ Создать дифференциальную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 6 lines of output]
P00   INFO: backup stop archive = 000000020000000000000017, lsn = 0/17000050
P00   INFO: check archive for segment(s) 000000020000000000000016:000000020000000000000017
P00   INFO: new backup label = 20261002-190648F_20261002-190654D
P00   INFO: diff backup size = 8.3KB, file total = 963
P00   INFO: backup command end: completed successfully
       [filtered 2 lines of output]

pg-primary ⇒ Удалить устаревший архив

sudo -u postgres pgbackrest --stanza=demo --log-level-console=detail \
       --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
P00   INFO: expire command begin 2.59.3: --exec-id=1037-f7b8ca1a --log-level-console=detail --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=2 --repo1-retention-full=2 --stanza=demo
P00 DETAIL: repo1: 17-1 archive retention on backup 20261002-190646F, start = 00000002000000000000000B, stop = 00000002000000000000000B
P00 DETAIL: repo1: 17-1 archive retention on backup 20261002-190648F, start = 00000002000000000000000C, stop = 00000002000000000000000D
P00 DETAIL: repo1: 17-1 archive retention on backup 20261002-190648F_20261002-190652D, start = 000000020000000000000012, stop = 000000020000000000000013
P00 DETAIL: repo1: 17-1 archive retention on backup 20261002-190648F_20261002-190654D, start = 000000020000000000000016
P00   INFO: repo1: 17-1 remove archive, start = 00000002000000000000000E, stop = 000000020000000000000011
P00   INFO: repo1: 17-1 remove archive, start = 000000020000000000000014, stop = 000000020000000000000015
P00   INFO: expire command end: completed successfully

У дифференциальной копии 20261002-190648F_20261002-190652D есть архивированные сегменты WAL, которые необходимо сохранить для согласованности старых копий, хотя продвинуть их дальше с помощью PITR уже нельзя. Сегменты WAL, созданные после 20261002-190648F_20261002-190652D, но до 20261002-190648F_20261002-190654D, удаляются. Сегменты, созданные после новой копии 20261002-190648F_20261002-190654D, остаются и могут использоваться для PITR.

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


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

По умолчанию команда восстановления автоматически выбирает последнюю резервную копию из первого репозитория, в котором есть копии (см. Быстрый старт — Восстановление резервной копии ). Порядок проверки репозиториев определяется файлом pgbackrest.conf (например, repo1 проверяется раньше repo2). Для выбора конкретного репозитория можно передать --repo (например, --repo=1). Если нужна не последняя резервная копия, можно передать параметр --set.

При PITR с --type=time или --type=lsn целевое время или LSN необходимо указать с помощью параметра --target. Если --set не задан, настроенные репозитории проверяются по порядку: выбирается резервная копия, время завершения которой предшествует целевому времени или LSN завершения которой меньше либо равен целевому LSN. Если подходящая копия не найдена, pgBackRest выдаёт ошибку как для --type=time, так и для --type=lsn; перехода к последней резервной копии не происходит. Для других типов PITR, например xid, необходимо указать параметр --set, если цель предшествует последней резервной копии. Подробнее и с примерами см. Восстановление на заданный момент времени .

В соответствии с рекомендацией PostgreSQL слоты репликации не включаются в резервную копию. Дополнительные сведения см. в разделе Резервное копирование каталога данных документации PostgreSQL.

В следующих разделах рассматриваются дополнительные возможности команды restore.

Владельцы файлов

Если restore выполняется от имени пользователя, отличного от root (обычный случай), все восстановленные файлы будут принадлежать пользователю и группе, от имени которых запущен pgBackRest. Если существующие файлы принадлежат другому пользователю или группе и сменить владельца на пользователя и группу процесса не удаётся, возникает ошибка. В этом случае перед повторной попыткой восстановления привилегированный пользователь должен изменить владельца файлов.

Если restore выполняется от имени root, pgBackRest пытается восстановить владельцев, записанных в манифест при создании резервной копии. В манифесте хранятся только имена пользователей и групп, поэтому на сервере восстановления должны существовать те же имена. Если имя пользователя или группы локально не найдено, используется пользователь или группа каталога данных PostgreSQL, а если их не удаётся сопоставить с именем — root.

Параметр delta

В разделе Восстановление резервной копии главы Быстрый старт перед выполнением restore требовалось очистить каталог кластера баз данных. Параметр delta позволяет pgBackRest автоматически определить, какие файлы в каталоге кластера можно сохранить, а какие нужно восстановить из резервной копии. Он также удаляет файлы, отсутствующие в манифесте копии, устраняя расходящиеся изменения. Для этого вычисляется криптографический хеш SHA-1 каждого файла в каталоге кластера. Если хеш SHA-1 не совпадает с хешем в резервной копии, файл восстанавливается. Эта операция очень эффективна в сочетании с параметром process-max. Поскольку на время восстановления сервер PostgreSQL остановлен, можно использовать больше процессов, чем было бы желательно при резервном копировании работающего сервера PostgreSQL.

pg-primary ⇒ Остановить демонстрационный кластер и выполнить дельта-восстановление

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo --delta \
       --log-level-console=detail restore
       [filtered 2 lines of output]
P00 DETAIL: check '/var/lib/postgresql/17/demo' exists
P00 DETAIL: remove 'global/pg_control' so cluster will not start if restore does not complete
P00   INFO: remove invalid files/links/paths from '/var/lib/postgresql/17/demo'
P00 DETAIL: remove invalid file '/var/lib/postgresql/17/demo/backup_label.old'
P00 DETAIL: remove invalid file '/var/lib/postgresql/17/demo/base/1/pg_internal.init'
       [filtered 769 lines of output]
P01 DETAIL: restore file /var/lib/postgresql/17/demo/base/1/113 - exists and matches backup (bundle 20261002-190648F/1/2665832, 8KB, 88.00%) checksum 1cd643347b87a472ff001ae124e4b532ce998d2f
P01 DETAIL: restore file /var/lib/postgresql/17/demo/base/1/112 - exists and matches backup (bundle 20261002-190648F/1/2665920, 8KB, 88.03%) checksum 2cbd5cf8fb22ef627eb539776c5ec7457bdb2890
P01 DETAIL: restore file /var/lib/postgresql/17/demo/PG_VERSION - exists and matches backup (bundle 20261002-190648F/1/2666008, 3B, 88.03%) checksum ad48103e4fc71796e9708cafc43adeed0d1076b7
P01 DETAIL: restore file /var/lib/postgresql/17/demo/base/5/2608_fsm - exists and matches backup (bundle 20261002-190648F/1/2666032, 24KB, 88.14%) checksum e807fe622bbfccc5e9ad7f453ecb4f0eaccb75e2
P01 DETAIL: restore file /var/lib/postgresql/17/demo/postgresql.auto.conf - exists and matches backup (bundle 20261002-190648F/1/2666272, 229B, 88.14%) checksum e1b0002d9a33d70466c5a348f4e0c1f1f80639f6
       [filtered 233 lines of output]

pg-primary ⇒ Перезапустить PostgreSQL

sudo pg_ctlcluster 17 demo start

Восстановление выбранных баз данных

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

Для демонстрации этой возможности создаются две базы данных: test1 и test2.

pg-primary ⇒ Создать две тестовые базы данных

sudo -u postgres psql -c "create database test1;"
CREATE DATABASE
sudo -u postgres psql -c "create database test2;"
CREATE DATABASE

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

pg-primary ⇒ Создать тестовую таблицу в каждой базе данных

sudo -u postgres psql -c "create table test1_table (id int); \
       insert into test1_table (id) values (1);" test1
CREATE TABLE
INSERT 0 1
sudo -u postgres psql -c "create table test2_table (id int); \
       insert into test2_table (id) values (2);" test2
CREATE TABLE
INSERT 0 1

Создаётся новая резервная копия, чтобы pgBackRest получил сведения о новых базах данных.

pg-primary ⇒ Создать резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=incr backup

Одна из основных причин использовать выборочное восстановление — экономия места. Здесь показан размер базы test1, чтобы его можно было сравнить с расходом дискового пространства после выборочного восстановления.

pg-primary ⇒ Показать место, занимаемое базой test1

sudo -u postgres du -sh /var/lib/postgresql/17/demo/base/32768
7.4M	/var/lib/postgresql/17/demo/base/32768

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

pg-primary ⇒ Показать список баз данных в резервной копии

sudo -u postgres pgbackrest --stanza=demo \
       --set=20261002-190648F_20261002-190702I info
       [filtered 12 lines of output]
            repo1: backup size: 1.9MB
            backup reference list: 20261002-190648F, 20261002-190648F_20261002-190654D
            database list: postgres (5), test1 (32768), test2 (32769)

Остановите кластер и восстановите только базу test2. Встроенные базы (template0, template1 и postgres) восстанавливаются всегда.

ПРЕДУПРЕЖДЕНИЕ:

Если не указать --type=immediate, восстановление может завершиться ошибкой. Причина в том, что после достижения согласованности PostgreSQL считает обнулённые страницы ошибкой даже при записи полной страницы. В PostgreSQL ≥ 13 можно использовать настройку ignore_invalid_pages, чтобы игнорировать некорректные страницы. В этом случае после восстановления важно проверить журналы и убедиться, что сообщений о некорректных страницах в выбранных базах данных нет.

pg-primary ⇒ Восстановить последнюю резервную копию, включив только базу test2

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo --delta \
       --db-include=test2 --type=immediate --target-action=promote restore
sudo pg_ctlcluster 17 demo start

После завершения восстановления база test2 будет содержать все ранее созданные таблицы и данные.

pg-primary ⇒ Продемонстрировать восстановление базы test2

sudo -u postgres psql -c "select * from test2_table;" test2
 id
----
  2
(1 row)

База test1, несмотря на успешное восстановление, недоступна. Причина в том, что вся база была восстановлена в виде разреженных обнулённых файлов. PostgreSQL может успешно применить WAL к таким файлам, но база в целом будет некорректна, поскольку ключевые файлы не содержат данных. Это сделано намеренно, чтобы исключить случайное использование базы, которая может содержать лишь часть данных, применённых при воспроизведении WAL.

pg-primary ⇒ Попытка подключиться к базе test1 приведёт к ошибке

sudo -u postgres psql -c "select * from test1_table;" test1
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  relation mapping file "base/32768/pg_filenode.map" contains invalid data

Поскольку база test1 восстанавливается в виде разреженных обнулённых файлов, она займёт лишь столько места, сколько WAL будет записано при восстановлении. Объём WAL, создаваемого во время резервного копирования и применяемого при восстановлении, может быть значительным, но обычно составляет небольшую долю полного размера базы, особенно для крупных баз, где эта возможность наиболее полезна.

Очевидно, что при выборочном восстановлении база test1 занимает гораздо меньше места, чем при полном восстановлении базы.

pg-primary ⇒ Показать место, занимаемое базой test1 после восстановления

sudo -u postgres du -sh /var/lib/postgresql/17/demo/base/32768
8.0K	/var/lib/postgresql/17/demo/base/32768

На этом этапе единственное действие, которое можно выполнить с некорректной базой test1, — drop database. pgBackRest не удаляет базу автоматически, поскольку это невозможно до завершения восстановления и появления доступа к кластеру.

pg-primary ⇒ Удалить базу test1

sudo -u postgres psql -c "drop database test1;"
DROP DATABASE

После удаления некорректной базы test1 остаются только test2 и встроенные базы.

pg-primary ⇒ Показать оставшиеся базы данных

sudo -u postgres psql -c "select oid, datname from pg_database order by oid;"
  oid  |  datname
-------+-----------
     1 | template1
     4 | template0
     5 | postgres
 32769 | test2
(4 rows)

Восстановление на определённый момент времени

В разделе Восстановление резервной копии главы Быстрый старт использовалось восстановление по умолчанию — воспроизведение WAL до самого конца потока. При аппаратном сбое это обычно лучший вариант, но при повреждении данных, вызванном машиной или человеком, часто уместнее восстановление на определённый момент времени (PITR).

Восстановление на определённый момент времени (PITR) позволяет воспроизвести WAL из резервной копии до заданного LSN, времени, идентификатора транзакции или точки восстановления. В типичных сценариях восстановление по времени, пожалуй, наиболее полезно. Частый случай — восстановление случайно удалённой таблицы или данных. Восстановление удалённой таблицы нагляднее, поэтому здесь используется именно такой пример, но удалённые данные восстанавливаются точно так же.

pg-primary ⇒ Создать таблицу с очень важными данными

sudo -u postgres psql -c "begin; \
       create table important_table (message text); \
       insert into important_table values ('Important Data'); \
       commit; \
       select * from important_table;"
       [filtered 4 lines of output]
    message
----------------
 Important Data
(1 row)

Важно задавать время так, как его понимает PostgreSQL, и включать смещение часового пояса. Это уменьшает вероятность нежелательного преобразования часовых поясов и неожиданного результата восстановления.

pg-primary ⇒ Получить время из PostgreSQL

sudo -u postgres psql -Atc "select current_timestamp"
2026-10-02 19:07:12.060959+00

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

pg-primary ⇒ Удалить важную таблицу

sudo -u postgres psql -c "begin; \
       drop table important_table; \
       commit; \
       select * from important_table;"
BEGIN
DROP TABLE
COMMITERROR:  relation "important_table" does not exist
LINE 1: ...le important_table;     commit;     select * from important_...
                                                             ^

Если для восстановления выбрана неверная резервная копия, восстановление на нужный момент времени завершится неудачей. Для демонстрации создаётся новая инкрементная копия, в которой important_table уже отсутствует.

pg-primary ⇒ Создать инкрементную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=incr backup
sudo -u postgres pgbackrest info
       [filtered 38 lines of output]
            backup reference total: 1 full, 1 diff

        incr backup: 20261002-190648F_20261002-190713I
            timestamp start/stop: 2026-10-02 19:07:13+00 / 2026-10-02 19:07:14+00
            wal start/stop: 00000004000000000000001A / 00000004000000000000001A
       [filtered 2 lines of output]

Восстановить потерянную таблицу из этой копии не получится, поскольку PostgreSQL может воспроизводить изменения только вперёд, но не назад.

pg-primary ⇒ Попытаться восстановить данные из неподходящей резервной копии

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo --delta \
       --set=20261002-190648F_20261002-190713I --target-timeline=current \
       --type=time "--target=2026-10-02 19:07:12.060959+00" --target-action=promote restore
sudo pg_ctlcluster 17 demo start
       [filtered 13 lines of output]
LOG:  database system is ready to accept read-only connections
LOG:  redo done at 0/1A000120 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.03 s
FATAL:  recovery ended before configured recovery target was reached
LOG:  startup process (PID 1437) exited with exit code 1
LOG:  terminating any other active server processes
       [filtered 3 lines of output]

Надёжный способ — позволить pgBackRest автоматически выбрать копию, из которой возможно восстановление на целевой момент времени, то есть копию, завершившуюся до указанного времени.

ПРИМЕЧАНИЕ:

pgBackRest не может автоматически выбрать копию при типе восстановления xid или name.

pg-primary ⇒ Восстановить демонстрационный кластер на момент 2026-10-02 19:07:12.060959+00

sudo -u postgres pgbackrest --stanza=demo --delta \
       --type=time "--target=2026-10-02 19:07:12.060959+00" \
       --target-action=promote restore
sudo -u postgres cat /var/lib/postgresql/17/demo/postgresql.auto.conf
       [filtered 9 lines of output]
# Recovery settings generated by pgBackRest restore on 2026-10-02 19:07:16
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
recovery_target_time = '2026-10-02 19:07:12.060959+00'
recovery_target_action = 'promote'

pgBackRest сформировал настройки восстановления в postgresql.auto.conf, поэтому PostgreSQL можно запустить сразу. Через %f PostgreSQL указывает нужный сегмент WAL, а через %p — место, куда его следует скопировать. После того как PostgreSQL завершит восстановление, таблица снова будет существовать и к ней можно будет обращаться с запросами.

pg-primary ⇒ Запустить PostgreSQL и проверить наличие важной таблицы

sudo pg_ctlcluster 17 demo start
sudo -u postgres psql -c "select * from important_table"
    message
----------------
 Important Data
(1 row)

Журнал PostgreSQL также содержит полезные сведения. В нём указаны время и транзакция, на которых остановилось восстановление, а также время последней применённой транзакции.

pg-primary ⇒ Просмотреть журнал PostgreSQL

sudo -u postgres cat /var/log/postgresql/postgresql-17-demo.log
       [filtered 7 lines of output]
LOG:  restored log file "00000004.history" from archive
LOG:  restored log file "000000040000000000000019" from archive
LOG:  starting point-in-time recovery to 2026-10-02 19:07:12.060959+00
LOG:  restored log file "00000003.history" from archive
LOG:  redo starts at 0/19000028
       [filtered 2 lines of output]
LOG:  database system is ready to accept read-only connections
LOG:  restored log file "00000004000000000000001A" from archive
LOG:  recovery stopping before commit of transaction 748, time 2026-10-02 19:07:13.389359+00
LOG:  redo done at 0/1901CC00 system usage: CPU: user: 0.00 s, system: 0.01 s, elapsed: 0.07 s
LOG:  last completed transaction was at log time 2026-10-02 19:07:10.778316+00
LOG:  restored log file "000000040000000000000019" from archive
LOG:  selected new timeline ID: 5
       [filtered 5 lines of output]

Удаление stanza

Команда stanza-delete удаляет из репозитория данные, связанные со stanza.

ПРЕДУПРЕЖДЕНИЕ:

Используйте эту команду с осторожностью: она безвозвратно удаляет из репозитория pgBackRest все резервные копии и архивы указанной stanza.

Чтобы удалить stanza:

  • Остановите кластер PostgreSQL, связанный со stanza (или используйте –force для обхода этого требования).
  • Выполните команду stop на сервере, где будет запущена stanza-delete.
  • Выполните команду stanza-delete.

После успешного завершения команды пользователь должен самостоятельно удалить stanza из всех файлов конфигурации pgBackRest и/или переменных среды.

За один раз stanza можно удалить только из одного репозитория. Чтобы удалить stanza из нескольких репозиториев, повторите команду stanza-delete для каждого из них, указав параметр --repo.

pg-primary ⇒ Остановить удаляемый кластер PostgreSQL

sudo pg_ctlcluster 17 demo stop

pg-primary ⇒ Остановить pgBackRest для stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stop
P00   INFO: stop command begin 2.59.3: --exec-id=1568-4c984637 --log-level-console=info --no-log-timestamp --stanza=demo
P00   INFO: stop command end: completed successfully

pg-primary ⇒ Удалить stanza из одного репозитория

sudo -u postgres pgbackrest --stanza=demo --repo=1 \
       --log-level-console=info stanza-delete
P00   INFO: stanza-delete command begin 2.59.3: --exec-id=1576-48368d9e --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo=1 --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: stanza-delete command end: completed successfully

Несколько репозиториев

Можно настроить несколько репозиториев, как показано в разделе Поддержка S3 . Одно из возможных преимуществ — локальный репозиторий для быстрого восстановления и удалённый для избыточности.

Некоторые команды, например stanza-create /stanza-upgrade , автоматически работают со всеми настроенными репозиториями. Для других, например stanza-delete , репозиторий нужно указать параметром repo.

Для обратной совместимости параметр repo не требуется, если настроен только repo1. Однако, если единственный репозиторий настроен, например, как repo2, параметр repo обязателен. Это позволяет избежать нарушения работы команд при последующем добавлении нового репозитория.

Команда archive-push всегда отправляет WAL в архивы всех настроенных репозиториев. Если один репозиторий недоступен, WAL всё равно отправляется в остальные. Однако для эффективной работы необходимо включить archive-async=y; иначе остальные репозитории смогут опередить недоступный лишь на один сегмент WAL. Также учтите: если WAL не удаётся отправить в какой-либо репозиторий, PostgreSQL не удалит его из каталога pg_wal, из-за чего на томе может закончиться место.

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


Поддержка объектных хранилищ, совместимых с Azure

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с Azure. Контейнер для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне контейнера (/), но обычно лучше использовать вложенный путь, чтобы в том же контейнере можно было хранить журналы объектного хранилища и другие данные без конфликтов.

ПРЕДУПРЕЖДЕНИЕ:

Не включайте «иерархическое пространство имён»: это приведёт к ошибкам при удалении устаревших копий.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить Azure

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

start-fast=y



[global:archive-push]

compress-level=3

Для использования подписей общего доступа задайте параметру repo2-azure-key-type значение sas, а параметру repo2-azure-key — токен подписи общего доступа.

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

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=1657-1f40c982 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo2-type=azure --stanza=demo
P00   INFO: stanza-create for stanza 'demo' on repo1
P00   INFO: stanza-create for stanza 'demo' on repo2
P00   INFO: stanza-create command end: completed successfully

Создание файлов в Azure происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=2 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=1666-1ab08562 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo=2 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo2-type=azure --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001B, lsn = 0/1B000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001B:00000005000000000000001B
P00   INFO: new backup label = 20261002-190727F
P00   INFO: full backup size = 29.2MB, file total = 1265
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=1666-1ab08562 --log-level-console=info --no-log-timestamp --repo=2 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo2-type=azure --stanza=demo

Поддержка объектных хранилищ, совместимых с S3

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с S3. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить S3

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

start-fast=y



[global:archive-push]

compress-level=3

ПРИМЕЧАНИЕ:

Регион и конечную точку необходимо настроить в соответствии с расположением бакета. Здесь приведены значения для региона us-east-1.

Для запуска pgBackRest следует создать роль, а права доступа к бакету следует максимально ограничить. Если роль связана с экземпляром AWS, при repo3-s3-key-type=auto pgBackRest автоматически получает временные учётные данные, поэтому явно задавать ключи в /etc/pgbackrest/pgbackrest.conf не требуется.

Этот пример политики Amazon S3 ограничивает все операции чтения и записи указанным бакетом и путём репозитория.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "demo-repo"
                    ],
                    "s3:delimiter": [
                        "/"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "demo-repo/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket/demo-repo/*"
            ]
        }
    ]
}

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

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
       [filtered 4 lines of output]
P00   INFO: stanza 'demo' already exists on repo2 and is valid
P00   INFO: stanza-create for stanza 'demo' on repo3
P00   INFO: stanza-create command end: completed successfully

Создание файлов в S3 происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=3 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=1767-6031c435 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo2-type=azure --repo3-type=s3 --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001D, lsn = 0/1D000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001D:00000005000000000000001D
P00   INFO: new backup label = 20261002-190741F
P00   INFO: full backup size = 29.2MB, file total = 1265
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=1767-6031c435 --log-level-console=info --no-log-timestamp --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo2-type=azure --repo3-type=s3 --stanza=demo

Поддержка SFTP

pgBackRest поддерживает размещение репозиториев на серверах SFTP. Передача файлов по SFTP относительно медленная, поэтому увеличение process-max для параллельной передачи файлов повышает производительность команд.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить SFTP

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

process-max=4

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

repo4-bundle=y

repo4-path=/demo-repo

repo4-sftp-host=sftp-server

repo4-sftp-host-key-hash-type=sha1

repo4-sftp-host-user=pgbackrest

repo4-sftp-private-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp

repo4-sftp-public-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp.pub

repo4-type=sftp

start-fast=y



[global:archive-push]

compress-level=3

При использовании SFTP, если libssh2 собрана с OpenSSH, параметр repo4-sftp-public-key-file необязателен.

pg-primary ⇒ Создать пару ключей SSH для резервного копирования по SFTP

sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa_sftp \
       -t rsa -b 4096 -N "" -m PEM

sftp-server ⇒ Скопировать открытый ключ pg-primary для резервного копирования по SFTP на sftp-server

sudo -u pgbackrest mkdir -m 750 -p /home/pgbackrest/.ssh
(sudo ssh root@pg-primary cat /var/lib/postgresql/.ssh/id_rsa_sftp.pub) | \
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

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

pg-primary ⇒ Добавить отпечаток sftp-server в файл known_hosts, поскольку значение repo4-sftp-host-key-check-type по умолчанию — «strict»

ssh-keyscan -H sftp-server >> /var/lib/postgresql/.ssh/known_hosts 2>/dev/null

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
       [filtered 6 lines of output]
P00   INFO: stanza 'demo' already exists on repo3 and is valid
P00   INFO: stanza-create for stanza 'demo' on repo4
P00   INFO: stanza-create command end: completed successfully

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=4 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=1859-efaa8e87 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=4 --repo=4 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo4-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp.pub --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --stanza=demo --start-fast
P00   WARN: option 'repo4-retention-full' is not set for 'repo4-retention-full-type=count', the repository may run out of space
            HINT: to retain full backups indefinitely (without warning), set option 'repo4-retention-full' to the maximum.
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001E, lsn = 0/1E000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001E:00000005000000000000001F
P00   INFO: new backup label = 20261002-190759F
P00   INFO: full backup size = 29.2MB, file total = 1265
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=1859-efaa8e87 --log-level-console=info --no-log-timestamp --repo=4 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp.pub --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --stanza=demo
P00   INFO: expire command end: completed successfully

Поддержка объектных хранилищ, совместимых с GCS

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с GCS. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить GCS

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

process-max=4

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

repo4-bundle=y

repo4-path=/demo-repo

repo4-sftp-host=sftp-server

repo4-sftp-host-key-hash-type=sha1

repo4-sftp-host-user=pgbackrest

repo4-sftp-private-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp

repo4-sftp-public-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp.pub

repo4-type=sftp

repo5-gcs-bucket=demo-bucket

repo5-gcs-key=/etc/pgbackrest/gcs-key.json

repo5-path=/demo-repo

repo5-type=gcs

start-fast=y



[global:archive-push]

compress-level=3

При работе в GCE задайте repo5-gcs-key-type=auto, чтобы автоматически проходить аутентификацию через служебную учётную запись экземпляра.

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

Создание файлов в GCS происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.


Целевое время репозитория

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

Хранение версий поддерживается в S3, GCS и Azure, но обычно по умолчанию отключено. Помимо включения версий, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

При указании repo-target-time также необходимо передать параметр repo. Вероятно, не все типы репозиториев поддерживают версии, и в целом для восстановления имеет смысл выбирать один репозиторий.

Обратите внимание: временные метки хранилища сравниваются с указанной меткой по условию <=, а миллисекунды в переданной метке времени отбрасываются.

Для демонстрации этой возможности stanza demo удаляется из репозитория S3.

pg-primary ⇒ Удалить stanza из репозитория S3

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo stop
sudo -u postgres pgbackrest --stanza=demo --repo=3 stanza-delete

После удаления stanza команда info покажет ошибочное состояние репозитория.

pg-primary ⇒ Ошибка при выполнении info

sudo -u postgres pgbackrest --stanza=demo --repo=3 info
stanza: demo
    status: error (missing stanza path)

Однако, поскольку хранилище поддерживает версии, можно посмотреть состояние репозитория до удаления stanza. В зависимости от ситуации определить целевое время бывает непросто, но в данном случае момент удаления stanza можно установить по времени удаления backup.info.

pg-primary ⇒ Показать версии backup.info в бакете

key=demo-repo/backup/demo/backup.info; \
       aws s3api list-object-versions --bucket demo-bucket \
       --prefix $key --output table \
       --query "sort_by([Versions[?Key=='$key'].{Action:'PUT', \
       Modified:LastModified,Object:Key}, \
       DeleteMarkers[?Key=='$key'].{Action:'DELETE', \
       Modified:LastModified,Object:Key}][],&Modified)"
-----------------------------------------------------------------------------
|                            ListObjectVersions                             |
+--------+----------------------------+-------------------------------------+
| Action |         Modified           |               Object                |
+--------+----------------------------+-------------------------------------+
|  PUT   |  2026-10-02T19:07:41.474Z  |  demo-repo/backup/demo/backup.info  |
|  PUT   |  2026-10-02T19:07:56.815Z  |  demo-repo/backup/demo/backup.info  |
|  DELETE|  2026-10-02T19:08:04.878Z  |  demo-repo/backup/demo/backup.info  |
+--------+----------------------------+-------------------------------------+

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

pg-primary ⇒ Выполнить info с целевым временем

sudo -u postgres pgbackrest --stanza=demo --repo=3 \
       --repo-target-time="2026-10-02 19:07:57+00" info
       [filtered 5 lines of output]
        wal archive min/max (17): 00000005000000000000001C/00000005000000000000001D

        full backup: 20261002-190741F
            timestamp start/stop: 2026-10-02 19:07:41+00 / 2026-10-02 19:07:56+00
            wal start/stop: 00000005000000000000001D / 00000005000000000000001D
            repo3: backup set size: 3.8MB, backup size: 3.8MB

Если команда info показывает нужную резервную копию, её можно восстановить с тем же целевым временем.

pg-primary ⇒ Выполнить восстановление с целевым временем

sudo -u postgres pgbackrest --stanza=demo --repo=3 --delta \
       --repo-target-time="2026-10-02 19:07:57+00" --log-level-console=info restore
P00   INFO: restore command begin 2.59.3: --delta --exec-id=1953-a0a01a5a --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=4 --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo5-gcs-bucket=demo-bucket --repo5-gcs-key=<redacted> --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo5-path=/demo-repo --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/postgresql/.ssh/id_rsa_sftp.pub --repo-target-time="2026-10-02 19:07:57+00" --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --repo5-type=gcs --stanza=demo
P00   INFO: repo3: restore backup set 20261002-190741F, recovery will start at 2026-10-02 19:07:41
P00   INFO: remove invalid files/links/paths from '/var/lib/postgresql/17/demo'
P00   INFO: write updated /var/lib/postgresql/17/demo/postgresql.auto.conf
       [filtered 2 lines of output]
sudo pg_ctlcluster 17 demo start

Выделенный сервер репозитория

Конфигурация, описанная в разделе Быстрый старт , подходит для простых установок, но в корпоративных средах обычно используют выделенный сервер репозитория для хранения резервных копий и файлов архива WAL. Так резервные копии и архив WAL отделены от сервера баз данных и меньше страдают при его отказе. При этом по-прежнему полезно применять обычное ПО резервного копирования для самого сервера репозитория.

На серверах PostgreSQL параметр pg1-path должен содержать путь к локальному кластеру PostgreSQL, а pg1-host задавать не следует. При настройке сервера репозитория в файле конфигурации pgbackrest необходимо задать pg-host для подключения к первичному и резервным серверам, если они есть. Сведения более чем об одном сервере PostgreSQL следует указывать только в конфигурации pgbackrest на сервере репозитория. Порядок не важен: например, pg1-path/pg1-host и pg2-path/pg2-host могут соответствовать как первичному, так и резервному серверу.

Установка

Для хранения резервных копий кластера создаётся новый сервер с именем repository.

ПРИМЕЧАНИЕ:

Версия pgBackRest на сервере репозитория должна в точности совпадать с версией на сервере PostgreSQL.

В качестве владельца репозитория pgBackRest создаётся пользователь pgbackrest. Владельцем может быть любой пользователь, но во избежание путаницы лучше не использовать postgres, если он существует.

ПРИМЕЧАНИЕ:

При установке pgBackRest из пакета может предоставляться конфигурация logrotate, например /etc/logrotate.d/pgbackrest, которая выполняет ротацию журналов от имени определённого пользователя через директиву su (например, su postgres postgres). Поскольку файлы в /var/log/pgbackrest принадлежат пользователю, запускающему pgBackRest (здесь pgbackrest), директиву su необходимо изменить так, чтобы она соответствовала этому пользователю, иначе logrotate завершится ошибкой прав доступа.

repository ⇒ Создать пользователя pgbackrest

sudo adduser --disabled-password --gecos "" pgbackrest

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

Пакеты pgBackRest для Debian/Ubuntu доступны на apt.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

repository ⇒ Установить зависимости

sudo apt-get install postgresql-client libxml2 libssh2-1

repository ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

repository ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

repository ⇒ Создать репозиторий pgBackRest

sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest

Настройка SSH без пароля

pgBackRest может использовать SSH без пароля для обмена данными между серверами. Также можно использовать TLS; см. Настройка TLS .

repository ⇒ Создать пару ключей сервера repository

sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.ssh
sudo -u pgbackrest ssh-keygen -f /home/pgbackrest/.ssh/id_rsa \
       -t rsa -b 4096 -N ""

pg-primary ⇒ Создать пару ключей сервера pg-primary

sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa \
       -t rsa -b 4096 -N ""

Обменяйтесь ключами между repository и pg-primary.

repository ⇒ Скопировать открытый ключ pg-primary на repository

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@pg-primary cat /var/lib/postgresql/.ssh/id_rsa.pub) | \
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

pg-primary ⇒ Скопировать открытый ключ repository на pg-primary

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@repository cat /home/pgbackrest/.ssh/id_rsa.pub) | \
       sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys

Проверьте возможность подключения с repository к pg-primary и в обратном направлении.

repository ⇒ Проверить подключение с repository к pg-primary

sudo -u pgbackrest ssh postgres@pg-primary

pg-primary ⇒ Проверить подключение с pg-primary к repository

sudo -u postgres ssh pgbackrest@repository

ПРИМЕЧАНИЕ:

ssh настроен так, чтобы через ssh без пароля разрешался запуск только pgBackRest. Это повышает безопасность на случай захвата одной из служебных учётных записей.

Конфигурация

На сервере репозитория необходимо указать узел pg-primary, пользователя для подключения к нему и путь к базе данных. Первичный сервер будет настроен как pg1, чтобы позднее можно было добавить резервный.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/17/demo



[global]

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

На сервере баз данных необходимо указать сервер и пользователя репозитория. Значение параметра repo1-host-user по умолчанию — pgbackrest. Если пользователь postgres выполняет восстановление на сервере репозитория, лучше не разрешать пользователю postgres также создавать резервные копии. Однако пользователь postgres может читать репозиторий непосредственно, если входит в ту же группу, что и пользователь pgbackrest.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-host/repo1-host-user

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

log-level-file=detail

repo1-host=repository

Настройка PostgreSQL описана в разделе Настройка архивирования .

Команды выполняются так же, как в конфигурации с одним сервером, за исключением того, что некоторые команды, например backup и expire, запускаются на сервере репозитория, а не на сервере баз данных.

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

Создайте stanza в новом репозитории.

repository ⇒ Создать stanza

sudo -u pgbackrest pgbackrest --stanza=demo stanza-create

Проверьте правильность конфигурации и на сервере баз данных, и на сервере репозитория. Дополнительные сведения о команде check см. в разделе Проверка конфигурации .

pg-primary ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo check

repository ⇒ Проверить конфигурацию

sudo -u pgbackrest pgbackrest --stanza=demo check

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

Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup на сервере репозитория.

repository ⇒ Создать резервную копию демонстрационного кластера

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: no prior backup exists, incr backup has been changed to full

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

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

Чтобы восстановить кластер PostgreSQL, запустите pgBackRest с командой restore на сервере баз данных.

pg-primary ⇒ Остановить демонстрационный кластер, восстановить его и перезапустить PostgreSQL

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo --delta restore
sudo pg_ctlcluster 17 demo start

Параллельное резервное копирование и восстановление

pgBackRest поддерживает параллельную обработку для ускорения сжатия и передачи данных. Количество используемых процессов задаётся параметром --process-max.

Обычно для команды backup лучше использовать не более 25% доступных CPU. Резервное копирование не обязательно должно быть очень быстрым, если оно выполняется регулярно; по возможности следует избегать влияния этого процесса на производительность базы данных.

Для команды восстановления можно и следует использовать все доступные CPU, поскольку во время восстановления кластер PostgreSQL остановлен и на сервере обычно не выполняется другая важная работа. Если на сервере несколько кластеров, это следует учитывать при настройке параллелизма восстановления.

repository ⇒ Создать резервную копию одним процессом

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на использование нескольких процессов backup

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/17/demo



[global]

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

repository ⇒ Создать резервную копию несколькими процессами

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

repository ⇒ Получить сведения о резервных копиях демонстрационного кластера

sudo -u pgbackrest pgbackrest info
stanza: demo
    status: ok
    cipher: none

    db (current)
        wal archive min/max (17): 000000070000000000000023/000000070000000000000025

        full backup: 20261002-190844F
            timestamp start/stop: 2026-10-02 19:08:44+00 / 2026-10-02 19:08:48+00
            wal start/stop: 000000070000000000000023 / 000000070000000000000023
            database size: 29.2MB, database backup size: 29.2MB
            repo1: backup set size: 3.8MB, backup size: 3.8MB

        full backup: 20261002-190850F
            timestamp start/stop: 2026-10-02 19:08:50+00 / 2026-10-02 19:08:52+00
            wal start/stop: 000000070000000000000024 / 000000070000000000000025
            database size: 29.2MB, database backup size: 29.2MB
            repo1: backup set size: 3.8MB, backup size: 3.8MB

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


Запуск и остановка

Если резервный сервер повышается до первичного для тестирования или тестовый кластер восстанавливается из резервной копии рабочей среды, полезно запретить этим кластерам запись в репозитории pgBackRest. Для этого служит команда stop.

Команда stop блокирует следующие команды записи: archive-push, backup, expire, stanza-create и stanza-upgrade. Исключение из этого правила — stanza-delete (подробности см. в разделе Удаление stanza ).

pg-primary ⇒ Запретить команды записи pgBackRest

sudo -u postgres pgbackrest stop

Новые команды записи pgBackRest больше не будут запускаться.

repository ⇒ Попытаться создать резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: unable to check pg1: [StopError] raised from remote-0 ssh protocol on 'pg-primary': stop file exists for all stanzas
P00  ERROR: [056]: unable to find primary cluster - cannot proceed
            HINT: are all available clusters in recovery?

Укажите --force, чтобы завершить уже работающие команды записи pgBackRest. Это относится и к асинхронному archive-get (хотя он снова запустится, если потребуется PostgreSQL). Если pgBackRest уже остановлен, повторная остановка выдаст предупреждение.

pg-primary ⇒ Повторно остановить службы pgBackRest

sudo -u postgres pgbackrest stop
P00   WARN: stop file already exists for all stanzas

Снова разрешите команды записи pgBackRest командой start. Команды записи, выполнявшиеся до остановки, не возобновятся автоматически, но теперь их можно запускать.

pg-primary ⇒ Разрешить команды записи pgBackRest

sudo -u postgres pgbackrest start

Также можно остановить pgBackRest для отдельной stanza.

pg-primary ⇒ Запретить команды записи pgBackRest для stanza demo

sudo -u postgres pgbackrest --stanza=demo stop

Новые команды записи pgBackRest для указанной stanza больше не будут запускаться.

repository ⇒ Попытаться создать резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: unable to check pg1: [StopError] raised from remote-0 ssh protocol on 'pg-primary': stop file exists for stanza demo
P00  ERROR: [056]: unable to find primary cluster - cannot proceed
            HINT: are all available clusters in recovery?

При разрешении команд записи pgBackRest для отдельной stanza её также необходимо указать.

pg-primary ⇒ Разрешить команды записи pgBackRest для stanza demo

sudo -u postgres pgbackrest --stanza=demo start

Репликация

Репликация позволяет создать из одного первичного сервера несколько копий кластера PostgreSQL, называемых резервными серверами. Они полезны для распределения нагрузки чтения и обеспечения избыточности на случай отказа первичного сервера.

Установка

Для запуска резервного сервера создаётся новый узел с именем pg-standby.

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

Пакеты pgBackRest для Debian/Ubuntu доступны на apt.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-standby ⇒ Установить зависимости

sudo apt-get install postgresql-client libxml2 libssh2-1

pg-standby ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-standby ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Настройка SSH без пароля

pgBackRest может использовать SSH без пароля для обмена данными между серверами. Также можно использовать TLS; см. Настройка TLS .

pg-standby ⇒ Создать пару ключей сервера pg-standby

sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa \
       -t rsa -b 4096 -N ""

Обменяйтесь ключами между repository и pg-standby.

repository ⇒ Скопировать открытый ключ pg-standby на repository

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@pg-standby cat /var/lib/postgresql/.ssh/id_rsa.pub) | \
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

pg-standby ⇒ Скопировать открытый ключ repository на pg-standby

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@repository cat /home/pgbackrest/.ssh/id_rsa.pub) | \
       sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys

Проверьте возможность подключения с repository к pg-standby и в обратном направлении.

repository ⇒ Проверить подключение с repository к pg-standby

sudo -u pgbackrest ssh postgres@pg-standby

pg-standby ⇒ Проверить подключение с pg-standby к repository

sudo -u postgres ssh pgbackrest@repository

Горячий резерв

Горячий резервный сервер выполняет репликацию через архив WAL и допускает запросы только для чтения.

Конфигурация pgBackRest почти такая же, как на pg-primary, но используется тип восстановления standby, чтобы кластер оставался в режиме восстановления после достижения конца потока WAL.

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на резервном сервере

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

log-level-file=detail

repo1-host=repository

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

pg-standby ⇒ Создать демонстрационный кластер

sudo pg_createcluster 17 demo

Теперь резервный сервер можно создать командой restore.

ВАЖНО:

Если кластер планируется вывести из режима восстановления, не делая его новым первичным сервером (например, для отчётности или тестирования), отключите архивирование с помощью --archive-mode=off или настройки archive_mode=off в postgresql.conf. Если архивирование не отключить, в репозиторий может попасть посторонний WAL, затрудняющий восстановление.

pg-standby ⇒ Восстановить демонстрационный резервный кластер

sudo -u postgres pgbackrest --stanza=demo --delta --type=standby restore
sudo -u postgres cat /var/lib/postgresql/17/demo/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:06:30
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:06:56
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:07:16
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
# Removed by pgBackRest restore on 2026-10-02 19:08:10 # recovery_target_time = '2026-10-02 19:07:12.060959+00'
# Removed by pgBackRest restore on 2026-10-02 19:08:10 # recovery_target_action = 'promote'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:08:10
restore_command = 'pgbackrest --repo=3 --repo-target-time="2026-10-02 19:07:57+00" --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:08:37
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:09:08
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

Эта конфигурация рассчитана на случай, если резервный сервер будет повышен до первичного.

pg-standby:/etc/postgresql/17/demo/postgresql.conf ⇒ Настроить PostgreSQL

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

pg-standby ⇒ Запустить PostgreSQL

sudo pg_ctlcluster 17 demo start

Журнал PostgreSQL содержит полезные сведения о восстановлении. В частности, обратите внимание на сообщения о том, что кластер перешёл в режим резервного сервера и готов принимать соединения только для чтения.

pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске

sudo -u postgres cat /var/log/postgresql/postgresql-17-demo.log
       [filtered 6 lines of output]
LOG:  restored log file "00000007.history" from archive
LOG:  restored log file "000000070000000000000024" from archive
LOG:  entering standby mode
LOG:  redo starts at 0/24000028
LOG:  restored log file "000000070000000000000025" from archive
       [filtered 3 lines of output]

Простой способ проверить правильность настройки репликации — создать таблицу на pg-primary.

pg-primary ⇒ Создать новую таблицу на первичном сервере

sudo -u postgres psql -c " \
       begin; \
       create table replicated_table (message text); \
       insert into replicated_table values ('Important Data'); \
       commit; \
       select * from replicated_table";
       [filtered 4 lines of output]
    message
----------------
 Important Data
(1 row)

Затем запросить ту же таблицу на pg-standby.

pg-standby ⇒ Запросить новую таблицу на резервном сервере

sudo -u postgres psql -c "select * from replicated_table;"
ERROR:  relation "replicated_table" does not exist
LINE 1: select * from replicated_table;
                      ^

Что же пошло не так? Поскольку PostgreSQL получает сегменты WAL для репликации из архива, изменения не будут видны на резервном сервере, пока pg-primary не отправит в архив сегмент WAL, содержащий эти изменения.

Это можно сделать вручную вызовом pg_switch_wal(), который отправляет текущий сегмент WAL в архив (для последующих изменений создаётся новый сегмент WAL).

pg-primary ⇒ Вызвать pg_switch_wal()

sudo -u postgres psql -c "select *, current_timestamp from pg_switch_wal()";
 pg_switch_wal |       current_timestamp
---------------+-------------------------------
 0/26019600    | 2026-10-02 19:09:16.993398+00
(1 row)

Теперь после небольшой задержки таблица появится на pg-standby.

pg-standby ⇒ Теперь новая таблица есть на резервном сервере (может потребоваться несколько повторных попыток)

sudo -u postgres psql -c " \
       select *, current_timestamp from replicated_table"
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:09:22.793715+00
(1 row)

Проверьте конфигурацию доступа резервного сервера к репозиторию.

pg-standby ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=654-6b53cbe6 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-host=repository --stanza=demo
P00   INFO: check repo1 (standby)
P00   INFO: switch wal not performed because this is a standby
P00   INFO: check command end: completed successfully

Потоковая репликация

Потоковая репликация устанавливает прямое соединение с первичным сервером и применяет изменения сразу после их появления на нём, не полагаясь только на архив WAL. Это значительно уменьшает отставание резервного сервера от первичного.

Для потоковой репликации требуется пользователь с правом репликации.

pg-primary ⇒ Создать пользователя репликации

sudo -u postgres psql -c " \
       create user replicator password 'jw8s0F4' replication";
CREATE ROLE

Файл pg_hba.conf необходимо изменить, чтобы разрешить резервному серверу подключаться от имени пользователя репликации. Обязательно замените IP-адрес ниже фактическим IP-адресом pg-standby. После изменения pg_hba.conf потребуется перечитать конфигурацию.

pg-primary ⇒ Создать запись pg_hba.conf для пользователя репликации

sudo -u postgres sh -c 'echo \
       "host    replication     replicator      172.17.0.8/32           md5" \
       >> /etc/postgresql/17/demo/pg_hba.conf'
sudo pg_ctlcluster 17 demo reload

Резервный сервер должен знать, как подключиться к первичному, поэтому в pgBackRest будет настроен параметр primary_conninfo.

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Задать primary_conninfo

[demo]

pg1-path=/var/lib/postgresql/17/demo

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

log-level-file=detail

repo1-host=repository

Пароль можно указать в primary_conninfo, но использование файла .pgpass гибче и безопаснее.

pg-standby ⇒ Задать пароль репликации в файле .pgpass.

sudo -u postgres sh -c 'echo \
       "172.17.0.6:*:replication:replicator:jw8s0F4" \
       >> /var/lib/postgresql/.pgpass'
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass

Теперь резервный сервер можно создать командой restore.

pg-standby ⇒ Остановить PostgreSQL и восстановить демонстрационный резервный кластер

sudo pg_ctlcluster 17 demo stop
sudo -u postgres pgbackrest --stanza=demo --delta --type=standby restore
sudo -u postgres cat /var/lib/postgresql/17/demo/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:06:30
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:06:56
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:07:16
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
# Removed by pgBackRest restore on 2026-10-02 19:08:10 # recovery_target_time = '2026-10-02 19:07:12.060959+00'
# Removed by pgBackRest restore on 2026-10-02 19:08:10 # recovery_target_action = 'promote'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:08:10
restore_command = 'pgbackrest --repo=3 --repo-target-time="2026-10-02 19:07:57+00" --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:08:37
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:09:25
primary_conninfo = 'host=172.17.0.6 port=5432 user=replicator'
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

ПРИМЕЧАНИЕ:

Настройка primary_conninfo записана в файл postgresql.auto.conf, поскольку в pgbackrest.conf она задана как recovery-option. Если требуется сохранить существующий файл postgresql.auto.conf, с командой restore можно использовать параметр --type=preserve.

pg-standby ⇒ Запустить PostgreSQL

sudo pg_ctlcluster 17 demo start

Журнал PostgreSQL подтвердит запуск потоковой репликации.

pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске

sudo -u postgres cat /var/log/postgresql/postgresql-17-demo.log
       [filtered 13 lines of output]
LOG:  consistent recovery state reached at 0/25000050
LOG:  database system is ready to accept read-only connections
LOG:  started streaming WAL from primary at 0/27000000 on timeline 7

Теперь таблица, созданная на pg-primary, быстро появится на pg-standby без необходимости вызывать pg_switch_wal().

pg-primary ⇒ Создать новую таблицу на первичном сервере

sudo -u postgres psql -c " \
       begin; \
       create table stream_table (message text); \
       insert into stream_table values ('Important Data'); \
       commit; \
       select *, current_timestamp from stream_table";
       [filtered 4 lines of output]
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:09:32.302145+00
(1 row)

pg-standby ⇒ Запросить таблицу на резервном сервере

sudo -u postgres psql -c " \
       select *, current_timestamp from stream_table"
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:09:32.491307+00
(1 row)

Несколько stanza

pgBackRest поддерживает несколько stanza. Чаще всего несколько stanza используют общий сервер репозитория.

Установка

Для запуска нового первичного сервера создаётся узел с именем pg-alt.

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

Пакеты pgBackRest для Debian/Ubuntu доступны на apt.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-alt ⇒ Установить зависимости

sudo apt-get install postgresql-client libxml2 libssh2-1

pg-alt ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-alt ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Настройка SSH без пароля

pgBackRest может использовать SSH без пароля для обмена данными между серверами. Также можно использовать TLS; см. Настройка TLS .

pg-alt ⇒ Создать пару ключей сервера pg-alt

sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa \
       -t rsa -b 4096 -N ""

Обменяйтесь ключами между repository и pg-alt.

repository ⇒ Скопировать открытый ключ pg-alt на repository

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@pg-alt cat /var/lib/postgresql/.ssh/id_rsa.pub) | \
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

pg-alt ⇒ Скопировать открытый ключ repository на pg-alt

(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \
       echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \
       sudo ssh root@repository cat /home/pgbackrest/.ssh/id_rsa.pub) | \
       sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys

Проверьте возможность подключения с repository к pg-alt и в обратном направлении.

repository ⇒ Проверить подключение с repository к pg-alt

sudo -u pgbackrest ssh postgres@pg-alt

pg-alt ⇒ Проверить подключение с pg-alt к repository

sudo -u postgres ssh pgbackrest@repository

Конфигурация

Конфигурация pgBackRest почти идентична конфигурации pg-primary, но используется stanza demo-alt, чтобы резервные копии и архив хранились отдельно.

pg-alt:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на новом первичном сервере

[demo-alt]

pg1-path=/var/lib/postgresql/17/demo



[global]

log-level-file=detail

repo1-host=repository

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/17/demo



[demo-alt]

pg1-host=pg-alt

pg1-path=/var/lib/postgresql/17/demo



[global]

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

Создание демонстрационного кластера

pg-alt ⇒ Создать демонстрационный кластер

sudo -u postgres /usr/lib/postgresql/17/bin/initdb \
       -D /var/lib/postgresql/17/demo -k -A peer
sudo pg_createcluster 17 demo
Configuring already existing cluster (configuration: /etc/postgresql/17/demo, data: /var/lib/postgresql/17/demo, owner: 102:103)
Ver Cluster Port Status Owner    Data directory              Log file
17  demo    5432 down   postgres /var/lib/postgresql/17/demo /var/log/postgresql/postgresql-17-demo.log

pg-alt:/etc/postgresql/17/demo/postgresql.conf ⇒ Настроить параметры PostgreSQL

archive_command = 'pgbackrest --stanza=demo-alt archive-push %p'

archive_mode = on

pg-alt ⇒ Запустить демонстрационный кластер

sudo pg_ctlcluster 17 demo restart

Создание stanza и проверка конфигурации

Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.

pg-alt ⇒ Создать stanza и проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo-alt --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=386-f644abb9 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-host=repository --stanza=demo-alt
P00   INFO: stanza-create for stanza 'demo-alt' on repo1
P00   INFO: stanza-create command end: completed successfully
sudo -u postgres pgbackrest --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=396-8c7be3ca --log-level-console=info --log-level-file=detail --no-log-timestamp --repo1-host=repository
P00   INFO: check stanza 'demo-alt'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000001 successfully archived to '/var/lib/pgbackrest/archive/demo-alt/17-1/0000000100000000/000000010000000000000001-ef9bc7e061e42fae1596a4f23d34fdb78ee324d0.gz' on repo1
P00   INFO: check command end: completed successfully

Если команда check запускается на сервере репозитория, проверяются все stanza.

repository ⇒ Проверить конфигурацию всех stanza

sudo -u pgbackrest pgbackrest --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=1284-38748c52 --log-level-console=info --no-log-timestamp --repo1-path=/var/lib/pgbackrest
P00   INFO: check stanza 'demo'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000070000000000000027 successfully archived to '/var/lib/pgbackrest/archive/demo/17-1/0000000700000000/000000070000000000000027-f89bb62652ecba95477379768079564b0243a0d3.gz' on repo1
P00   INFO: check stanza 'demo-alt'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000002 successfully archived to '/var/lib/pgbackrest/archive/demo-alt/17-1/0000000100000000/000000010000000000000002-de2b6314bf64b956ede5fad9e01f3d5f0200faff.gz' on repo1
P00   INFO: check command end: completed successfully

Асинхронное архивирование

Асинхронное архивирование включается параметром archive-async. Он включает асинхронную работу обеих команд: archive-push и archive-get.

Необходим каталог очереди. Команды хранят в нём временные данные, но работают с ним существенно по-разному, поэтому использование каталога очереди подробно описано в соответствующих разделах.

pg-primary ⇒ Создать каталог очереди

sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest

pg-standby ⇒ Создать каталог очереди

sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest

Необходимо настроить каталог очереди и включить асинхронное архивирование. Само по себе асинхронное архивирование даёт некоторое преимущество за счёт уменьшения количества соединений с удалённым хранилищем, а настройка process-max может значительно повысить производительность благодаря параллельному выполнению операций. Не задавайте process-max настолько большим, чтобы это влияло на обычную работу базы данных.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование

[demo]

pg1-path=/var/lib/postgresql/17/demo



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

spool-path=/var/spool/pgbackrest



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование

[demo]

pg1-path=/var/lib/postgresql/17/demo

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

spool-path=/var/spool/pgbackrest



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

ПРИМЕЧАНИЕ:

process-max задаётся в секциях команд, чтобы этот параметр не применялся к резервному копированию и восстановлению. Это также позволяет задать разные значения для archive-push и archive-get.

Для демонстрации потоковая репликация будет нарушена, чтобы PostgreSQL получал WAL через restore_command.

pg-primary ⇒ Нарушить потоковую репликацию, изменив пароль репликации

sudo -u postgres psql -c "alter user replicator password 'bogus'"
ALTER ROLE

pg-standby ⇒ Перезапустить резервный сервер, чтобы разорвать соединение

sudo pg_ctlcluster 17 demo restart

Отправка в архив

Асинхронная команда archive-push передаёт архивирование WAL отдельному процессу или процессам для повышения пропускной способности. Она «заглядывает вперёд» и находит сегменты WAL, готовые к архивированию помимо того, который PostgreSQL сейчас запрашивает через archive_command. Сегменты WAL передаются в архив непосредственно из каталога pg_xlog/pg_wal, а archive_command сообщает об успехе только после того, как сегмент WAL надёжно сохранён в архиве.

Каталог очереди содержит текущее состояние архивирования WAL. Записываемые в него файлы состояния обычно имеют нулевую длину и должны занимать минимум места (не более нескольких МБ) и создавать очень небольшую нагрузку ввода-вывода. Все сведения в этом каталоге можно воссоздать, поэтому при переносе кластера на другое оборудование сохранять каталог очереди не требуется.

ВАЖНО:

В первоначальной реализации асинхронного архивирования сегменты WAL копировались в каталог очереди перед сжатием и передачей. Новая реализация копирует WAL непосредственно из каталога pg_xlog. Если асинхронное архивирование использовалось в v1.12 или более ранней версии, перед обновлением внимательно прочитайте примечания к выпуску v1.13.

Файл [stanza]-archive-push-async.log позволяет отслеживать работу асинхронного процесса. Удобный способ проверки — быстро отправить несколько сегментов WAL.

pg-primary ⇒ Проверить параллельное асинхронное архивирование

sudo -u postgres psql -c " \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal();"
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=2590-c51c0441 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --repo1-host=repository --stanza=demo
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 00000007000000000000002D successfully archived to '/var/lib/pgbackrest/archive/demo/17-1/0000000700000000/00000007000000000000002D-1ed494e7471557cb0563baa2af44d9e1252e424f.gz' on repo1
P00   INFO: check command end: completed successfully

Теперь файл журнала будет содержать записи о параллельной асинхронной работе.

pg-primary ⇒ Проверить результаты в журнале

sudo -u postgres cat /var/log/pgbackrest/demo-archive-push-async.log
-------------------PROCESS START-------------------
P00   INFO: archive-push:async command begin 2.59.3: [/var/lib/postgresql/17/demo/pg_wal] --archive-async --exec-id=2576-267f2388 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=2 --repo1-host=repository --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: push 1 WAL file(s) to archive: 000000070000000000000028
P01 DETAIL: pushed WAL file '000000070000000000000028' to the archive
P00   INFO: archive-push:async command end: completed successfully

-------------------PROCESS START-------------------
P00   INFO: archive-push:async command begin 2.59.3: [/var/lib/postgresql/17/demo/pg_wal] --archive-async --exec-id=2594-5115f5d8 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=2 --repo1-host=repository --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: push 5 WAL file(s) to archive: 000000070000000000000029...00000007000000000000002D
P02 DETAIL: pushed WAL file '00000007000000000000002A' to the archive
P01 DETAIL: pushed WAL file '000000070000000000000029' to the archive
P02 DETAIL: pushed WAL file '00000007000000000000002B' to the archive
P01 DETAIL: pushed WAL file '00000007000000000000002C' to the archive
P02 DETAIL: pushed WAL file '00000007000000000000002D' to the archive
P00   INFO: archive-push:async command end: completed successfully

Получение из архива

Асинхронная команда archive-get поддерживает локальную очередь WAL для повышения пропускной способности. Если сегмента WAL нет в очереди, он извлекается из репозитория вместе с достаточным количеством последовательных сегментов WAL для заполнения очереди. Максимальный размер очереди задаётся параметром archive-get-queue-max. Когда очередь заполнена менее чем наполовину, для её заполнения извлекаются дополнительные сегменты WAL.

Асинхронная работа наиболее полезна в средах с большим объёмом генерируемого WAL или высокой задержкой соединения с хранилищем репозитория (например, S3 или другим объектным хранилищем). При высокой задержке соединения может быть полезно увеличить process-max.

Файл [stanza]-archive-get-async.log позволяет отслеживать работу асинхронного процесса.

pg-standby ⇒ Проверить результаты в журнале

sudo -u postgres cat /var/log/pgbackrest/demo-archive-get-async.log
-------------------PROCESS START-------------------
P00   INFO: archive-get:async command begin 2.59.3: [000000070000000000000024, 000000070000000000000025, 000000070000000000000026, 000000070000000000000027, 000000070000000000000028, 000000070000000000000029, 00000007000000000000002A, 00000007000000000000002B] --archive-async --exec-id=871-5afe1731 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=2 --repo1-host=repository --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: get 8 WAL file(s) from archive: 000000070000000000000024...00000007000000000000002B
P02 DETAIL: found 000000070000000000000025 in the repo1: 17-1 archive
P01 DETAIL: found 000000070000000000000024 in the repo1: 17-1 archive
P02 DETAIL: found 000000070000000000000026 in the repo1: 17-1 archive
P01 DETAIL: found 000000070000000000000027 in the repo1: 17-1 archive
P00 DETAIL: unable to find 000000070000000000000028 in the archive
P00   INFO: archive-get:async command end: completed successfully
       [filtered 14 lines of output]
P00   INFO: archive-get:async command begin 2.59.3: [000000070000000000000028, 000000070000000000000029, 00000007000000000000002A, 00000007000000000000002B, 00000007000000000000002C, 00000007000000000000002D, 00000007000000000000002E, 00000007000000000000002F] --archive-async --exec-id=924-87ccaa43 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/postgresql/17/demo --process-max=2 --repo1-host=repository --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: get 8 WAL file(s) from archive: 000000070000000000000028...00000007000000000000002F
P02 DETAIL: found 000000070000000000000029 in the repo1: 17-1 archive
P01 DETAIL: found 000000070000000000000028 in the repo1: 17-1 archive
P02 DETAIL: found 00000007000000000000002A in the repo1: 17-1 archive
P01 DETAIL: found 00000007000000000000002B in the repo1: 17-1 archive
P02 DETAIL: found 00000007000000000000002C in the repo1: 17-1 archive
P01 DETAIL: found 00000007000000000000002D in the repo1: 17-1 archive
P00 DETAIL: unable to find 00000007000000000000002E in the archive
P00   INFO: archive-get:async command end: completed successfully
       [filtered 15 lines of output]

pg-primary ⇒ Восстановить потоковую репликацию, изменив пароль репликации

sudo -u postgres psql -c "alter user replicator password 'jw8s0F4'"
ALTER ROLE

Резервное копирование с резервного сервера

pgBackRest может выполнять резервное копирование с резервного сервера вместо первичного. Для этого необходимо настроить сервер pg-standby и включить параметр backup-standby. Если настроено несколько резервных серверов, для резервного копирования используется первый найденный работающий резервный сервер.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg2-host/pg2-host-user и pg2-path

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/17/demo

pg2-host=pg-standby

pg2-path=/var/lib/postgresql/17/demo



[demo-alt]

pg1-host=pg-alt

pg1-path=/var/lib/postgresql/17/demo



[global]

backup-standby=y

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

Для резервного копирования необходимы и первичная, и резервная базы данных, хотя подавляющее большинство файлов копируется с резервного сервера, чтобы снизить нагрузку на первичный. Серверы баз данных можно настроить в любом порядке. pgBackRest автоматически определит, какой сервер первичный, а какой резервный.

repository ⇒ Создать резервную копию демонстрационного кластера с pg2

sudo -u pgbackrest pgbackrest --stanza=demo --log-level-console=detail backup
       [filtered 2 lines of output]
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000007000000000000002F, lsn = 0/2F000028
P00   INFO: wait for replay on the standby to reach 0/2F000028
P00   INFO: replay on the standby reached 0/2F000028
P00   INFO: check archive for prior segment 00000007000000000000002E
P03 DETAIL: backup file pg-standby:/var/lib/postgresql/17/demo/base/5/2658 (128KB, 8.47%) checksum 6bcdcabc7aaf3e4919655612f77833a1612baf01
P01 DETAIL: backup file pg-primary:/var/lib/postgresql/17/demo/global/pg_control (8KB, 8.99%) checksum aa003dff0afea4b06a88d00138da8e948a563345
P04 DETAIL: backup file pg-standby:/var/lib/postgresql/17/demo/base/5/1247 (120KB, 16.93%) checksum fa2fb6657bf9785e320a8a5516851de78d7a7a33
P01 DETAIL: match file from prior backup pg-primary:/var/lib/postgresql/17/demo/pg_logical/replorigin_checkpoint (8B, 16.93%) checksum 347fc8f2df71bd4436e38bd1516ccd7ea0d46532
       [filtered 1277 lines of output]

Эта инкрементная копия показывает, что большинство файлов копируется с сервера pg-standby и только несколько — с pg-primary.

pgBackRest создаёт с резервного сервера копию, идентичную копии с первичного. Для этого он запускает и завершает резервное копирование на pg-primary, копирует с pg-standby только реплицируемые файлы, а затем копирует немногочисленные оставшиеся файлы с pg-primary. Поэтому резервная копия включает журналы и статистику первичной базы данных.


Обновление PostgreSQL

Сразу после обновления PostgreSQL до новой основной версии во всех конфигурациях pgBackRest необходимо изменить pg-path на новое расположение базы данных и выполнить команду stanza-upgrade. Если на сервере настроено несколько репозиториев, stanza обновляется в каждом из них. Если база данных остановлена, используйте параметр --no-online.

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

pg-primary ⇒ Остановить старый кластер

sudo pg_ctlcluster 17 demo stop

Остановите старый кластер на резервном сервере: он будет восстановлен из только что обновлённого кластера.

pg-standby ⇒ Остановить старый кластер

sudo pg_ctlcluster 17 demo stop

Создайте новый кластер и выполните обновление.

pg-primary ⇒ Создать новый кластер и выполнить обновление

sudo -u postgres /usr/lib/postgresql/18/bin/initdb \
       -D /var/lib/postgresql/18/demo -k -A peer
sudo pg_createcluster 18 demo
sudo -u postgres sh -c 'cd /var/lib/postgresql && \
       /usr/lib/postgresql/18/bin/pg_upgrade \
       --old-bindir=/usr/lib/postgresql/17/bin \
       --new-bindir=/usr/lib/postgresql/18/bin \
       --old-datadir=/var/lib/postgresql/17/demo \
       --new-datadir=/var/lib/postgresql/18/demo \
       --old-options=" -c config_file=/etc/postgresql/17/demo/postgresql.conf" \
       --new-options=" -c config_file=/etc/postgresql/18/demo/postgresql.conf"'
       [filtered 44 lines of output]
Checking for extension updates                                ok
Upgrade Complete
----------------
Some statistics are not transferred by pg_upgrade.
       [filtered 4 lines of output]

Настройте параметры и порт нового кластера.

pg-primary:/etc/postgresql/18/demo/postgresql.conf ⇒ Настроить PostgreSQL

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

Обновите конфигурацию pgBackRest на всех системах, указав новый кластер.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path

[demo]

pg1-path=/var/lib/postgresql/18/demo



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

spool-path=/var/spool/pgbackrest



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg-path

[demo]

pg1-path=/var/lib/postgresql/18/demo

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

spool-path=/var/spool/pgbackrest



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path и pg2-path, отключить резервное копирование с резервного сервера

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/18/demo

pg2-host=pg-standby

pg2-path=/var/lib/postgresql/18/demo



[demo-alt]

pg1-host=pg-alt

pg1-path=/var/lib/postgresql/17/demo



[global]

backup-standby=n

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

pg-primary ⇒ Скопировать конфигурацию hba

sudo cp /etc/postgresql/17/demo/pg_hba.conf \
       /etc/postgresql/18/demo/pg_hba.conf

Перед запуском нового кластера необходимо выполнить команду stanza-upgrade.

pg-primary ⇒ Обновить stanza

sudo -u postgres pgbackrest --stanza=demo --no-online \
       --log-level-console=info stanza-upgrade
P00   INFO: stanza-upgrade command begin 2.59.3: --exec-id=3025-70610f0d --log-level-console=info --log-level-file=detail --no-log-timestamp --no-online --pg1-path=/var/lib/postgresql/18/demo --repo1-host=repository --stanza=demo
P00   INFO: stanza-upgrade for stanza 'demo' on repo1
P00   INFO: stanza-upgrade command end: completed successfully

Запустите новый кластер и убедитесь в успешной установке.

pg-primary ⇒ Запустить новый кластер

sudo pg_ctlcluster 18 demo start

Проверьте конфигурацию командой check.

pg-primary ⇒ Проверить конфигурацию

sudo pg_lsclusters
sudo -u postgres pgbackrest --stanza=demo check

Удалите старый кластер.

pg-primary ⇒ Удалить старый кластер

sudo pg_dropcluster 17 demo

Установите исполняемые файлы новой версии PostgreSQL на резервном сервере и создайте кластер.

pg-standby ⇒ Удалить старый кластер и создать новый

sudo pg_dropcluster 17 demo
sudo pg_createcluster 18 demo

Выполните check на сервере репозитория. Предупреждение о недоступности резервного сервера ожидаемо, поскольку резервный кластер остановлен. Эта команда показывает, что сервер репозитория располагает сведениями о резервном сервере и правильно настроен для работы с первичным.

repository ⇒ Проверить конфигурацию

sudo -u pgbackrest pgbackrest --stanza=demo check
P00   WARN: unable to check pg2: [DbConnectError] raised from remote-0 ssh protocol on 'pg-standby': unable to connect to 'dbname='postgres' port=5432': connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
                Is the server running locally and accepting connections on that socket?

Создайте полную резервную копию нового кластера, а затем восстановите из неё резервный сервер. Если запрошен тип incr или diff, он автоматически изменится на full.

repository ⇒ Создать полную резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

pg-standby ⇒ Восстановить демонстрационный резервный кластер

sudo -u postgres pgbackrest --stanza=demo --delta --type=standby restore

pg-standby ⇒ Запустить PostgreSQL и проверить конфигурацию pgBackRest

sudo pg_ctlcluster 18 demo start
sudo -u postgres pgbackrest --stanza=demo check

После восстановления резервного сервера можно включить резервное копирование с него.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Снова включить резервное копирование с резервного сервера

[demo]

pg1-host=pg-primary

pg1-path=/var/lib/postgresql/18/demo

pg2-host=pg-standby

pg2-path=/var/lib/postgresql/18/demo



[demo-alt]

pg1-host=pg-alt

pg1-path=/var/lib/postgresql/17/demo



[global]

backup-standby=y

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

3 - Руководство пользователя (RHEL)

Пошаговое руководство по настройке и использованию pgBackRest в системах RHEL, Rocky и AlmaLinux.

Введение

Это руководство следует читать последовательно от начала до конца: каждый раздел опирается на предыдущий. Например, раздел Восстановление предполагает настройку, выполненную в разделе Быстрый старт . После установки и запуска pgBackRest можно переходить между разделами, но при первом знакомстве рекомендуется пройти руководство по порядку.

Хотя примеры в этом руководстве рассчитаны на RHEL и PostgreSQL 14, их должно быть довольно легко адаптировать к любому дистрибутиву Unix и любой версии PostgreSQL. От ОС зависят только команды создания, запуска, остановки и удаления кластеров PostgreSQL. Команды pgBackRest одинаковы во всех системах Unix, хотя расположение исполняемого файла может различаться. pgBackRest стремится работать одинаково с разными версиями PostgreSQL, однако между ними есть небольшие различия, которые могут проявляться в отдельных примерах этого руководства, например в путях, именах файлов и настройках PostgreSQL.

Сведения о настройке и документация PostgreSQL доступны в руководстве PostgreSQL .

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

Все команды рассчитаны на выполнение непривилегированным пользователем с правами sudo для пользователей root и postgres. Команды также можно без изменений выполнять непосредственно от имени соответствующих пользователей; в этом случае префиксы sudo можно убрать.


Основные понятия

Ниже приведены определения понятий в контексте pgBackRest, PostgreSQL и этого руководства.

Резервная копия

Резервная копия — это согласованная копия кластера баз данных, которую можно восстановить после аппаратного сбоя, для возврата к определённому моменту времени или для запуска нового резервного сервера.

Полная резервная копия: pgBackRest копирует в резервную копию всё содержимое кластера баз данных. Первая резервная копия кластера всегда является полной. pgBackRest всегда может восстановить полную резервную копию непосредственно. Её согласованность не зависит от файлов за пределами самой полной резервной копии.

Дифференциальная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней полной резервной копии. При восстановлении дифференциальной резервной копии pgBackRest копирует все файлы выбранной дифференциальной копии и соответствующие неизменившиеся файлы предыдущей полной копии. Преимущество дифференциальной копии в том, что она занимает меньше места, чем полная, однако для её восстановления должны быть исправны как дифференциальная, так и полная резервная копия.

Инкрементная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней резервной копии (другой инкрементной, дифференциальной или полной). Поскольку инкрементная копия включает лишь файлы, изменившиеся после предыдущей копии, она обычно значительно меньше полной или дифференциальной. Как и в случае дифференциальной копии, восстановление инкрементной копии зависит от исправности других резервных копий. Поскольку инкрементная копия содержит только файлы, изменившиеся после последней копии, для её восстановления должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей дифференциальной, сама эта дифференциальная копия и предшествующая полная копия. Если дифференциальной копии нет, должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей полной копии, наличие которой обязательно, а также сама полная копия.

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

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

Журнал предзаписи (WAL)

WAL — механизм, с помощью которого PostgreSQL гарантирует сохранность зафиксированных изменений. Транзакции последовательно записываются в WAL; транзакция считается зафиксированной после того, как эти записи сброшены на диск. Затем фоновый процесс записывает изменения в основные файлы кластера баз данных (также называемые кучей). После аварийного завершения WAL воспроизводится, чтобы привести базу данных в согласованное состояние.

Концептуально WAL бесконечен, но на практике он разбит на отдельные файлы размером 16MB, называемые сегментами. Имена сегментов WAL имеют вид 0000000100000A1E000000FE: первые 8 шестнадцатеричных цифр обозначают временную шкалу, а следующие 16 — логический порядковый номер (LSN).

Шифрование

Шифрование — это преобразование данных в формат, который невозможно распознать без соответствующего пароля (также называемого парольной фразой).

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


Обновление pgBackRest

Обновление pgBackRest с v2.x до v2.y

Обновление с v2.x до v2.y несложно. Формат репозитория не изменился, поэтому в большинстве установок достаточно установить исполняемые файлы новой версии. Понижение версии также возможно, если не использовались новые функции, которые не поддерживаются старой версией.

ВАЖНО:

Локальная и удалённая версии pgBackRest должны в точности совпадать, поэтому их следует обновлять одновременно. При несовпадении версий архивирование WAL и резервное копирование не будут работать, пока версии не совпадут. В этом случае выводится ошибка: [ProtocolError] expected value '2.x' for greeting key 'version' but got '2.y'.


Сборка

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

Сборку из исходного кода лучше выполнять на отдельном сервере сборки, а не в рабочей среде. Многие необходимые для сборки инструменты обычно не следует устанавливать в рабочей среде. pgBackRest состоит из одного исполняемого файла, поэтому после сборки его легко скопировать на другой сервер.

build ⇒ Загрузить pgBackRest версии 2.59.3 в каталог /build

mkdir -p /build
curl -fsSL \
       https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.3/pgbackrest-2.59.3.tar.gz | \
       tar zx -C /build

build ⇒ Установить зависимости для сборки

sudo yum install meson gcc postgresql14-devel openssl-devel libxml2-devel \
       lz4-devel libzstd-devel bzip2-devel libssh2-devel systemd-devel

build ⇒ Настроить и скомпилировать pgBackRest

meson setup /build/pgbackrest /build/pgbackrest-2.59.3
ninja -C /build/pgbackrest

build ⇒ При необходимости запустить базовые тесты, чтобы проверить правильность сборки pgBackRest

meson test -C /build/pgbackrest --suite smoke
ninja: Entering directory `/build/pgbackrest'
ninja: no work to do.
1/1 smoke OK               10.32s

Ok:                 1
       [filtered 6 lines of output]

Установка

Для демонстрационного кластера и выполнения примеров pgBackRest создаётся новый сервер с именем pg-primary.

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

Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-primary ⇒ Установить зависимости

sudo yum install postgresql-libs libssh2

pg-primary ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-primary ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Теперь pgBackRest должен быть установлен правильно, но лучше это проверить. Если какие-либо зависимости пропущены, при запуске pgBackRest из командной строки возникнет ошибка.

pg-primary ⇒ Убедиться в успешной установке

sudo -u postgres pgbackrest
pgBackRest 2.59.3 - General help

Usage:
    pgbackrest [options] [command]

Commands:
    annotate        add or modify backup annotation
    archive-get     get a WAL segment from the archive
    archive-push    push a WAL segment to the archive
    backup          backup a database cluster
    check           check the configuration
    expire          expire backups that exceed retention
    help            get help
    info            retrieve information about backups
    repo-get        get a file from a repository
    repo-ls         list files in a repository
    restore         restore a database cluster
    server          pgBackRest server
    server-ping     ping pgBackRest server
    stanza-create   create the required stanza data
    stanza-delete   delete a stanza
    stanza-upgrade  upgrade a stanza
    start           allow pgBackRest processes to run
    stop            stop pgBackRest processes from running
    verify          verify contents of a repository
    version         get version

Use 'pgbackrest help [command]' for more information.

Быстрый старт

В разделе «Быстрый старт» рассматривается базовая настройка pgBackRest и PostgreSQL, а также команды backup, restore и info.

Создание демонстрационного кластера

Создавать демонстрационный кластер необязательно, но настоятельно рекомендуется, особенно новым пользователям: команды в примерах этого руководства обращаются именно к нему. Предполагается, что демонстрационный кластер работает на порту по умолчанию (5432). Кластер будет запущен в одном из следующих разделов, поскольку сначала нужно завершить настройку.

pg-primary ⇒ Создать демонстрационный кластер

sudo -u postgres /usr/pgsql-14/bin/initdb \
       -D /var/lib/pgsql/14/data -k -A peer

По умолчанию RHEL включает день недели в имя файла журнала. Это несколько усложняет руководство, поэтому для log_filename задаётся постоянное значение.

pg-primary:/var/lib/pgsql/14/data/postgresql.conf ⇒ Задать log_filename

log_filename = 'postgresql.log'

Настройка stanza кластера

Stanza — это конфигурация кластера баз данных PostgreSQL, определяющая его расположение, способ резервного копирования, параметры архивирования и т. д. На большинстве серверов баз данных работает только один кластер PostgreSQL, поэтому достаточно одной stanza. На серверах резервного копирования требуется отдельная stanza для каждого кластера, резервные копии которого нужно создавать.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных этого кластера. Поскольку имя stanza будет использоваться для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, например main или prod.

Имя «demo» точно отражает назначение этого кластера, поэтому подходит и в качестве имени stanza.

pgBackRest должен знать расположение основного каталога данных кластера PostgreSQL. Путь можно запросить непосредственно у PostgreSQL, но при восстановлении процесс PostgreSQL будет недоступен. Во время резервного копирования значение, переданное pgBackRest, сравнивается с путём, который использует работающий PostgreSQL: они должны совпадать, иначе резервное копирование завершится ошибкой. Убедитесь, что pg-path в точности совпадает с data_directory, возвращаемым PostgreSQL.

По умолчанию RHEL хранит кластеры в /var/lib/pgsql/[version]/data, поэтому правильный путь к каталогу данных определить легко.

При создании файла /etc/pgbackrest/pgbackrest.conf владелец базы данных (обычно postgres) должен получить права на его чтение.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог данных кластера PostgreSQL

[demo]

pg1-path=/var/lib/pgsql/14/data

Файлы конфигурации pgBackRest используют формат, похожий на INI в Windows. Секции обозначаются текстом в квадратных скобках, каждая секция содержит пары ключ/значение. Строки, начинающиеся с #, игнорируются и могут использоваться как комментарии, но комментарии после значения в той же строке не поддерживаются. Кавычки не поддерживаются, пробельные символы по краям ключей и значений удаляются. Повторно встречающиеся секции объединяются.

Файлы конфигурации pgBackRest могут загружаться несколькими способами:

  • config и config-include-path имеют значения по умолчанию: загружается файл конфигурации по умолчанию, если он существует, затем добавляются файлы *.conf из каталога включаемой конфигурации по умолчанию, если они существуют.
  • Указан параметр config: загружается только указанный файл конфигурации; он должен существовать.
  • Указан config-include-path: загружаются файлы *.conf из каталога включаемой конфигурации; сам каталог должен существовать. Файл конфигурации по умолчанию загружается, если он существует. Чтобы загрузить только файлы из указанного каталога включаемой конфигурации, можно также передать параметр --no-config.
  • Указаны config и config-include-path: используются заданные пользователем значения; загружается файл конфигурации, затем добавляются файлы *.conf из каталога включаемой конфигурации. Файлы должны существовать.
  • Указан config-path: эта настройка переопределяет базовый путь к файлу конфигурации по умолчанию и/или базовый путь настройки config-include-path по умолчанию, если параметры config и/или config-include-path не заданы явно.

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

  • [stanza:command]
  • [stanza]
  • [global:command]
  • [global]

ПРИМЕЧАНИЕ:

--config, --config-include-path и --config-path доступны только в командной строке.

pgBackRest также можно настраивать через переменные среды (пример ниже); эти переменные действуют для таких команд, как backup , restore и archive-push .

pg-primary ⇒ Настроить log-path через переменную среды

sudo -u postgres bash -c ' \
       export PGBACKREST_LOG_PATH=/path/set/by/env && \
       pgbackrest --log-level-console=error help backup log-path'
pgBackRest 2.59.3 - 'backup' command - 'log-path' option help

Path where log files are stored.

The log path provides a location for pgBackRest to store log files. Note that
if log-level-file=off then no log path is required.

current: /path/set/by/env
default: /var/log/pgbackrest

Создание репозитория

Репозиторий — место, где pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить необходимое место может быть непросто. Лучше всего создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за сутки. Это даст общее представление о требуемом месте, хотя со временем требования, скорее всего, будут меняться по мере развития базы данных.

В этом примере репозиторий будет храниться на том же сервере, что и PostgreSQL. Это простейшая конфигурация; она полезна, когда для резервного копирования сервера баз данных используется обычное ПО резервного копирования.

pg-primary ⇒ Создать репозиторий pgBackRest

sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest

Путь к репозиторию необходимо настроить, чтобы pgBackRest знал, где его искать.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить путь к репозиторию pgBackRest

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-path=/var/lib/pgbackrest

Можно настроить и несколько репозиториев. Подробности см. в разделе Несколько репозиториев .

Настройка архивирования

Для резервного копирования работающего кластера PostgreSQL должно быть включено архивирование WAL. Через %p PostgreSQL указывает расположение сегмента WAL, который нужно архивировать. Обратите внимание: в ходе резервного копирования создаётся как минимум один сегмент WAL, даже если в кластер явно ничего не записывается.

pg-primary:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить параметры архивирования

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

log_filename = 'postgresql.log'

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

pg-primary ⇒ Перезапустить демонстрационный кластер

sudo systemctl restart postgresql-14.service

Настройка hot_standby включена по умолчанию; её следует оставлять включённой на всех кластерах. В дальнейшем любой кластер может быть восстановлен как резервный, например первичный сервер, заново созданный в качестве резервного после переключения при отказе. Без этой настройки резервный сервер не принимает соединения для чтения.

Если ожидается, что архивирование сегмента WAL в репозиторий pgBackRest займёт более 60 секунд (значение по умолчанию), следует увеличить параметр pgBackRest archive-timeout. Это не то же самое, что параметр PostgreSQL archive_timeout, который принудительно переключает сегмент WAL и полезен для баз данных с длительными периодами отсутствия активности. Дополнительные сведения о параметре PostgreSQL archive_timeout см. в разделе Журнал предзаписи документации PostgreSQL.

Для команды archive-push можно задать отдельные параметры. Например, меньший уровень сжатия может ускорить архивирование, не влияя на сжатие резервных копий.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить archive-push на меньший уровень сжатия

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-path=/var/lib/pgbackrest



[global:archive-push]

compress-level=3

Этот способ настройки применим к любой команде и даже к конкретной stanza, например demo:archive-push.

Настройка срока хранения

pgBackRest удаляет устаревшие резервные копии на основании параметров срока хранения.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить хранение 2 полных резервных копий

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2



[global:archive-push]

compress-level=3

Дополнительные сведения приведены в разделе Срок хранения .

Настройка шифрования репозитория

Для демонстрации шифрования в репозитории будут настроены тип шифра и ключ. Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3 или другое объектное хранилище) поддерживает шифрование.

В качестве ключа шифрования важно использовать длинную случайную парольную фразу. Подходящий способ её создания — команда openssl rand -base64 48.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить шифрование репозитория pgBackRest

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2



[global:archive-push]

compress-level=3

ПРИМЕЧАНИЕ:

Выше настройки шифрования размещены в секции [global], чтобы команда info могла читать все stanza. Без параметра stanza команда info читает настройки шифрования только из секции [global], поэтому при настройке шифрования для отдельных stanza для чтения зашифрованной stanza требуется параметр stanza.

После настройки репозитория, создания и проверки stanza изменить настройки шифрования репозитория нельзя.

Создание stanza

Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.

pg-primary ⇒ Создать stanza и проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=1200-90682d35 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: stanza-create for stanza 'demo' on repo1
P00   INFO: stanza-create command end: completed successfully

Проверка конфигурации

Команда check проверяет, правильно ли настроены pgBackRest и параметр archive_command для архивирования и резервного копирования указанной stanza. Она попытается проверить все репозитории и базы данных, настроенные для сервера, на котором выполняется. Команда выявляет ошибки конфигурации, особенно архивирования, из-за которых резервные копии оказываются неполными, поскольку необходимые сегменты WAL не попали в архив. Команду можно выполнять на сервере PostgreSQL или сервере репозитория. Её также можно выполнять на резервном сервере, однако, поскольку на нём нельзя вызвать pg_switch_xlog()/pg_switch_wal(), в этом случае проверяется только конфигурация репозитория.

Обратите внимание: для принудительного архивирования сегмента WAL в PostgreSQL вызываются pg_create_restore_point('pgBackRest Archive Check') и pg_switch_xlog()/pg_switch_wal().

pg-primary ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=1233-340209f5 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000001 successfully archived to '/var/lib/pgbackrest/archive/demo/14-1/0000000100000000/000000010000000000000001-dac4045f133f7305d6342d81e428e60050928bc4.gz' on repo1
P00   INFO: check command end: completed successfully

Настройка производительности

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

  • compress-type — определяет алгоритм сжатия для команд backup и archive-push. По умолчанию используется gz (Gzip), но рекомендуется zst (Zstandard): он гораздо быстрее и обеспечивает степень сжатия, близкую к gz. Значение zst поддерживается параметром compress-type начиная с v2.27 . Подробности см. в разделе Тип сжатия .
  • repo-bundle — объединяет небольшие файлы при резервном копировании, экономя место и ускоряя команды backup и restore, особенно в объектных хранилищах, таких как S3. Параметр repo-bundle появился в v2.39 . Подробности см. в разделе Пакетирование файлов .
  • repo-block — при резервном копировании diff/incr командой backup сохраняет только изменившиеся части файлов, а не файлы целиком. Это экономит место и ускоряет backup. Параметр repo-block появился в v2.46 , но рекомендуется как минимум v2.52.1 . Подробности см. в разделе Блочное инкрементное копирование .

Есть и другие параметры производительности, отключённые по умолчанию, поскольку они требуют дополнительной настройки или значение по умолчанию безопасно, но не оптимально. Эти параметры доступны во всех версиях pgBackRest v2.

  • process-max — определяет количество процессов, используемых командами. Значение по умолчанию — 1, и оно почти никогда не является подходящим. Каждая команда использует process-max по-своему; подробности см. в документации соответствующей команды.
  • archive-async — архивирует файлы WAL в репозиторий пакетами, что значительно ускоряет архивирование. По умолчанию отключён, поскольку требует создания каталога очереди. Подробности см. в разделе Асинхронное архивирование .
  • backup-standby — выполняет резервное копирование с резервного сервера вместо первичного, снижая нагрузку на первичный сервер. По умолчанию отключён, поскольку требует дополнительной настройки и наличия одного или нескольких резервных серверов. Подробности см. в разделе Резервное копирование с резервного сервера .

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

По умолчанию pgBackRest перед началом резервного копирования ждёт следующей плановой контрольной точки. В зависимости от настроек checkpoint_timeout и checkpoint_segments в PostgreSQL до завершения контрольной точки и начала резервного копирования может пройти немало времени. Обычно лучше задать start-fast=y, чтобы резервное копирование начиналось сразу. Это принудительно создаёт контрольную точку, но, поскольку резервные копии обычно создаются раз в сутки, дополнительная контрольная точка не должна заметно влиять на производительность. Однако на очень нагруженных кластерах может быть лучше передавать --start-fast в командной строке по мере необходимости.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить быстрый запуск резервного копирования

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=1327-e87cfc24 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 000000010000000000000002, lsn = 0/2000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 000000010000000000000002:000000010000000000000003
P00   INFO: new backup label = 20261002-185647F
P00   INFO: full backup size = 25.2MB, file total = 951
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=1327-e87cfc24 --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo

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

Параметр type позволяет явно указать полное или дифференциальное резервное копирование.

pg-primary ⇒ Создать дифференциальную резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 7 lines of output]
P00   INFO: check archive for segment(s) 000000010000000000000004:000000010000000000000005
P00   INFO: new backup label = 20261002-185647F_20261002-185651D
P00   INFO: diff backup size = 9.2KB, file total = 951
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=1398-36e29fed --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-full=2 --stanza=demo

На этот раз предупреждения не было, поскольку полная резервная копия уже существовала. Инкрементные копии могут опираться на полную или дифференциальную копию, а дифференциальные должны опираться на полную. Для создания полной копии выполните команду backup с --type=full.

Во время резервного копирования работающего кластера pgBackRest ожидает архивирования сегментов WAL, необходимых для согласованности резервной копии. Время ожидания задаётся параметром pgBackRest archive-timeout, значение которого по умолчанию составляет 60 секунд. Если известно, что архивирование отдельного сегмента занимает больше времени, этот параметр следует увеличить.

Планирование резервного копирования

Резервное копирование можно запускать по расписанию с помощью таких утилит, как cron.

В следующем примере настроены два задания cron: полное резервное копирование каждое воскресенье в 6:30 утра и дифференциальное в 6:30 утра с понедельника по субботу. Если этот crontab устанавливается впервые посреди недели, при первом запуске задания дифференциального копирования pgBackRest создаст полную копию, а на следующий день — дифференциальную.

#m h   dom mon dow   command
30 06  *   *   0     pgbackrest --type=full --stanza=demo backup
30 06  *   *   1-6   pgbackrest --type=diff --stanza=demo backup

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

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

Для получения сведений о резервных копиях используйте команду info.

pg-primary ⇒ Получить сведения о демонстрационном кластере

sudo -u postgres pgbackrest info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (14): 000000010000000000000001/000000010000000000000005

        full backup: 20261002-185647F
            timestamp start/stop: 2026-10-02 18:56:47+00 / 2026-10-02 18:56:50+00
            wal start/stop: 000000010000000000000002 / 000000010000000000000003
            database size: 25.2MB, database backup size: 25.2MB
            repo1: backup set size: 3.2MB, backup size: 3.2MB

        diff backup: 20261002-185647F_20261002-185651D
            timestamp start/stop: 2026-10-02 18:56:51+00 / 2026-10-02 18:56:52+00
            wal start/stop: 000000010000000000000004 / 000000010000000000000005
            database size: 25.2MB, database backup size: 9.2KB
            repo1: backup set size: 3.2MB, backup size: 864B
            backup reference total: 1 full

Команда info работает с одной stanza или со всеми stanza. По умолчанию используется текстовый вывод, который содержит удобную для чтения сводку резервных копий запрошенных stanza. Этот формат может измениться в любом выпуске.

Для машиночитаемого вывода используйте --output=json. Вывод JSON содержит намного больше сведений, чем текстовый, и остаётся стабильным, если только не обнаружена ошибка.

Чтобы ускорить выполнение, ограничьте вывод сведениями о ходе выполнения, указав --detail-level=progress. При этом пропускаются все проверки, кроме проверки доступности stanza.

Для каждой stanza выводится отдельный раздел; параметром --stanza можно ограничить вывод одной stanza. Поле «status» кратко отражает состояние stanza. Значение «ok» означает, что pgBackRest работает нормально. При наличии нескольких репозиториев статус «mixed» указывает на проблемы со stanza в одном или нескольких репозиториях; в этом случае её состояние подробно приводится для каждого репозитория. Если ошибка репозитория не соответствует ни одному из известных кодов ошибок, используется код «other» и выводятся полные сведения об ошибке. Поле «wal archive min/max» показывает минимальный и максимальный WAL, хранящиеся в архиве; при наличии нескольких репозиториев оно охватывает их все, если не задан параметр --repo. Учтите, что из-за политик срока хранения архива или по другим причинам в последовательности могут быть пропуски.

Если на сервере сейчас выполняется одна из соответствующих команд, рядом со сведениями «status» появляются сообщения «backup/expire running» и/или «restore running». В текстовом выводе также отображается ход выполнения по каждому репозиторию, а в вывод JSON добавляется массив «repo».

Резервные копии выводятся от старых к новым. Самая старая копия всегда полная (обозначается F в конце метки), а самая новая может быть полной, дифференциальной (метка оканчивается на D) или инкрементной (оканчивается на I).

Поле «timestamp start/stop» задаёт период выполнения резервного копирования. По «timestamp stop» можно выбрать копию для восстановления на определённый момент времени. Дополнительные сведения приведены в разделе Восстановление на определённый момент времени .

Поле «wal start/stop» определяет диапазон WAL, необходимый для приведения базы данных в согласованное состояние при восстановлении. Перед завершением команда backup убеждается, что этот диапазон WAL есть в архиве.

Поле «database size» — полный размер базы данных без сжатия, а «database backup size» — объём данных базы, которые фактически нужно скопировать (для полных копий эти значения совпадают).

Поле «repo» указывает, в каком репозитории находится копия. Поле «backup set size» включает все файлы этой копии и тех копий репозитория, на которые она ссылается и которые необходимы для восстановления базы данных из неё, а «backup size» — только файлы самой этой копии (для полных копий эти значения также совпадают). Если в pgBackRest включено сжатие, размеры в репозитории учитывают сжатый размер файлов.

Поле «backup reference total» содержит сводку дополнительных резервных копий, необходимых для восстановления этой копии. Чтобы вывести полный список ссылок, используйте параметр --set.

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

Резервные копии защищают от ряда аварийных ситуаций; наиболее распространены аппаратные сбои и повреждение данных. Простейший способ имитировать повреждение данных — удалить важный файл кластера PostgreSQL.

pg-primary ⇒ Остановить демонстрационный кластер и удалить файл pg_control

sudo systemctl stop postgresql-14.service
sudo -u postgres rm /var/lib/pgsql/14/data/global/pg_control

При запуске кластера без этого важного файла возникнет ошибка.

pg-primary ⇒ Попытаться запустить повреждённый демонстрационный кластер

sudo systemctl start postgresql-14.service
sudo systemctl status postgresql-14.service
postgresql-14.service - PostgreSQL 14 database server
    Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service, disabled)
    Active: failed (failed)

Чтобы восстановить резервную копию кластера PostgreSQL, запустите pgBackRest с командой restore. Кластер необходимо остановить (в данном случае он уже остановлен), а из каталога данных PostgreSQL удалить все файлы.

pg-primary ⇒ Удалить старые файлы демонстрационного кластера

sudo -u postgres find /var/lib/pgsql/14/data -mindepth 1 -delete

pg-primary ⇒ Восстановить демонстрационный кластер и запустить PostgreSQL

sudo -u postgres pgbackrest --stanza=demo restore
sudo systemctl start postgresql-14.service

На этот раз кластер успешно запустился, поскольку при восстановлении был возвращён отсутствующий файл pg_control.

Дополнительные сведения о команде restore приведены в разделе Восстановление .


Мониторинг

Мониторинг — важная часть любой рабочей системы. Доступно множество инструментов, и с небольшой доработкой любой из них можно использовать для мониторинга pgBackRest.

pgBackRest может выводить сведения о репозитории в формате JSON, включая список всех резервных копий для каждой stanza и сведения об архиве WAL.

В PostgreSQL

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

pg-primary ⇒ Загрузить функцию получения сведений pgBackRest для PostgreSQL

sudo -u postgres cat \
       /var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql
-- An example of monitoring pgBackRest from within PostgreSQL
--
-- Use copy to export data from the pgBackRest info command into the jsonb
-- type so it can be queried directly by PostgreSQL.

-- Create monitor schema
create schema monitor;

-- Get pgBackRest info in JSON format
create function monitor.pgbackrest_info()
    returns jsonb AS $$
declare
    data jsonb;
begin
    -- Create a temp table to hold the JSON data
    create temp table temp_pgbackrest_data (data text);

    -- Copy data into the table directly from the pgBackRest info command
    copy temp_pgbackrest_data (data)
        from program
            'pgbackrest --output=json info' (format text);

    select replace(temp_pgbackrest_data.data, E'\n', '\n')::jsonb
      into data
      from temp_pgbackrest_data;

    drop table temp_pgbackrest_data;

    return data;
end $$ language plpgsql;
sudo -u postgres psql -f \
       /var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-info.sql

Теперь с помощью функции monitor.pgbackrest_info() можно узнать время последней успешной резервной копии и архивированный WAL для stanza.

pg-primary ⇒ Запросить время последней успешной резервной копии и архивированный WAL

sudo -u postgres cat \
       /var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
-- Get last successful backup for each stanza
--
-- Requires the monitor.pgbackrest_info function.
with stanza as
(
    select data->'name' as name,
           data->'backup'->(
               jsonb_array_length(data->'backup') - 1) as last_backup,
           data->'archive'->(
               jsonb_array_length(data->'archive') - 1) as current_archive
      from jsonb_array_elements(monitor.pgbackrest_info()) as data
)
select name,
       to_timestamp(
           (last_backup->'timestamp'->>'stop')::numeric) as last_successful_backup,
       current_archive->>'max' as last_archived_wal
  from stanza;
sudo -u postgres psql -f \
       /var/lib/pgsql/pgbackrest/doc/example/pgsql-pgbackrest-query.sql
  name  | last_successful_backup |    last_archived_wal
--------+------------------------+--------------------------
 "demo" | 2026-10-02 18:56:52+00 | 000000010000000000000005
(1 row)

Резервное копирование

Если настроено несколько репозиториев, pgBackRest создаёт резервную копию в репозитории с наивысшим приоритетом (например, repo1), если не указан параметр --repo.

У pgBackRest нет встроенного планировщика, поэтому лучше запускать его из cron или другого планировщика.

Дополнительные сведения и примеры см. в разделе Создание резервной копии .

Пакетирование файлов

Объединение файлов в пакеты в репозитории экономит время резервного копирования и часть места в репозитории. Это особенно заметно, когда репозиторий находится в объектном хранилище, таком как S3, или в файловой системе с большим размером блока. Создание отдельного файла в объектном хранилище занимает больше времени, а хранение очень маленьких файлов может стоить столько же, сколько хранение более крупных.

Пакетирование файлов включается параметром repo-bundle.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-bundle

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Без пакетирования файлов каталог полной резервной копии содержит 1000+ файлов, а с пакетированием их общее количество значительно уменьшается. Дополнительное преимущество: файлы нулевой длины не сохраняются (кроме записи в манифесте), тогда как при обычном резервном копировании каждый такой файл хранится отдельно.

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full backup

pg-primary ⇒ Проверить общее количество файлов

sudo -u postgres find /var/lib/pgbackrest/backup/demo/latest/ -type f | wc -l
5

Для настройки можно использовать параметры repo-bundle-size и repo-bundle-limit, хотя значения по умолчанию должны быть оптимальными в большинстве случаев.

Хотя пакетирование файлов обычно эффективнее, оно затрудняет ручное извлечение файлов из репозитория. Для хранилища с дедупликацией оно может быть не лучшим выбором: каждая полная резервная копия размещает файлы в пакетах по-разному. Наконец, копирование пакетов файлов нельзя возобновить, поэтому не следует задавать слишком большое значение repo-bundle-limit.

Блочное инкрементное копирование

Блочные инкрементные резервные копии экономят место: сохраняются лишь части файла, изменившиеся после предыдущей резервной копии, а не весь файл.

Блочное инкрементное копирование включается параметром repo-block и наиболее эффективно, когда включено для всех типов резервных копий. Пакетирование файлов также должно быть включено.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-block

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Аннотации резервных копий

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

pg-primary ⇒ Создать полную резервную копию с аннотациями

sudo -u postgres pgbackrest --stanza=demo --annotation=source="demo backup" \
       --annotation=key=value --type=full backup

В текстовом выводе команды info аннотации отображаются, когда резервная копия указана через --set; в выводе JSON они присутствуют всегда.

pg-primary ⇒ Получить сведения о демонстрационном кластере

sudo -u postgres pgbackrest --stanza=demo --set=20261002-185708F info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (14): 000000020000000000000007/000000020000000000000009

        full backup: 20261002-185708F
            timestamp start/stop: 2026-10-02 18:57:08+00 / 2026-10-02 18:57:09+00
            wal start/stop: 000000020000000000000008 / 000000020000000000000009
            lsn start/stop: 0/8000028 / 0/9000050
            database size: 25.2MB, database backup size: 25.2MB
            repo1: backup size: 3.2MB
            database list: postgres (13755)
            annotation(s)
                key: value
                source: demo backup

Аннотации, заданные в команде backup, впоследствии можно добавлять, изменять или удалять с помощью команды annotate.

pg-primary ⇒ Изменить аннотации резервной копии

sudo -u postgres pgbackrest --stanza=demo --set=20261002-185708F \
       --annotation=key= --annotation=new_key=new_value annotate
sudo -u postgres pgbackrest --stanza=demo --set=20261002-185708F info
stanza: demo
    status: ok
    cipher: aes-256-cbc

    db (current)
        wal archive min/max (14): 000000020000000000000007/000000020000000000000009

        full backup: 20261002-185708F
            timestamp start/stop: 2026-10-02 18:57:08+00 / 2026-10-02 18:57:09+00
            wal start/stop: 000000020000000000000008 / 000000020000000000000009
            lsn start/stop: 0/8000028 / 0/9000050
            database size: 25.2MB, database backup size: 25.2MB
            repo1: backup size: 3.2MB
            database list: postgres (13755)
            annotation(s)
                new_key: new_value
                source: demo backup

Срок хранения

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

pgBackRest выполняет ротацию полных резервных копий в зависимости от типа срока хранения: по количеству или по периоду времени. Если задано количество, при удалении учитывается не время создания копий, а то, сколько их нужно сохранить. Дифференциальные копии хранятся по количеству, но всегда удаляются при удалении полной копии, от которой зависят. Инкрементные копии не удаляются по сроку хранения независимо: они всегда удаляются вместе со связанной полной или дифференциальной копией. Подробности и примеры см. в разделах Хранение полных резервных копий и Хранение дифференциальных резервных копий .

По умолчанию архивированный WAL сохраняется для резервных копий, срок хранения которых не истёк. Этот порядок можно изменить отдельно для каждого репозитория параметрами retention-archive, хотя делать это не рекомендуется. Подробности и примеры см. в разделе Хранение архива .

Команда expire автоматически выполняется после каждого успешного резервного копирования; её также может запускать пользователь. При ручном запуске удаление выполняется в соответствии с настройками срока хранения каждого настроенного репозитория. Если передан параметр --repo, удаление выполняется только в указанном репозитории. Пользователь может также ограничить удаление конкретным набором резервной копии с помощью --set; если при этом не указан --repo, поиск выполняется во всех репозиториях и удаляются все совпадающие наборы. Следует учитывать, что при каждом запуске expire проверяется и применяется политика хранения архива.

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

Параметр repo1-retention-full-type определяет, как интерпретировать repo1-retention-full: как количество сохраняемых полных резервных копий или как число дней их хранения. Удаление выполняется только после завершения новых резервных копий. То есть при repo1-retention-full-type=count и repo1-retention-full=2 перед удалением самой старой копии будут храниться три полные копии; при repo1-retention-full-type=time и repo1-retention-full=20 для начала удаления должна существовать хотя бы одна полная копия возрастом не менее 20 дней.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-full

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Для резервного копирования задано repo1-retention-full=2, но пока существует только одна полная копия, поэтому создание следующей полной копии не приведёт к удалению полных копий.

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full \
       --log-level-console=detail backup
       [filtered 963 lines of output]
P00   INFO: repo1: remove expired backup 20261002-185706F
P00 DETAIL: repo1: 14-1 archive retention on backup 20261002-185708F, start = 000000020000000000000008
P00   INFO: repo1: 14-1 remove archive, start = 000000020000000000000007, stop = 000000020000000000000007
P00   INFO: expire command end: completed successfully

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

pg-primary ⇒ Создать полную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=full \
       --log-level-console=info backup
       [filtered 11 lines of output]
P00   INFO: repo1: expire full backup 20261002-185708F
P00   INFO: repo1: remove expired backup 20261002-185708F
P00   INFO: repo1: 14-1 remove archive, start = 000000020000000000000008, stop = 000000020000000000000009
P00   INFO: expire command end: completed successfully

Полная резервная копия 20261002-185647F удаляется, а хранение архива теперь определяется копией 20261002-185711F, которая стала самой старой полной копией.

Хранение дифференциальных резервных копий

Установите repo1-retention-diff равным нужному количеству дифференциальных резервных копий. Дифференциальные копии зависят только от предыдущей полной копии, поэтому можно создать «скользящий» набор дифференциальных копий за последние сутки или более длительный период. Это обеспечивает быстрое восстановление на недавние моменты времени и при этом уменьшает общий расход места.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=1

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

Для резервного копирования задано repo1-retention-diff=1, поэтому прежде, чем одна дифференциальная копия будет удалена, нужно создать две. Для демонстрации удаления инкрементной копии добавляется инкрементное резервное копирование; в данном случае её удаление зависит от удаления дифференциальной копии.

pg-primary ⇒ Создать дифференциальную и инкрементную резервные копии

sudo -u postgres pgbackrest --stanza=demo --type=diff backup
sudo -u postgres pgbackrest --stanza=demo --type=incr backup

Теперь создание дифференциальной резервной копии приведёт к удалению предыдущих дифференциальной и инкрементной копий, оставив только одну дифференциальную.

pg-primary ⇒ Создать дифференциальную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 10 lines of output]
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=2641-6abf9293 --log-level-console=info --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-diff=1 --repo1-retention-full=2 --stanza=demo
P00   INFO: repo1: expire diff backup set 20261002-185713F_20261002-185715D, 20261002-185713F_20261002-185716I
P00   INFO: repo1: remove expired backup 20261002-185713F_20261002-185716I
P00   INFO: repo1: remove expired backup 20261002-185713F_20261002-185715D
P00   INFO: expire command end: completed successfully

Хранение архива

Хотя pgBackRest автоматически удаляет архивированные сегменты WAL при удалении устаревших резервных копий (по умолчанию WAL полных копий удаляется на основании параметра repo1-retention-full), для экономии дискового пространства может быть полезно удалять архив более активно. При хранении архива дифференциальных копий полные копии также считаются дифференциальными.

При удалении архива никогда не удаляются сегменты WAL, необходимые для согласованности резервной копии. Однако восстановление на определённый момент времени (PITR) возможно только при непрерывном потоке WAL, поэтому при агрессивном удалении архива вне обычного процесса удаления резервных копий следует соблюдать осторожность. Чтобы узнать, что будет удалено, ничего фактически не удаляя, можно передать в командной строке параметр dry-run команде expire.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

start-fast=y



[global:archive-push]

compress-level=3

pg-primary ⇒ Создать дифференциальную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=diff \
       --log-level-console=info backup
       [filtered 6 lines of output]
P00   INFO: backup stop archive = 000000020000000000000017, lsn = 0/17000050
P00   INFO: check archive for segment(s) 000000020000000000000016:000000020000000000000017
P00   INFO: new backup label = 20261002-185713F_20261002-185719D
P00   INFO: diff backup size = 11.5KB, file total = 951
P00   INFO: backup command end: completed successfully
       [filtered 2 lines of output]

pg-primary ⇒ Удалить устаревший архив

sudo -u postgres pgbackrest --stanza=demo --log-level-console=detail \
       --repo1-retention-archive-type=diff --repo1-retention-archive=1 expire
P00   INFO: expire command begin 2.59.3: --exec-id=2877-3548ad61 --log-level-console=detail --no-log-timestamp --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo1-retention-archive=1 --repo1-retention-archive-type=diff --repo1-retention-diff=2 --repo1-retention-full=2 --stanza=demo
P00 DETAIL: repo1: 14-1 archive retention on backup 20261002-185711F, start = 00000002000000000000000A, stop = 00000002000000000000000B
P00 DETAIL: repo1: 14-1 archive retention on backup 20261002-185713F, start = 00000002000000000000000C, stop = 00000002000000000000000D
P00 DETAIL: repo1: 14-1 archive retention on backup 20261002-185713F_20261002-185717D, start = 000000020000000000000012, stop = 000000020000000000000013
P00 DETAIL: repo1: 14-1 archive retention on backup 20261002-185713F_20261002-185719D, start = 000000020000000000000016
P00   INFO: repo1: 14-1 remove archive, start = 00000002000000000000000E, stop = 000000020000000000000011
P00   INFO: repo1: 14-1 remove archive, start = 000000020000000000000014, stop = 000000020000000000000015
P00   INFO: expire command end: completed successfully

У дифференциальной копии 20261002-185713F_20261002-185717D есть архивированные сегменты WAL, которые необходимо сохранить для согласованности старых копий, хотя продвинуть их дальше с помощью PITR уже нельзя. Сегменты WAL, созданные после 20261002-185713F_20261002-185717D, но до 20261002-185713F_20261002-185719D, удаляются. Сегменты, созданные после новой копии 20261002-185713F_20261002-185719D, остаются и могут использоваться для PITR.

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


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

По умолчанию команда восстановления автоматически выбирает последнюю резервную копию из первого репозитория, в котором есть копии (см. Быстрый старт — Восстановление резервной копии ). Порядок проверки репозиториев определяется файлом pgbackrest.conf (например, repo1 проверяется раньше repo2). Для выбора конкретного репозитория можно передать --repo (например, --repo=1). Если нужна не последняя резервная копия, можно передать параметр --set.

При PITR с --type=time или --type=lsn целевое время или LSN необходимо указать с помощью параметра --target. Если --set не задан, настроенные репозитории проверяются по порядку: выбирается резервная копия, время завершения которой предшествует целевому времени или LSN завершения которой меньше либо равен целевому LSN. Если подходящая копия не найдена, pgBackRest выдаёт ошибку как для --type=time, так и для --type=lsn; перехода к последней резервной копии не происходит. Для других типов PITR, например xid, необходимо указать параметр --set, если цель предшествует последней резервной копии. Подробнее и с примерами см. Восстановление на заданный момент времени .

В соответствии с рекомендацией PostgreSQL слоты репликации не включаются в резервную копию. Дополнительные сведения см. в разделе Резервное копирование каталога данных документации PostgreSQL.

В следующих разделах рассматриваются дополнительные возможности команды restore.

Владельцы файлов

Если restore выполняется от имени пользователя, отличного от root (обычный случай), все восстановленные файлы будут принадлежать пользователю и группе, от имени которых запущен pgBackRest. Если существующие файлы принадлежат другому пользователю или группе и сменить владельца на пользователя и группу процесса не удаётся, возникает ошибка. В этом случае перед повторной попыткой восстановления привилегированный пользователь должен изменить владельца файлов.

Если restore выполняется от имени root, pgBackRest пытается восстановить владельцев, записанных в манифест при создании резервной копии. В манифесте хранятся только имена пользователей и групп, поэтому на сервере восстановления должны существовать те же имена. Если имя пользователя или группы локально не найдено, используется пользователь или группа каталога данных PostgreSQL, а если их не удаётся сопоставить с именем — root.

Параметр delta

В разделе Восстановление резервной копии главы Быстрый старт перед выполнением restore требовалось очистить каталог кластера баз данных. Параметр delta позволяет pgBackRest автоматически определить, какие файлы в каталоге кластера можно сохранить, а какие нужно восстановить из резервной копии. Он также удаляет файлы, отсутствующие в манифесте копии, устраняя расходящиеся изменения. Для этого вычисляется криптографический хеш SHA-1 каждого файла в каталоге кластера. Если хеш SHA-1 не совпадает с хешем в резервной копии, файл восстанавливается. Эта операция очень эффективна в сочетании с параметром process-max. Поскольку на время восстановления сервер PostgreSQL остановлен, можно использовать больше процессов, чем было бы желательно при резервном копировании работающего сервера PostgreSQL.

pg-primary ⇒ Остановить демонстрационный кластер и выполнить дельта-восстановление

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
       --log-level-console=detail restore
       [filtered 2 lines of output]
P00 DETAIL: check '/var/lib/pgsql/14/data' exists
P00 DETAIL: remove 'global/pg_control' so cluster will not start if restore does not complete
P00   INFO: remove invalid files/links/paths from '/var/lib/pgsql/14/data'
P00 DETAIL: remove invalid file '/var/lib/pgsql/14/data/backup_label.old'
P00 DETAIL: remove invalid file '/var/lib/pgsql/14/data/base/13755/pg_internal.init'
       [filtered 996 lines of output]

pg-primary ⇒ Перезапустить PostgreSQL

sudo systemctl start postgresql-14.service

Восстановление выбранных баз данных

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

Для демонстрации этой возможности создаются две базы данных: test1 и test2.

pg-primary ⇒ Создать две тестовые базы данных

sudo -u postgres psql -c "create database test1;"
CREATE DATABASE
sudo -u postgres psql -c "create database test2;"
CREATE DATABASE

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

pg-primary ⇒ Создать тестовую таблицу в каждой базе данных

sudo -u postgres psql -c "create table test1_table (id int); \
       insert into test1_table (id) values (1);" test1
CREATE TABLE
INSERT 0 1
sudo -u postgres psql -c "create table test2_table (id int); \
       insert into test2_table (id) values (2);" test2
CREATE TABLE
INSERT 0 1

Создаётся новая резервная копия, чтобы pgBackRest получил сведения о новых базах данных.

pg-primary ⇒ Создать резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=incr backup

Одна из основных причин использовать выборочное восстановление — экономия места. Здесь показан размер базы test1, чтобы его можно было сравнить с расходом дискового пространства после выборочного восстановления.

pg-primary ⇒ Показать место, занимаемое базой test1

sudo -u postgres du -sh /var/lib/pgsql/14/data/base/32768
8.4M	/var/lib/pgsql/14/data/base/32768

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

pg-primary ⇒ Показать список баз данных в резервной копии

sudo -u postgres pgbackrest --stanza=demo \
       --set=20261002-185713F_20261002-185728I info
       [filtered 12 lines of output]
            repo1: backup size: 2.1MB
            backup reference list: 20261002-185713F, 20261002-185713F_20261002-185719D
            database list: postgres (13755), test1 (32768), test2 (32769)

Остановите кластер и восстановите только базу test2. Встроенные базы (template0, template1 и postgres) восстанавливаются всегда.

ПРЕДУПРЕЖДЕНИЕ:

Если не указать --type=immediate, восстановление может завершиться ошибкой. Причина в том, что после достижения согласованности PostgreSQL считает обнулённые страницы ошибкой даже при записи полной страницы. В PostgreSQL ≥ 13 можно использовать настройку ignore_invalid_pages, чтобы игнорировать некорректные страницы. В этом случае после восстановления важно проверить журналы и убедиться, что сообщений о некорректных страницах в выбранных базах данных нет.

pg-primary ⇒ Восстановить последнюю резервную копию, включив только базу test2

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
       --db-include=test2 --type=immediate --target-action=promote restore
sudo systemctl start postgresql-14.service

После завершения восстановления база test2 будет содержать все ранее созданные таблицы и данные.

pg-primary ⇒ Продемонстрировать восстановление базы test2

sudo -u postgres psql -c "select * from test2_table;" test2
 id
----
  2
(1 row)

База test1, несмотря на успешное восстановление, недоступна. Причина в том, что вся база была восстановлена в виде разреженных обнулённых файлов. PostgreSQL может успешно применить WAL к таким файлам, но база в целом будет некорректна, поскольку ключевые файлы не содержат данных. Это сделано намеренно, чтобы исключить случайное использование базы, которая может содержать лишь часть данных, применённых при воспроизведении WAL.

pg-primary ⇒ Попытка подключиться к базе test1 приведёт к ошибке

sudo -u postgres psql -c "select * from test1_table;" test1
psql: error: connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: FATAL:  relation mapping file "base/32768/pg_filenode.map" contains invalid data

Поскольку база test1 восстанавливается в виде разреженных обнулённых файлов, она займёт лишь столько места, сколько WAL будет записано при восстановлении. Объём WAL, создаваемого во время резервного копирования и применяемого при восстановлении, может быть значительным, но обычно составляет небольшую долю полного размера базы, особенно для крупных баз, где эта возможность наиболее полезна.

Очевидно, что при выборочном восстановлении база test1 занимает гораздо меньше места, чем при полном восстановлении базы.

pg-primary ⇒ Показать место, занимаемое базой test1 после восстановления

sudo -u postgres du -sh /var/lib/pgsql/14/data/base/32768
8.0K	/var/lib/pgsql/14/data/base/32768

На этом этапе единственное действие, которое можно выполнить с некорректной базой test1, — drop database. pgBackRest не удаляет базу автоматически, поскольку это невозможно до завершения восстановления и появления доступа к кластеру.

pg-primary ⇒ Удалить базу test1

sudo -u postgres psql -c "drop database test1;"
DROP DATABASE

После удаления некорректной базы test1 остаются только test2 и встроенные базы.

pg-primary ⇒ Показать оставшиеся базы данных

sudo -u postgres psql -c "select oid, datname from pg_database order by oid;"
  oid  |  datname
-------+-----------
     1 | template1
 13754 | template0
 13755 | postgres
 32769 | test2
(4 rows)

Восстановление на определённый момент времени

В разделе Восстановление резервной копии главы Быстрый старт использовалось восстановление по умолчанию — воспроизведение WAL до самого конца потока. При аппаратном сбое это обычно лучший вариант, но при повреждении данных, вызванном машиной или человеком, часто уместнее восстановление на определённый момент времени (PITR).

Восстановление на определённый момент времени (PITR) позволяет воспроизвести WAL из резервной копии до заданного LSN, времени, идентификатора транзакции или точки восстановления. В типичных сценариях восстановление по времени, пожалуй, наиболее полезно. Частый случай — восстановление случайно удалённой таблицы или данных. Восстановление удалённой таблицы нагляднее, поэтому здесь используется именно такой пример, но удалённые данные восстанавливаются точно так же.

pg-primary ⇒ Создать таблицу с очень важными данными

sudo -u postgres psql -c "begin; \
       create table important_table (message text); \
       insert into important_table values ('Important Data'); \
       commit; \
       select * from important_table;"
       [filtered 4 lines of output]
    message
----------------
 Important Data
(1 row)

Важно задавать время так, как его понимает PostgreSQL, и включать смещение часового пояса. Это уменьшает вероятность нежелательного преобразования часовых поясов и неожиданного результата восстановления.

pg-primary ⇒ Получить время из PostgreSQL

sudo -u postgres psql -Atc "select current_timestamp"
2026-10-02 18:57:39.575732+00

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

pg-primary ⇒ Удалить важную таблицу

sudo -u postgres psql -c "begin; \
       drop table important_table; \
       commit; \
       select * from important_table;"
BEGIN
DROP TABLE
COMMITERROR:  relation "important_table" does not exist
LINE 1: ...le important_table;     commit;     select * from important_...
                                                             ^

Если для восстановления выбрана неверная резервная копия, восстановление на нужный момент времени завершится неудачей. Для демонстрации создаётся новая инкрементная копия, в которой important_table уже отсутствует.

pg-primary ⇒ Создать инкрементную резервную копию

sudo -u postgres pgbackrest --stanza=demo --type=incr backup
sudo -u postgres pgbackrest info
       [filtered 38 lines of output]
            backup reference total: 1 full, 1 diff

        incr backup: 20261002-185713F_20261002-185741I
            timestamp start/stop: 2026-10-02 18:57:41+00 / 2026-10-02 18:57:42+00
            wal start/stop: 00000004000000000000001A / 00000004000000000000001A
       [filtered 2 lines of output]

Восстановить потерянную таблицу из этой копии не получится, поскольку PostgreSQL может воспроизводить изменения только вперёд, но не назад.

pg-primary ⇒ Попытаться восстановить данные из неподходящей резервной копии

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta \
       --set=20261002-185713F_20261002-185741I --target-timeline=current \
       --type=time "--target=2026-10-02 18:57:39.575732+00" --target-action=promote restore
sudo systemctl start postgresql-14.service
sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
       [filtered 11 lines of output]
LOG:  database system is ready to accept read-only connections
LOG:  redo done at 0/1A000100 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.01 s
FATAL:  recovery ended before configured recovery target was reached
LOG:  startup process (PID 4045) exited with exit code 1
LOG:  terminating any other active server processes
LOG:  database system is shut down

Надёжный способ — позволить pgBackRest автоматически выбрать копию, из которой возможно восстановление на целевой момент времени, то есть копию, завершившуюся до указанного времени.

ПРИМЕЧАНИЕ:

pgBackRest не может автоматически выбрать копию при типе восстановления xid или name.

pg-primary ⇒ Восстановить демонстрационный кластер на момент 2026-10-02 18:57:39.575732+00

sudo -u postgres pgbackrest --stanza=demo --delta \
       --type=time "--target=2026-10-02 18:57:39.575732+00" \
       --target-action=promote restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
       [filtered 9 lines of output]
# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:47
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
recovery_target_time = '2026-10-02 18:57:39.575732+00'
recovery_target_action = 'promote'

pgBackRest сформировал настройки восстановления в postgresql.auto.conf, поэтому PostgreSQL можно запустить сразу. Через %f PostgreSQL указывает нужный сегмент WAL, а через %p — место, куда его следует скопировать. После того как PostgreSQL завершит восстановление, таблица снова будет существовать и к ней можно будет обращаться с запросами.

pg-primary ⇒ Запустить PostgreSQL и проверить наличие важной таблицы

sudo systemctl start postgresql-14.service
sudo -u postgres psql -c "select * from important_table"
    message
----------------
 Important Data
(1 row)

Журнал PostgreSQL также содержит полезные сведения. В нём указаны время и транзакция, на которых остановилось восстановление, а также время последней применённой транзакции.

pg-primary ⇒ Просмотреть журнал PostgreSQL

sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
       [filtered 5 lines of output]
LOG:  database system was interrupted; last known up at 2026-10-02 18:57:28 UTC
LOG:  restored log file "00000004.history" from archive
LOG:  starting point-in-time recovery to 2026-10-02 18:57:39.575732+00
LOG:  restored log file "00000004.history" from archive
LOG:  restored log file "000000040000000000000019" from archive
       [filtered 2 lines of output]
LOG:  consistent recovery state reached at 0/19000100
LOG:  database system is ready to accept read-only connections
LOG:  recovery stopping before commit of transaction 743, time 2026-10-02 18:57:40.904112+00
LOG:  redo done at 0/1901E6C0 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
LOG:  last completed transaction was at log time 2026-10-02 18:57:38.228184+00
LOG:  selected new timeline ID: 5
LOG:  archive recovery complete
LOG:  database system is ready to accept connections

Удаление stanza

Команда stanza-delete удаляет из репозитория данные, связанные со stanza.

ПРЕДУПРЕЖДЕНИЕ:

Используйте эту команду с осторожностью: она безвозвратно удаляет из репозитория pgBackRest все резервные копии и архивы указанной stanza.

Чтобы удалить stanza:

  • Остановите кластер PostgreSQL, связанный со stanza (или используйте –force для обхода этого требования).
  • Выполните команду stop на сервере, где будет запущена stanza-delete.
  • Выполните команду stanza-delete.

После успешного завершения команды пользователь должен самостоятельно удалить stanza из всех файлов конфигурации pgBackRest и/или переменных среды.

За один раз stanza можно удалить только из одного репозитория. Чтобы удалить stanza из нескольких репозиториев, повторите команду stanza-delete для каждого из них, указав параметр --repo.

pg-primary ⇒ Остановить удаляемый кластер PostgreSQL

sudo systemctl stop postgresql-14.service

pg-primary ⇒ Остановить pgBackRest для stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stop
P00   INFO: stop command begin 2.59.3: --exec-id=4396-32c67a63 --log-level-console=info --no-log-timestamp --stanza=demo
P00   INFO: stop command end: completed successfully

pg-primary ⇒ Удалить stanza из одного репозитория

sudo -u postgres pgbackrest --stanza=demo --repo=1 \
       --log-level-console=info stanza-delete
P00   INFO: stanza-delete command begin 2.59.3: --exec-id=4428-6f4dadb2 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo=1 --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --stanza=demo
P00   INFO: stanza-delete command end: completed successfully

Несколько репозиториев

Можно настроить несколько репозиториев, как показано в разделе Поддержка S3 . Одно из возможных преимуществ — локальный репозиторий для быстрого восстановления и удалённый для избыточности.

Некоторые команды, например stanza-create /stanza-upgrade , автоматически работают со всеми настроенными репозиториями. Для других, например stanza-delete , репозиторий нужно указать параметром repo.

Для обратной совместимости параметр repo не требуется, если настроен только repo1. Однако, если единственный репозиторий настроен, например, как repo2, параметр repo обязателен. Это позволяет избежать нарушения работы команд при последующем добавлении нового репозитория.

Команда archive-push всегда отправляет WAL в архивы всех настроенных репозиториев. Если один репозиторий недоступен, WAL всё равно отправляется в остальные. Однако для эффективной работы необходимо включить archive-async=y; иначе остальные репозитории смогут опередить недоступный лишь на один сегмент WAL. Также учтите: если WAL не удаётся отправить в какой-либо репозиторий, PostgreSQL не удалит его из каталога pg_wal, из-за чего на томе может закончиться место.

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


Поддержка объектных хранилищ, совместимых с Azure

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с Azure. Контейнер для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне контейнера (/), но обычно лучше использовать вложенный путь, чтобы в том же контейнере можно было хранить журналы объектного хранилища и другие данные без конфликтов.

ПРЕДУПРЕЖДЕНИЕ:

Не включайте «иерархическое пространство имён»: это приведёт к ошибкам при удалении устаревших копий.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить Azure

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

start-fast=y



[global:archive-push]

compress-level=3

Для использования подписей общего доступа задайте параметру repo2-azure-key-type значение sas, а параметру repo2-azure-key — токен подписи общего доступа.

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

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=4635-4a99c6c0 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo2-type=azure --stanza=demo
P00   INFO: stanza-create for stanza 'demo' on repo1
P00   INFO: stanza-create for stanza 'demo' on repo2
P00   INFO: stanza-create command end: completed successfully

Создание файлов в Azure происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=2 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=4667-a84748a5 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo=2 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo2-type=azure --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001B, lsn = 0/1B000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001B:00000005000000000000001B
P00   INFO: new backup label = 20261002-185802F
P00   INFO: full backup size = 33.5MB, file total = 1249
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=4667-a84748a5 --log-level-console=info --no-log-timestamp --repo=2 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo2-type=azure --stanza=demo

Поддержка объектных хранилищ, совместимых с S3

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с S3. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить S3

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

start-fast=y



[global:archive-push]

compress-level=3

ПРИМЕЧАНИЕ:

Регион и конечную точку необходимо настроить в соответствии с расположением бакета. Здесь приведены значения для региона us-east-1.

Для запуска pgBackRest следует создать роль, а права доступа к бакету следует максимально ограничить. Если роль связана с экземпляром AWS, при repo3-s3-key-type=auto pgBackRest автоматически получает временные учётные данные, поэтому явно задавать ключи в /etc/pgbackrest/pgbackrest.conf не требуется.

Этот пример политики Amazon S3 ограничивает все операции чтения и записи указанным бакетом и путём репозитория.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "demo-repo"
                    ],
                    "s3:delimiter": [
                        "/"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "demo-repo/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectTagging",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::demo-bucket/demo-repo/*"
            ]
        }
    ]
}

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

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
       [filtered 4 lines of output]
P00   INFO: stanza 'demo' already exists on repo2 and is valid
P00   INFO: stanza-create for stanza 'demo' on repo3
P00   INFO: stanza-create command end: completed successfully

Создание файлов в S3 происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=3 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=5060-13323a52 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo2-type=azure --repo3-type=s3 --stanza=demo --start-fast
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001D, lsn = 0/1D000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001D:00000005000000000000001D
P00   INFO: new backup label = 20261002-185820F
P00   INFO: full backup size = 33.5MB, file total = 1249
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=5060-13323a52 --log-level-console=info --no-log-timestamp --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo2-type=azure --repo3-type=s3 --stanza=demo

Поддержка SFTP

pgBackRest поддерживает размещение репозиториев на серверах SFTP. Передача файлов по SFTP относительно медленная, поэтому увеличение process-max для параллельной передачи файлов повышает производительность команд.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить SFTP

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

process-max=4

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

repo4-bundle=y

repo4-path=/demo-repo

repo4-sftp-host=sftp-server

repo4-sftp-host-key-hash-type=sha1

repo4-sftp-host-user=pgbackrest

repo4-sftp-private-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp

repo4-sftp-public-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp.pub

repo4-type=sftp

start-fast=y



[global:archive-push]

compress-level=3

При использовании SFTP, если libssh2 собрана с OpenSSH, параметр repo4-sftp-public-key-file необязателен.

pg-primary ⇒ Создать пару ключей SSH для резервного копирования по SFTP

sudo -u postgres mkdir -m 750 -p /var/lib/pgsql/.ssh
sudo -u postgres ssh-keygen -f /var/lib/pgsql/.ssh/id_rsa_sftp \
       -t rsa -b 4096 -N "" -m PEM

sftp-server ⇒ Скопировать открытый ключ pg-primary для резервного копирования по SFTP на sftp-server

sudo -u pgbackrest mkdir -m 750 -p /home/pgbackrest/.ssh
(sudo ssh root@pg-primary cat /var/lib/pgsql/.ssh/id_rsa_sftp.pub) | \
       sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys

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

pg-primary ⇒ Добавить отпечаток sftp-server в файл known_hosts, поскольку значение repo4-sftp-host-key-check-type по умолчанию — «strict»

ssh-keyscan -H sftp-server >> /var/lib/pgsql/.ssh/known_hosts 2>/dev/null

pg-primary ⇒ Создать stanza

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
       [filtered 6 lines of output]
P00   INFO: stanza 'demo' already exists on repo3 and is valid
P00   INFO: stanza-create for stanza 'demo' on repo4
P00   INFO: stanza-create command end: completed successfully

pg-primary ⇒ Создать резервную копию демонстрационного кластера

sudo -u postgres pgbackrest --stanza=demo --repo=4 \
       --log-level-console=info backup
P00   INFO: backup command begin 2.59.3: --exec-id=5361-dd15b633 --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=4 --repo=4 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-block --repo1-bundle --repo4-bundle --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp.pub --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --stanza=demo --start-fast
P00   WARN: option 'repo4-retention-full' is not set for 'repo4-retention-full-type=count', the repository may run out of space
            HINT: to retain full backups indefinitely (without warning), set option 'repo4-retention-full' to the maximum.
P00   WARN: no prior backup exists, incr backup has been changed to full
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000005000000000000001E, lsn = 0/1E000028
       [filtered 3 lines of output]
P00   INFO: check archive for segment(s) 00000005000000000000001E:00000005000000000000001F
P00   INFO: new backup label = 20261002-185837F
P00   INFO: full backup size = 33.5MB, file total = 1249
P00   INFO: backup command end: completed successfully
P00   INFO: expire command begin 2.59.3: --exec-id=5361-dd15b633 --log-level-console=info --no-log-timestamp --repo=4 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo1-retention-diff=2 --repo1-retention-full=2 --repo2-retention-full=4 --repo3-retention-full=4 --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp.pub --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --stanza=demo
P00   INFO: expire command end: completed successfully

Поддержка объектных хранилищ, совместимых с GCS

pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с GCS. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить GCS

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

process-max=4

repo1-block=y

repo1-bundle=y

repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

repo1-cipher-type=aes-256-cbc

repo1-path=/var/lib/pgbackrest

repo1-retention-diff=2

repo1-retention-full=2

repo2-azure-account=pgbackrest

repo2-azure-container=demo-container

repo2-azure-key=YXpLZXk=

repo2-path=/demo-repo

repo2-retention-full=4

repo2-type=azure

repo3-path=/demo-repo

repo3-retention-full=4

repo3-s3-bucket=demo-bucket

repo3-s3-endpoint=s3.us-east-1.amazonaws.com

repo3-s3-key=accessKey1

repo3-s3-key-secret=verySecretKey1

repo3-s3-region=us-east-1

repo3-type=s3

repo4-bundle=y

repo4-path=/demo-repo

repo4-sftp-host=sftp-server

repo4-sftp-host-key-hash-type=sha1

repo4-sftp-host-user=pgbackrest

repo4-sftp-private-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp

repo4-sftp-public-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp.pub

repo4-type=sftp

repo5-gcs-bucket=demo-bucket

repo5-gcs-key=/etc/pgbackrest/gcs-key.json

repo5-path=/demo-repo

repo5-type=gcs

start-fast=y



[global:archive-push]

compress-level=3

При работе в GCE задайте repo5-gcs-key-type=auto, чтобы автоматически проходить аутентификацию через служебную учётную запись экземпляра.

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

Создание файлов в GCS происходит относительно медленно, поэтому включение пакетирования файлов повышает производительность backup/restore.


Целевое время репозитория

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

Хранение версий поддерживается в S3, GCS и Azure, но обычно по умолчанию отключено. Помимо включения версий, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

При указании repo-target-time также необходимо передать параметр repo. Вероятно, не все типы репозиториев поддерживают версии, и в целом для восстановления имеет смысл выбирать один репозиторий.

Обратите внимание: временные метки хранилища сравниваются с указанной меткой по условию <=, а миллисекунды в переданной метке времени отбрасываются.

Для демонстрации этой возможности stanza demo удаляется из репозитория S3.

pg-primary ⇒ Удалить stanza из репозитория S3

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo stop
sudo -u postgres pgbackrest --stanza=demo --repo=3 stanza-delete

После удаления stanza команда info покажет ошибочное состояние репозитория.

pg-primary ⇒ Ошибка при выполнении info

sudo -u postgres pgbackrest --stanza=demo --repo=3 info
stanza: demo
    status: error (missing stanza path)

Однако, поскольку хранилище поддерживает версии, можно посмотреть состояние репозитория до удаления stanza. В зависимости от ситуации определить целевое время бывает непросто, но в данном случае момент удаления stanza можно установить по времени удаления backup.info.

pg-primary ⇒ Показать версии backup.info в бакете

key=demo-repo/backup/demo/backup.info; \
       aws s3api list-object-versions --bucket demo-bucket \
       --prefix $key --output table \
       --query "sort_by([Versions[?Key=='$key'].{Action:'PUT', \
       Modified:LastModified,Object:Key}, \
       DeleteMarkers[?Key=='$key'].{Action:'DELETE', \
       Modified:LastModified,Object:Key}][],&Modified)"
-------------------------------------------------------------------------------------
|                                ListObjectVersions                                 |
+--------+------------------------------------+-------------------------------------+
| Action |             Modified               |               Object                |
+--------+------------------------------------+-------------------------------------+
|  PUT   |  2026-10-02T18:58:20.631000+00:00  |  demo-repo/backup/demo/backup.info  |
|  PUT   |  2026-10-02T18:58:33.900000+00:00  |  demo-repo/backup/demo/backup.info  |
|  DELETE|  2026-10-02T18:58:45.634000+00:00  |  demo-repo/backup/demo/backup.info  |
+--------+------------------------------------+-------------------------------------+

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

pg-primary ⇒ Выполнить info с целевым временем

sudo -u postgres pgbackrest --stanza=demo --repo=3 \
       --repo-target-time="2026-10-02 18:58:34+00" info
       [filtered 5 lines of output]
        wal archive min/max (14): 00000005000000000000001C/00000005000000000000001D

        full backup: 20261002-185820F
            timestamp start/stop: 2026-10-02 18:58:20+00 / 2026-10-02 18:58:33+00
            wal start/stop: 00000005000000000000001D / 00000005000000000000001D
            repo3: backup set size: 4.2MB, backup size: 4.2MB

Если команда info показывает нужную резервную копию, её можно восстановить с тем же целевым временем.

pg-primary ⇒ Выполнить восстановление с целевым временем

sudo -u postgres pgbackrest --stanza=demo --repo=3 --delta \
       --repo-target-time="2026-10-02 18:58:34+00" --log-level-console=info restore
P00   INFO: restore command begin 2.59.3: --delta --exec-id=5686-f718513c --log-level-console=info --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=4 --repo=3 --repo2-azure-account=<redacted> --repo2-azure-container=demo-container --repo2-azure-key=<redacted> --repo1-cipher-pass=<redacted> --repo1-cipher-type=aes-256-cbc --repo5-gcs-bucket=demo-bucket --repo5-gcs-key=<redacted> --repo1-path=/var/lib/pgbackrest --repo2-path=/demo-repo --repo3-path=/demo-repo --repo4-path=/demo-repo --repo5-path=/demo-repo --repo3-s3-bucket=demo-bucket --repo3-s3-endpoint=s3.us-east-1.amazonaws.com --repo3-s3-key=<redacted> --repo3-s3-key-secret=<redacted> --repo3-s3-region=us-east-1 --repo4-sftp-host=sftp-server --repo4-sftp-host-key-hash-type=sha1 --repo4-sftp-host-user=pgbackrest --repo4-sftp-private-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp --repo4-sftp-public-key-file=/var/lib/pgsql/.ssh/id_rsa_sftp.pub --repo-target-time="2026-10-02 18:58:34+00" --repo2-type=azure --repo3-type=s3 --repo4-type=sftp --repo5-type=gcs --stanza=demo
P00   INFO: repo3: restore backup set 20261002-185820F, recovery will start at 2026-10-02 18:58:20
P00   INFO: remove invalid files/links/paths from '/var/lib/pgsql/14/data'
P00   INFO: write updated /var/lib/pgsql/14/data/postgresql.auto.conf
       [filtered 2 lines of output]
sudo systemctl start postgresql-14.service

Выделенный сервер репозитория

Конфигурация, описанная в разделе Быстрый старт , подходит для простых установок, но в корпоративных средах обычно используют выделенный сервер репозитория для хранения резервных копий и файлов архива WAL. Так резервные копии и архив WAL отделены от сервера баз данных и меньше страдают при его отказе. При этом по-прежнему полезно применять обычное ПО резервного копирования для самого сервера репозитория.

На серверах PostgreSQL параметр pg1-path должен содержать путь к локальному кластеру PostgreSQL, а pg1-host задавать не следует. При настройке сервера репозитория в файле конфигурации pgbackrest необходимо задать pg-host для подключения к первичному и резервным серверам, если они есть. Сведения более чем об одном сервере PostgreSQL следует указывать только в конфигурации pgbackrest на сервере репозитория. Порядок не важен: например, pg1-path/pg1-host и pg2-path/pg2-host могут соответствовать как первичному, так и резервному серверу.

Установка

Для хранения резервных копий кластера создаётся новый сервер с именем repository.

ПРИМЕЧАНИЕ:

Версия pgBackRest на сервере репозитория должна в точности совпадать с версией на сервере PostgreSQL.

В качестве владельца репозитория pgBackRest создаётся пользователь pgbackrest. Владельцем может быть любой пользователь, но во избежание путаницы лучше не использовать postgres, если он существует.

ПРИМЕЧАНИЕ:

При установке pgBackRest из пакета может предоставляться конфигурация logrotate, например /etc/logrotate.d/pgbackrest, которая выполняет ротацию журналов от имени определённого пользователя через директиву su (например, su postgres postgres). Поскольку файлы в /var/log/pgbackrest принадлежат пользователю, запускающему pgBackRest (здесь pgbackrest), директиву su необходимо изменить так, чтобы она соответствовала этому пользователю, иначе logrotate завершится ошибкой прав доступа.

repository ⇒ Создать пользователя pgbackrest

sudo groupadd pgbackrest
sudo adduser -gpgbackrest -n pgbackrest

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

Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

repository ⇒ Установить зависимости

sudo yum install postgresql-libs libssh2

repository ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

repository ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf

repository ⇒ Создать репозиторий pgBackRest

sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest

Конфигурация

pgBackRest может использовать TLS с клиентскими сертификатами для обмена данными между серверами. Также можно использовать SSH; см. Настройка SSH .

pgBackRest ожидает, что клиентские и серверные сертификаты созданы так же, как для PostgreSQL. Подробные инструкции по созданию сертификатов см. в разделе Защищённые соединения TCP/IP с TLS .

На сервере репозитория необходимо указать узел pg-primary, пользователя для подключения к нему и путь к базе данных. Первичный сервер будет настроен как pg1, чтобы позднее можно было добавить резервный.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

На сервере баз данных необходимо указать сервер и пользователя репозитория. Значение параметра repo1-host-user по умолчанию — pgbackrest. Если пользователь postgres выполняет восстановление на сервере репозитория, лучше не разрешать пользователю postgres также создавать резервные копии. Однако пользователь postgres может читать репозиторий непосредственно, если входит в ту же группу, что и пользователь pgbackrest.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-host/repo1-host-user

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

Настройка PostgreSQL описана в разделе Настройка архивирования .

Команды выполняются так же, как в конфигурации с одним сервером, за исключением того, что некоторые команды, например backup и expire, запускаются на сервере репозитория, а не на сервере баз данных.

Настройка сервера TLS

Сервер TLS pgBackRest необходимо настроить и запустить на каждом узле.

repository ⇒ Настроить сервер pgBackRest

sudo cat /etc/systemd/system/pgbackrest.service
[Unit]
Description=pgBackRest Server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=notify
Restart=always
RestartSec=1
User=pgbackrest
ExecStart=/usr/bin/pgbackrest server
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/bash -c "[ ! -z $MAINPID ]"
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest

pg-primary ⇒ Настроить сервер pgBackRest

sudo cat /etc/systemd/system/pgbackrest.service
[Unit]
Description=pgBackRest Server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=notify
Restart=always
RestartSec=1
User=postgres
ExecStart=/usr/bin/pgbackrest server
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/bash -c "[ ! -z $MAINPID ]"
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest

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

Создайте stanza в новом репозитории.

repository ⇒ Создать stanza

sudo -u pgbackrest pgbackrest --stanza=demo stanza-create

Проверьте правильность конфигурации и на сервере баз данных, и на сервере репозитория. Дополнительные сведения о команде check см. в разделе Проверка конфигурации .

pg-primary ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo check

repository ⇒ Проверить конфигурацию

sudo -u pgbackrest pgbackrest --stanza=demo check

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

Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup на сервере репозитория.

repository ⇒ Создать резервную копию демонстрационного кластера

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: no prior backup exists, incr backup has been changed to full

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

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

Чтобы восстановить кластер PostgreSQL, запустите pgBackRest с командой restore на сервере баз данных.

pg-primary ⇒ Остановить демонстрационный кластер, восстановить его и перезапустить PostgreSQL

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta restore
sudo systemctl start postgresql-14.service

Параллельное резервное копирование и восстановление

pgBackRest поддерживает параллельную обработку для ускорения сжатия и передачи данных. Количество используемых процессов задаётся параметром --process-max.

Обычно для команды backup лучше использовать не более 25% доступных CPU. Резервное копирование не обязательно должно быть очень быстрым, если оно выполняется регулярно; по возможности следует избегать влияния этого процесса на производительность базы данных.

Для команды восстановления можно и следует использовать все доступные CPU, поскольку во время восстановления кластер PostgreSQL остановлен и на сервере обычно не выполняется другая важная работа. Если на сервере несколько кластеров, это следует учитывать при настройке параллелизма восстановления.

repository ⇒ Создать резервную копию одним процессом

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на использование нескольких процессов backup

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

repository ⇒ Создать резервную копию несколькими процессами

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

repository ⇒ Получить сведения о резервных копиях демонстрационного кластера

sudo -u pgbackrest pgbackrest info
stanza: demo
    status: ok
    cipher: none

    db (current)
        wal archive min/max (14): 000000070000000000000023/000000070000000000000025

        full backup: 20261002-185937F
            timestamp start/stop: 2026-10-02 18:59:37+00 / 2026-10-02 18:59:40+00
            wal start/stop: 000000070000000000000023 / 000000070000000000000023
            database size: 33.5MB, database backup size: 33.5MB
            repo1: backup set size: 4.2MB, backup size: 4.2MB

        full backup: 20261002-185941F
            timestamp start/stop: 2026-10-02 18:59:41+00 / 2026-10-02 18:59:43+00
            wal start/stop: 000000070000000000000024 / 000000070000000000000025
            database size: 33.5MB, database backup size: 33.5MB
            repo1: backup set size: 4.2MB, backup size: 4.2MB

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


Запуск и остановка

Если резервный сервер повышается до первичного для тестирования или тестовый кластер восстанавливается из резервной копии рабочей среды, полезно запретить этим кластерам запись в репозитории pgBackRest. Для этого служит команда stop.

Команда stop блокирует следующие команды записи: archive-push, backup, expire, stanza-create и stanza-upgrade. Исключение из этого правила — stanza-delete (подробности см. в разделе Удаление stanza ).

pg-primary ⇒ Запретить команды записи pgBackRest

sudo -u postgres pgbackrest stop

Новые команды записи pgBackRest больше не будут запускаться.

repository ⇒ Попытаться создать резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: unable to check pg1: [StopError] raised from remote-0 tls protocol on 'pg-primary': stop file exists for all stanzas
P00  ERROR: [056]: unable to find primary cluster - cannot proceed
            HINT: are all available clusters in recovery?

Укажите --force, чтобы завершить уже работающие команды записи pgBackRest. Это относится и к асинхронному archive-get (хотя он снова запустится, если потребуется PostgreSQL). Если pgBackRest уже остановлен, повторная остановка выдаст предупреждение.

pg-primary ⇒ Повторно остановить службы pgBackRest

sudo -u postgres pgbackrest stop
P00   WARN: stop file already exists for all stanzas

Снова разрешите команды записи pgBackRest командой start. Команды записи, выполнявшиеся до остановки, не возобновятся автоматически, но теперь их можно запускать.

pg-primary ⇒ Разрешить команды записи pgBackRest

sudo -u postgres pgbackrest start

Также можно остановить pgBackRest для отдельной stanza.

pg-primary ⇒ Запретить команды записи pgBackRest для stanza demo

sudo -u postgres pgbackrest --stanza=demo stop

Новые команды записи pgBackRest для указанной stanza больше не будут запускаться.

repository ⇒ Попытаться создать резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo backup
P00   WARN: unable to check pg1: [StopError] raised from remote-0 tls protocol on 'pg-primary': stop file exists for stanza demo
P00  ERROR: [056]: unable to find primary cluster - cannot proceed
            HINT: are all available clusters in recovery?

При разрешении команд записи pgBackRest для отдельной stanza её также необходимо указать.

pg-primary ⇒ Разрешить команды записи pgBackRest для stanza demo

sudo -u postgres pgbackrest --stanza=demo start

Репликация

Репликация позволяет создать из одного первичного сервера несколько копий кластера PostgreSQL, называемых резервными серверами. Они полезны для распределения нагрузки чтения и обеспечения избыточности на случай отказа первичного сервера.

Установка

Для запуска резервного сервера создаётся новый узел с именем pg-standby.

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

Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-standby ⇒ Установить зависимости

sudo yum install postgresql-libs libssh2

pg-standby ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-standby ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Горячий резерв

Горячий резервный сервер выполняет репликацию через архив WAL и допускает запросы только для чтения.

Конфигурация pgBackRest почти такая же, как на pg-primary, но используется тип восстановления standby, чтобы кластер оставался в режиме восстановления после достижения конца потока WAL.

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на резервном сервере

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

pg-standby ⇒ Настроить сервер pgBackRest

sudo cat /etc/systemd/system/pgbackrest.service
[Unit]
Description=pgBackRest Server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=notify
Restart=always
RestartSec=1
User=postgres
ExecStart=/usr/bin/pgbackrest server
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/bash -c "[ ! -z $MAINPID ]"
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest

Создайте каталог, в который будет восстановлен PostgreSQL.

pg-standby ⇒ Создать каталог PostgreSQL

sudo -u postgres mkdir -p -m 700 /var/lib/pgsql/14/data

Теперь резервный сервер можно создать командой restore.

ВАЖНО:

Если кластер планируется вывести из режима восстановления, не делая его новым первичным сервером (например, для отчётности или тестирования), отключите архивирование с помощью --archive-mode=off или настройки archive_mode=off в postgresql.conf. Если архивирование не отключить, в репозиторий может попасть посторонний WAL, затрудняющий восстановление.

pg-standby ⇒ Восстановить демонстрационный резервный кластер

sudo -u postgres pgbackrest --stanza=demo --type=standby restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:00
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:22
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:47
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
# Removed by pgBackRest restore on 2026-10-02 18:58:52 # recovery_target_time = '2026-10-02 18:57:39.575732+00'
# Removed by pgBackRest restore on 2026-10-02 18:58:52 # recovery_target_action = 'promote'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:58:52
restore_command = 'pgbackrest --repo=3 --repo-target-time="2026-10-02 18:58:34+00" --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:59:32
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:00:04
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

Эта конфигурация рассчитана на случай, если резервный сервер будет повышен до первичного.

pg-standby:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить PostgreSQL

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

log_filename = 'postgresql.log'

pg-standby ⇒ Запустить PostgreSQL

sudo systemctl start postgresql-14.service

Журнал PostgreSQL содержит полезные сведения о восстановлении. В частности, обратите внимание на сообщения о том, что кластер перешёл в режим резервного сервера и готов принимать соединения только для чтения.

pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске

sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
       [filtered 4 lines of output]
LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
LOG:  database system was interrupted; last known up at 2026-10-02 18:59:41 UTC
LOG:  entering standby mode
LOG:  restored log file "00000007.history" from archive
LOG:  restored log file "000000070000000000000024" from archive
       [filtered 3 lines of output]

Простой способ проверить правильность настройки репликации — создать таблицу на pg-primary.

pg-primary ⇒ Создать новую таблицу на первичном сервере

sudo -u postgres psql -c " \
       begin; \
       create table replicated_table (message text); \
       insert into replicated_table values ('Important Data'); \
       commit; \
       select * from replicated_table";
       [filtered 4 lines of output]
    message
----------------
 Important Data
(1 row)

Затем запросить ту же таблицу на pg-standby.

pg-standby ⇒ Запросить новую таблицу на резервном сервере

sudo -u postgres psql -c "select * from replicated_table;"
ERROR:  relation "replicated_table" does not exist
LINE 1: select * from replicated_table;
                      ^

Что же пошло не так? Поскольку PostgreSQL получает сегменты WAL для репликации из архива, изменения не будут видны на резервном сервере, пока pg-primary не отправит в архив сегмент WAL, содержащий эти изменения.

Это можно сделать вручную вызовом pg_switch_wal(), который отправляет текущий сегмент WAL в архив (для последующих изменений создаётся новый сегмент WAL).

pg-primary ⇒ Вызвать pg_switch_wal()

sudo -u postgres psql -c "select *, current_timestamp from pg_switch_wal()";
 pg_switch_wal |       current_timestamp
---------------+-------------------------------
 0/2601E7C0    | 2026-10-02 19:00:10.880013+00
(1 row)

Теперь после небольшой задержки таблица появится на pg-standby.

pg-standby ⇒ Теперь новая таблица есть на резервном сервере (может потребоваться несколько повторных попыток)

sudo -u postgres psql -c " \
       select *, current_timestamp from replicated_table"
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:00:11.954843+00
(1 row)

Проверьте конфигурацию доступа резервного сервера к репозиторию.

pg-standby ⇒ Проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=1250-e6a5e2d8 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --stanza=demo
P00   INFO: check repo1 (standby)
P00   INFO: switch wal not performed because this is a standby
P00   INFO: check command end: completed successfully

Потоковая репликация

Потоковая репликация устанавливает прямое соединение с первичным сервером и применяет изменения сразу после их появления на нём, не полагаясь только на архив WAL. Это значительно уменьшает отставание резервного сервера от первичного.

Для потоковой репликации требуется пользователь с правом репликации.

pg-primary ⇒ Создать пользователя репликации

sudo -u postgres psql -c " \
       create user replicator password 'jw8s0F4' replication";
CREATE ROLE

Файл pg_hba.conf необходимо изменить, чтобы разрешить резервному серверу подключаться от имени пользователя репликации. Обязательно замените IP-адрес ниже фактическим IP-адресом pg-standby. После изменения pg_hba.conf потребуется перечитать конфигурацию.

pg-primary ⇒ Создать запись pg_hba.conf для пользователя репликации

sudo -u postgres sh -c 'echo \
       "host    replication     replicator      172.17.0.8/32           md5" \
       >> /var/lib/pgsql/14/data/pg_hba.conf'
sudo systemctl reload postgresql-14.service

Резервный сервер должен знать, как подключиться к первичному, поэтому в pgBackRest будет настроен параметр primary_conninfo.

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Задать primary_conninfo

[demo]

pg1-path=/var/lib/pgsql/14/data

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

Пароль можно указать в primary_conninfo, но использование файла .pgpass гибче и безопаснее.

pg-standby ⇒ Задать пароль репликации в файле .pgpass.

sudo -u postgres sh -c 'echo \
       "172.17.0.6:*:replication:replicator:jw8s0F4" \
       >> /var/lib/pgsql/.pgpass'
sudo -u postgres chmod 600 /var/lib/pgsql/.pgpass

Теперь резервный сервер можно создать командой restore.

pg-standby ⇒ Остановить PostgreSQL и восстановить демонстрационный резервный кластер

sudo systemctl stop postgresql-14.service
sudo -u postgres pgbackrest --stanza=demo --delta --type=standby restore
sudo -u postgres cat /var/lib/pgsql/14/data/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:00
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:22
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:57:47
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'
# Removed by pgBackRest restore on 2026-10-02 18:58:52 # recovery_target_time = '2026-10-02 18:57:39.575732+00'
# Removed by pgBackRest restore on 2026-10-02 18:58:52 # recovery_target_action = 'promote'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:58:52
restore_command = 'pgbackrest --repo=3 --repo-target-time="2026-10-02 18:58:34+00" --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 18:59:32
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

# Recovery settings generated by pgBackRest restore on 2026-10-02 19:00:18
primary_conninfo = 'host=172.17.0.6 port=5432 user=replicator'
restore_command = 'pgbackrest --stanza=demo archive-get %f "%p"'

ПРИМЕЧАНИЕ:

Настройка primary_conninfo записана в файл postgresql.auto.conf, поскольку в pgbackrest.conf она задана как recovery-option. Если требуется сохранить существующий файл postgresql.auto.conf, с командой restore можно использовать параметр --type=preserve.

По умолчанию RHEL хранит файл postgresql.conf в каталоге данных PostgreSQL. Поэтому изменение postgresql.conf было перезаписано при последнем восстановлении, и настройку hot_standby необходимо включить снова. Другие способы решения этой проблемы — хранить файл postgresql.conf в другом месте или включить hot_standby на сервере pg-primary, где эта настройка будет игнорироваться.

pg-standby:/var/lib/pgsql/14/data/postgresql.conf ⇒ Включить hot_standby

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

hot_standby = on

log_filename = 'postgresql.log'

pg-standby ⇒ Запустить PostgreSQL

sudo systemctl start postgresql-14.service

Журнал PostgreSQL подтвердит запуск потоковой репликации.

pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске

sudo -u postgres cat /var/lib/pgsql/14/data/log/postgresql.log
       [filtered 12 lines of output]
LOG:  database system is ready to accept read-only connections
LOG:  restored log file "000000070000000000000026" from archive
LOG:  started streaming WAL from primary at 0/27000000 on timeline 7

Теперь таблица, созданная на pg-primary, быстро появится на pg-standby без необходимости вызывать pg_switch_wal().

pg-primary ⇒ Создать новую таблицу на первичном сервере

sudo -u postgres psql -c " \
       begin; \
       create table stream_table (message text); \
       insert into stream_table values ('Important Data'); \
       commit; \
       select *, current_timestamp from stream_table";
       [filtered 4 lines of output]
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:00:24.428653+00
(1 row)

pg-standby ⇒ Запросить таблицу на резервном сервере

sudo -u postgres psql -c " \
       select *, current_timestamp from stream_table"
    message     |       current_timestamp
----------------+-------------------------------
 Important Data | 2026-10-02 19:00:24.605628+00
(1 row)

Несколько stanza

pgBackRest поддерживает несколько stanza. Чаще всего несколько stanza используют общий сервер репозитория.

Установка

Для запуска нового первичного сервера создаётся узел с именем pg-alt.

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

Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .

Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.

pg-alt ⇒ Установить зависимости

sudo yum install postgresql-libs libssh2

pg-alt ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки

sudo scp build:/build/pgbackrest/src/pgbackrest /usr/bin
sudo chmod 755 /usr/bin/pgbackrest

Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.

pg-alt ⇒ Создать файл конфигурации и каталоги pgBackRest

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

Конфигурация

Конфигурация pgBackRest почти идентична конфигурации pg-primary, но используется stanza demo-alt, чтобы резервные копии и архив хранились отдельно.

pg-alt:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на новом первичном сервере

[demo-alt]

pg1-path=/var/lib/pgsql/14/data



[global]

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

tls-server-address=*

tls-server-auth=pgbackrest-client=demo-alt

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[demo-alt]

pg1-host=pg-alt

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

pg-alt ⇒ Настроить сервер pgBackRest

sudo cat /etc/systemd/system/pgbackrest.service
[Unit]
Description=pgBackRest Server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=notify
Restart=always
RestartSec=1
User=postgres
ExecStart=/usr/bin/pgbackrest server
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/bash -c "[ ! -z $MAINPID ]"
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
sudo systemctl enable pgbackrest
sudo systemctl start pgbackrest

Создание демонстрационного кластера

pg-alt ⇒ Создать демонстрационный кластер

sudo -u postgres /usr/pgsql-14/bin/initdb \
       -D /var/lib/pgsql/14/data -k -A peer

pg-alt:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить параметры PostgreSQL

archive_command = 'pgbackrest --stanza=demo-alt archive-push %p'

archive_mode = on

log_filename = 'postgresql.log'

pg-alt ⇒ Запустить демонстрационный кластер

sudo systemctl restart postgresql-14.service

Создание stanza и проверка конфигурации

Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.

pg-alt ⇒ Создать stanza и проверить конфигурацию

sudo -u postgres pgbackrest --stanza=demo-alt --log-level-console=info stanza-create
P00   INFO: stanza-create command begin 2.59.3: --exec-id=929-571b66d7 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --stanza=demo-alt
P00   INFO: stanza-create for stanza 'demo-alt' on repo1
P00   INFO: stanza-create command end: completed successfully
sudo -u postgres pgbackrest --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=962-2cadc106 --log-level-console=info --log-level-file=detail --no-log-timestamp --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls
P00   INFO: check stanza 'demo-alt'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000001 successfully archived to '/var/lib/pgbackrest/archive/demo-alt/14-1/0000000100000000/000000010000000000000001-5cb25be2e89d0324cc2a94cbc964295204118888.gz' on repo1
P00   INFO: check command end: completed successfully

Если команда check запускается на сервере репозитория, проверяются все stanza.

repository ⇒ Проверить конфигурацию всех stanza

sudo -u pgbackrest pgbackrest --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=1384-3bcda35c --log-level-console=info --no-log-timestamp --repo1-path=/var/lib/pgbackrest
P00   INFO: check stanza 'demo'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000070000000000000027 successfully archived to '/var/lib/pgbackrest/archive/demo/14-1/0000000700000000/000000070000000000000027-b36b790bcf0b1a9f54bc84458117feb77853d452.gz' on repo1
P00   INFO: check stanza 'demo-alt'
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 000000010000000000000002 successfully archived to '/var/lib/pgbackrest/archive/demo-alt/14-1/0000000100000000/000000010000000000000002-c303ffb17f8a111070459593520aa35640317a38.gz' on repo1
P00   INFO: check command end: completed successfully

Асинхронное архивирование

Асинхронное архивирование включается параметром archive-async. Он включает асинхронную работу обеих команд: archive-push и archive-get.

Необходим каталог очереди. Команды хранят в нём временные данные, но работают с ним существенно по-разному, поэтому использование каталога очереди подробно описано в соответствующих разделах.

pg-primary ⇒ Создать каталог очереди

sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest

pg-standby ⇒ Создать каталог очереди

sudo mkdir -p -m 750 /var/spool/pgbackrest
sudo chown postgres:postgres /var/spool/pgbackrest

Необходимо настроить каталог очереди и включить асинхронное архивирование. Само по себе асинхронное архивирование даёт некоторое преимущество за счёт уменьшения количества соединений с удалённым хранилищем, а настройка process-max может значительно повысить производительность благодаря параллельному выполнению операций. Не задавайте process-max настолько большим, чтобы это влияло на обычную работу базы данных.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование

[demo]

pg1-path=/var/lib/pgsql/14/data



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

spool-path=/var/spool/pgbackrest

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование

[demo]

pg1-path=/var/lib/pgsql/14/data

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

spool-path=/var/spool/pgbackrest

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

ПРИМЕЧАНИЕ:

process-max задаётся в секциях команд, чтобы этот параметр не применялся к резервному копированию и восстановлению. Это также позволяет задать разные значения для archive-push и archive-get.

Для демонстрации потоковая репликация будет нарушена, чтобы PostgreSQL получал WAL через restore_command.

pg-primary ⇒ Нарушить потоковую репликацию, изменив пароль репликации

sudo -u postgres psql -c "alter user replicator password 'bogus'"
ALTER ROLE

pg-standby ⇒ Перезапустить резервный сервер, чтобы разорвать соединение

sudo systemctl restart postgresql-14.service

Отправка в архив

Асинхронная команда archive-push передаёт архивирование WAL отдельному процессу или процессам для повышения пропускной способности. Она «заглядывает вперёд» и находит сегменты WAL, готовые к архивированию помимо того, который PostgreSQL сейчас запрашивает через archive_command. Сегменты WAL передаются в архив непосредственно из каталога pg_xlog/pg_wal, а archive_command сообщает об успехе только после того, как сегмент WAL надёжно сохранён в архиве.

Каталог очереди содержит текущее состояние архивирования WAL. Записываемые в него файлы состояния обычно имеют нулевую длину и должны занимать минимум места (не более нескольких МБ) и создавать очень небольшую нагрузку ввода-вывода. Все сведения в этом каталоге можно воссоздать, поэтому при переносе кластера на другое оборудование сохранять каталог очереди не требуется.

ВАЖНО:

В первоначальной реализации асинхронного архивирования сегменты WAL копировались в каталог очереди перед сжатием и передачей. Новая реализация копирует WAL непосредственно из каталога pg_xlog. Если асинхронное архивирование использовалось в v1.12 или более ранней версии, перед обновлением внимательно прочитайте примечания к выпуску v1.13.

Файл [stanza]-archive-push-async.log позволяет отслеживать работу асинхронного процесса. Удобный способ проверки — быстро отправить несколько сегментов WAL.

pg-primary ⇒ Проверить параллельное асинхронное архивирование

sudo -u postgres psql -c " \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal(); \
       select pg_create_restore_point('test async push'); select pg_switch_wal();"
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info check
P00   INFO: check command begin 2.59.3: --exec-id=6864-e51531e7 --log-level-console=info --log-level-file=detail --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --stanza=demo
P00   INFO: check repo1 configuration (primary)
P00   INFO: check repo1 archive for WAL (primary)
P00   INFO: WAL segment 00000007000000000000002D successfully archived to '/var/lib/pgbackrest/archive/demo/14-1/0000000700000000/00000007000000000000002D-7addc4d9a1861c1b8b68300ea3a7db01fbe08ae2.gz' on repo1
P00   INFO: check command end: completed successfully

Теперь файл журнала будет содержать записи о параллельной асинхронной работе.

pg-primary ⇒ Проверить результаты в журнале

sudo -u postgres cat /var/log/pgbackrest/demo-archive-push-async.log
-------------------PROCESS START-------------------
P00   INFO: archive-push:async command begin 2.59.3: [/var/lib/pgsql/14/data/pg_wal] --archive-async --exec-id=6828-6cf1b924 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=2 --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: push 1 WAL file(s) to archive: 000000070000000000000028
P01 DETAIL: pushed WAL file '000000070000000000000028' to the archive
P00 DETAIL: statistics: {"socket.client":{"total":1},"socket.session":{"total":1},"tls.client":{"total":1},"tls.session":{"total":1}}
P00   INFO: archive-push:async command end: completed successfully

-------------------PROCESS START-------------------
P00   INFO: archive-push:async command begin 2.59.3: [/var/lib/pgsql/14/data/pg_wal] --archive-async --exec-id=6866-2a936d60 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=2 --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: push 5 WAL file(s) to archive: 000000070000000000000029...00000007000000000000002D
P02 DETAIL: pushed WAL file '00000007000000000000002A' to the archive
P01 DETAIL: pushed WAL file '000000070000000000000029' to the archive
P01 DETAIL: pushed WAL file '00000007000000000000002C' to the archive
P02 DETAIL: pushed WAL file '00000007000000000000002B' to the archive
P01 DETAIL: pushed WAL file '00000007000000000000002D' to the archive
P00 DETAIL: statistics: {"socket.client":{"total":1},"socket.session":{"total":1},"tls.client":{"total":1},"tls.session":{"total":1}}
P00   INFO: archive-push:async command end: completed successfully

Получение из архива

Асинхронная команда archive-get поддерживает локальную очередь WAL для повышения пропускной способности. Если сегмента WAL нет в очереди, он извлекается из репозитория вместе с достаточным количеством последовательных сегментов WAL для заполнения очереди. Максимальный размер очереди задаётся параметром archive-get-queue-max. Когда очередь заполнена менее чем наполовину, для её заполнения извлекаются дополнительные сегменты WAL.

Асинхронная работа наиболее полезна в средах с большим объёмом генерируемого WAL или высокой задержкой соединения с хранилищем репозитория (например, S3 или другим объектным хранилищем). При высокой задержке соединения может быть полезно увеличить process-max.

Файл [stanza]-archive-get-async.log позволяет отслеживать работу асинхронного процесса.

pg-standby ⇒ Проверить результаты в журнале

sudo -u postgres cat /var/log/pgbackrest/demo-archive-get-async.log
-------------------PROCESS START-------------------
P00   INFO: archive-get:async command begin 2.59.3: [000000070000000000000024, 000000070000000000000025, 000000070000000000000026, 000000070000000000000027, 000000070000000000000028, 000000070000000000000029, 00000007000000000000002A, 00000007000000000000002B] --archive-async --exec-id=1919-a90112cb --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=2 --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: get 8 WAL file(s) from archive: 000000070000000000000024...00000007000000000000002B
P01 DETAIL: found 000000070000000000000024 in the repo1: 14-1 archive
P02 DETAIL: found 000000070000000000000025 in the repo1: 14-1 archive
P02 DETAIL: found 000000070000000000000027 in the repo1: 14-1 archive
P01 DETAIL: found 000000070000000000000026 in the repo1: 14-1 archive
P00 DETAIL: unable to find 000000070000000000000028 in the archive
P00 DETAIL: statistics: {"socket.client":{"total":1},"socket.session":{"total":1},"tls.client":{"total":1},"tls.session":{"total":1}}
       [filtered 31 lines of output]
P00   INFO: archive-get:async command begin 2.59.3: [000000070000000000000028, 000000070000000000000029, 00000007000000000000002A, 00000007000000000000002B, 00000007000000000000002C, 00000007000000000000002D, 00000007000000000000002E, 00000007000000000000002F] --archive-async --exec-id=1976-2ef79408 --log-level-console=off --log-level-file=detail --log-level-stderr=off --no-log-timestamp --pg1-path=/var/lib/pgsql/14/data --process-max=2 --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --spool-path=/var/spool/pgbackrest --stanza=demo
P00   INFO: get 8 WAL file(s) from archive: 000000070000000000000028...00000007000000000000002F
P01 DETAIL: found 000000070000000000000028 in the repo1: 14-1 archive
P02 DETAIL: found 000000070000000000000029 in the repo1: 14-1 archive
P01 DETAIL: found 00000007000000000000002A in the repo1: 14-1 archive
P02 DETAIL: found 00000007000000000000002B in the repo1: 14-1 archive
P02 DETAIL: found 00000007000000000000002D in the repo1: 14-1 archive
P01 DETAIL: found 00000007000000000000002C in the repo1: 14-1 archive
P00 DETAIL: unable to find 00000007000000000000002E in the archive
P00 DETAIL: statistics: {"socket.client":{"total":1},"socket.session":{"total":1},"tls.client":{"total":1},"tls.session":{"total":1}}
       [filtered 14 lines of output]

pg-primary ⇒ Восстановить потоковую репликацию, изменив пароль репликации

sudo -u postgres psql -c "alter user replicator password 'jw8s0F4'"
ALTER ROLE

Резервное копирование с резервного сервера

pgBackRest может выполнять резервное копирование с резервного сервера вместо первичного. Для этого необходимо настроить сервер pg-standby и включить параметр backup-standby. Если настроено несколько резервных серверов, для резервного копирования используется первый найденный работающий резервный сервер.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg2-host/pg2-host-user и pg2-path

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data

pg2-host=pg-standby

pg2-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg2-host-cert-file=/etc/pgbackrest/cert/client.crt

pg2-host-key-file=/etc/pgbackrest/cert/client.key

pg2-host-type=tls

pg2-path=/var/lib/pgsql/14/data



[demo-alt]

pg1-host=pg-alt

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

backup-standby=y

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

Для резервного копирования необходимы и первичная, и резервная базы данных, хотя подавляющее большинство файлов копируется с резервного сервера, чтобы снизить нагрузку на первичный. Серверы баз данных можно настроить в любом порядке. pgBackRest автоматически определит, какой сервер первичный, а какой резервный.

repository ⇒ Создать резервную копию демонстрационного кластера с pg2

sudo -u pgbackrest pgbackrest --stanza=demo --log-level-console=detail backup
       [filtered 2 lines of output]
P00   INFO: execute backup start: backup begins after the requested immediate checkpoint completes
P00   INFO: backup start archive = 00000007000000000000002F, lsn = 0/2F000028
P00   INFO: wait for replay on the standby to reach 0/2F000028
P00   INFO: replay on the standby reached 0/2F000028
P00   INFO: check archive for prior segment 00000007000000000000002E
P01 DETAIL: backup file pg-primary:/var/lib/pgsql/14/data/log/postgresql.log (10.9KB, 0.42%) checksum dbfa988289c2ff32dcd198f19455165722870b43
P01 DETAIL: backup file pg-primary:/var/lib/pgsql/14/data/global/pg_control (8KB, 0.73%) checksum 0a793efbb7bb2e255bbb2bfac8f612bc943c7f31
P01 DETAIL: backup file pg-primary:/var/lib/pgsql/14/data/pg_hba.conf (4.5KB, 0.90%) checksum cfa97af1dab1b130f0a921fa2d10d76fe0c5f630
P01 DETAIL: match file from prior backup pg-primary:/var/lib/pgsql/14/data/current_logfiles (26B, 0.91%) checksum 78a9f5c10960f0d91fcd313937469824861795a2
P01 DETAIL: match file from prior backup pg-primary:/var/lib/pgsql/14/data/pg_logical/replorigin_checkpoint (8B, 0.91%) checksum 347fc8f2df71bd4436e38bd1516ccd7ea0d46532
       [filtered 1263 lines of output]

Эта инкрементная копия показывает, что большинство файлов копируется с сервера pg-standby и только несколько — с pg-primary.

pgBackRest создаёт с резервного сервера копию, идентичную копии с первичного. Для этого он запускает и завершает резервное копирование на pg-primary, копирует с pg-standby только реплицируемые файлы, а затем копирует немногочисленные оставшиеся файлы с pg-primary. Поэтому резервная копия включает журналы и статистику первичной базы данных.


Обновление PostgreSQL

Сразу после обновления PostgreSQL до новой основной версии во всех конфигурациях pgBackRest необходимо изменить pg-path на новое расположение базы данных и выполнить команду stanza-upgrade. Если на сервере настроено несколько репозиториев, stanza обновляется в каждом из них. Если база данных остановлена, используйте параметр --no-online.

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

pg-primary ⇒ Остановить старый кластер

sudo systemctl stop postgresql-14.service

Остановите старый кластер на резервном сервере: он будет восстановлен из только что обновлённого кластера.

pg-standby ⇒ Остановить старый кластер

sudo systemctl stop postgresql-14.service

Создайте новый кластер и выполните обновление.

pg-primary ⇒ Создать новый кластер и выполнить обновление

sudo -u postgres /usr/pgsql-15/bin/initdb \
       -D /var/lib/pgsql/15/data -k -A peer
sudo -u postgres sh -c 'cd /var/lib/pgsql && \
       /usr/pgsql-15/bin/pg_upgrade \
       --old-bindir=/usr/pgsql-14/bin \
       --new-bindir=/usr/pgsql-15/bin \
       --old-datadir=/var/lib/pgsql/14/data \
       --new-datadir=/var/lib/pgsql/15/data \
       --old-options=" -c config_file=/var/lib/pgsql/14/data/postgresql.conf" \
       --new-options=" -c config_file=/var/lib/pgsql/15/data/postgresql.conf"'
       [filtered 41 lines of output]
Checking for extension updates                              ok
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
       [filtered 4 lines of output]

Настройте параметры и порт нового кластера.

pg-primary:/var/lib/pgsql/15/data/postgresql.conf ⇒ Настроить PostgreSQL

archive_command = 'pgbackrest --stanza=demo archive-push %p'

archive_mode = on

log_filename = 'postgresql.log'

Обновите конфигурацию pgBackRest на всех системах, указав новый кластер.

pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path

[demo]

pg1-path=/var/lib/pgsql/15/data



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

spool-path=/var/spool/pgbackrest

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg-path

[demo]

pg1-path=/var/lib/pgsql/15/data

recovery-option=primary_conninfo=host=172.17.0.6 port=5432 user=replicator



[global]

archive-async=y

log-level-file=detail

repo1-host=repository

repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt

repo1-host-cert-file=/etc/pgbackrest/cert/client.crt

repo1-host-key-file=/etc/pgbackrest/cert/client.key

repo1-host-type=tls

spool-path=/var/spool/pgbackrest

tls-server-address=*

tls-server-auth=pgbackrest-client=demo

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key



[global:archive-get]

process-max=2



[global:archive-push]

process-max=2

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path и pg2-path, отключить резервное копирование с резервного сервера

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/15/data

pg2-host=pg-standby

pg2-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg2-host-cert-file=/etc/pgbackrest/cert/client.crt

pg2-host-key-file=/etc/pgbackrest/cert/client.key

pg2-host-type=tls

pg2-path=/var/lib/pgsql/15/data



[demo-alt]

pg1-host=pg-alt

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

backup-standby=n

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

pg-primary ⇒ Скопировать конфигурацию hba

sudo cp /var/lib/pgsql/14/data/pg_hba.conf \
       /var/lib/pgsql/15/data/pg_hba.conf

Перед запуском нового кластера необходимо выполнить команду stanza-upgrade.

pg-primary ⇒ Обновить stanza

sudo -u postgres pgbackrest --stanza=demo --no-online \
       --log-level-console=info stanza-upgrade
P00   INFO: stanza-upgrade command begin 2.59.3: --exec-id=7454-62cfb155 --log-level-console=info --log-level-file=detail --no-log-timestamp --no-online --pg1-path=/var/lib/pgsql/15/data --repo1-host=repository --repo1-host-ca-file=/etc/pgbackrest/cert/ca.crt --repo1-host-cert-file=/etc/pgbackrest/cert/client.crt --repo1-host-key-file=/etc/pgbackrest/cert/client.key --repo1-host-type=tls --stanza=demo
P00   INFO: stanza-upgrade for stanza 'demo' on repo1
P00   INFO: stanza-upgrade command end: completed successfully

Запустите новый кластер и убедитесь в успешной установке.

pg-primary ⇒ Запустить новый кластер

sudo systemctl start postgresql-15.service

Проверьте конфигурацию командой check.

pg-primary ⇒ Проверить конфигурацию

sudo systemctl status postgresql-15.service
sudo -u postgres pgbackrest --stanza=demo check

Удалите старый кластер.

pg-primary ⇒ Удалить старый кластер

sudo rm -rf /var/lib/pgsql/14/data

Установите исполняемые файлы новой версии PostgreSQL на резервном сервере и создайте кластер.

pg-standby ⇒ Удалить старый кластер и создать новый

sudo rm -rf /var/lib/pgsql/14/data
sudo -u postgres mkdir -p -m 700 /usr/pgsql-15/bin

Выполните check на сервере репозитория. Предупреждение о недоступности резервного сервера ожидаемо, поскольку резервный кластер остановлен. Эта команда показывает, что сервер репозитория располагает сведениями о резервном сервере и правильно настроен для работы с первичным.

repository ⇒ Проверить конфигурацию

sudo -u pgbackrest pgbackrest --stanza=demo check
P00   WARN: unable to check pg2: [DbConnectError] raised from remote-0 tls protocol on 'pg-standby': unable to connect to 'dbname='postgres' port=5432': connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
                Is the server running locally and accepting connections on that socket?

Создайте полную резервную копию нового кластера, а затем восстановите из неё резервный сервер. Если запрошен тип incr или diff, он автоматически изменится на full.

repository ⇒ Создать полную резервную копию

sudo -u pgbackrest pgbackrest --stanza=demo --type=full backup

pg-standby ⇒ Восстановить демонстрационный резервный кластер

sudo -u postgres pgbackrest --stanza=demo --type=standby restore

pg-standby ⇒ Запустить PostgreSQL и проверить конфигурацию pgBackRest

sudo systemctl start postgresql-15.service
sudo -u postgres pgbackrest --stanza=demo check

После восстановления резервного сервера можно включить резервное копирование с него.

repository:/etc/pgbackrest/pgbackrest.conf ⇒ Снова включить резервное копирование с резервного сервера

[demo]

pg1-host=pg-primary

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/15/data

pg2-host=pg-standby

pg2-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg2-host-cert-file=/etc/pgbackrest/cert/client.crt

pg2-host-key-file=/etc/pgbackrest/cert/client.key

pg2-host-type=tls

pg2-path=/var/lib/pgsql/15/data



[demo-alt]

pg1-host=pg-alt

pg1-host-ca-file=/etc/pgbackrest/cert/ca.crt

pg1-host-cert-file=/etc/pgbackrest/cert/client.crt

pg1-host-key-file=/etc/pgbackrest/cert/client.key

pg1-host-type=tls

pg1-path=/var/lib/pgsql/14/data



[global]

backup-standby=y

process-max=3

repo1-path=/var/lib/pgbackrest

repo1-retention-full=2

start-fast=y

tls-server-address=*

tls-server-auth=pgbackrest-client=*

tls-server-ca-file=/etc/pgbackrest/cert/ca.crt

tls-server-cert-file=/etc/pgbackrest/cert/server.crt

tls-server-key-file=/etc/pgbackrest/cert/server.key

4 - Справочник команд

Справочник команд pgBackRest со всеми параметрами резервного копирования, восстановления, архивирования и управления.

Введение

Команды выполняют различные функции pgBackRest. Здесь приведён полный список параметров команд: каждый применимый к команде параметр перечислен в её описании, даже если он применим и к другим командам. Сюда входят все параметры, которые также можно настроить в pgbackrest.conf.

Параметры, не имеющие логического типа, заданные в pgbackrest.conf, можно сбросить к значениям по умолчанию из командной строки с помощью префикса reset-. Это позволяет восстановить резервную копию непосредственно на сервере репозитория. Обычно pgBackRest выдаёт ошибку, поскольку определяет, что сервер базы данных удалённый, а удалённое восстановление невозможно. Если добавить --reset-pg1-host в командную строку, pgBackRest проигнорирует удалённый сервер базы данных и выполнит восстановление локально. Может потребоваться передать новый --pg1-path, чтобы выполнить восстановление в определённый каталог, отличный от каталога на сервере базы данных.

Префикс no- позволяет задать логическому параметру значение false в командной строке.

Любой параметр можно задать переменной окружения, добавив префикс PGBACKREST_ к имени параметра в верхнем регистре и заменив - на _: например, pg1-path превращается в PGBACKREST_PG1_PATH, а stanza — в PGBACKREST_STANZA. Логические параметры представляются так же, как в файле конфигурации, например PGBACKREST_COMPRESS="n"; варианты reset-* не допускаются. Для параметров, которые можно указывать несколько раз в командной строке или файле конфигурации, значения разделяются двоеточиями, например PGBACKREST_DB_INCLUDE="db1:db2".

Параметры командной строки переопределяют параметры окружения, а те переопределяют параметры файла конфигурации.

Сведения о типах параметров приведены во введении в конфигурацию

Команды

Команда Краткое описание
annotate Добавление, изменение или удаление аннотаций резервной копии после её создания.
archive-get Получение архивированных сегментов WAL для восстановления, PITR или восстановления реплики.
archive-push Получение сегментов WAL от PostgreSQL и отправка их в настроенные репозитории.
backup Создание резервных копий в целевом репозитории (по умолчанию — репозиторий с наивысшим приоритетом).
check Проверка конфигурации резервного копирования и архивирования stanza, а также работы архивирования WAL.
expire Удаление резервных копий и архивного WAL согласно настроенным политикам хранения.
help Вывод общей справки, справки по команде или по параметру.
info Вывод состояния и метаданных stanza и резервных копий в текстовом формате или JSON.
repo-get Чтение файлов репозитория (подобно cat) для администрирования, исследования и тестирования.
repo-ls Вывод списка файлов и путей репозитория (подобно ls) для администрирования, исследования и тестирования.
restore Восстановление из резервной копии (по умолчанию — последней) с возможностью восстановления на заданный момент времени.
server Запуск TLS-сервера pgBackRest для доступа к удалённому серверу без SSH.
server-ping Проверка того, что TLS-сервер pgBackRest принимает соединения.
stanza-create Создание метаданных stanza во всех настроенных репозиториях.
stanza-delete Безвозвратное удаление всех резервных копий и архивов stanza.
stanza-upgrade Обновление метаданных stanza после обновления основной версии PostgreSQL.
start Возобновление разрешения на запуск процессов pgBackRest после команды stop.
stop Запрет запуска новых процессов pgBackRest и, при необходимости, принудительная остановка работающих.
verify Проверка корректности данных резервных копий и архива в репозитории.
version Вывод установленной версии pgBackRest.

4.1 - Команда аннотирования (annotate)

Справочник по параметрам и поведению команды pgBackRest annotate.

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

Параметры команды

Параметр аннотации резервной копии (--annotation)

Добавление к резервной копии пользовательских пар «ключ — значение».

Пользователи могут добавлять к резервной копии информационные пары «ключ — значение». Этот параметр можно указывать несколько раз для добавления нескольких аннотаций.

Аннотации включаются в текстовый вывод команды info, если резервная копия указана через --set, и всегда присутствуют в выводе JSON.

example: --annotation=source="Sunday backup for website database"

Параметр набора резервной копии (--set)

Набор резервной копии для аннотирования.

Набор резервной копии, к которому применяются аннотации.

example: --set=20150131-153358F_20150131-153401I

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.2 - Команда получения из архива (archive-get)

Справочник по параметрам и поведению команды pgBackRest archive-get.

PostgreSQL использует эту команду для восстановления резервной копии, выполнения PITR или поддержания реплики в актуальном состоянии как альтернативу потоковой передаче. Сегменты WAL необходимы для восстановления PostgreSQL или поддержания реплики.

Если настроено несколько репозиториев, WAL запрашивается из них в порядке приоритета (например, repo1, repo2 и т. д.). Как правило, более быстрому или дешёвому хранилищу лучше назначать более высокий приоритет. Если репозиторий указан параметром --repo, поиск выполняется только в нём.

При восстановлении pgBackRest настраивает и формирует команду archive-get для использования PostgreSQL. Пример приведён в разделе Восстановление на заданный момент времени .

Параметры команды

Параметр асинхронного архивирования (--archive-async)

Асинхронная отправка и получение сегментов WAL.

Включает асинхронный режим работы команд archive-push и archive-get.

Асинхронный режим эффективнее, поскольку позволяет повторно использовать соединения и выполнять операции параллельно. Дополнительные сведения приведены в описании параметров spool-path, archive-get-queue-max и archive-push-queue-max.

default: n
example: --archive-async

Параметр максимального размера очереди получения из архива (--archive-get-queue-max)

Максимальный размер очереди archive-get в pgBackRest.

Задаёт максимальный размер очереди archive-get при включённом archive-async. Очередь хранится в spool-path и ускоряет передачу WAL в PostgreSQL.

default: 128MiB
allowed: [0B, 4PiB]
example: --archive-get-queue-max=1GiB

Параметр повторного запроса отсутствующего сегмента WAL (--archive-missing-retry)

Повторный запрос отсутствующего сегмента WAL

Повторно запрашивает сегмент WAL, об отсутствии которого ранее сообщила команда archive-get в асинхронном режиме. Это предотвращает использование уведомлений в каталоге очереди, оставшихся от предыдущего восстановления, которые могли бы привести к сбою восстановления, если согласованность ещё не достигнута.

Отключение этого параметра позволяет PostgreSQL надёжнее определять достижение конца WAL в архиве и переключаться на потоковую передачу с первичного сервера. Если повторные запросы включены, непрерывное поступление WAL в архив заставляет PostgreSQL продолжать получать WAL из архива вместо переключения на потоковую передачу.

При отключении этого параметра важно убедиться, что каталог очереди для stanza пуст. Команда restore очищает его автоматически, если каталог очереди настроен на момент восстановления. В противном случае пользователь должен самостоятельно обеспечить его очистку.

default: y
example: --no-archive-missing-retry

Параметр тайм-аута архивирования (--archive-timeout)

Тайм-аут архивирования.

Задаёт максимальное время в секундах, в течение которого ожидается поступление каждого сегмента WAL в архивный репозиторий pgBackRest. Тайм-аут применяется к командам check и backup, когда они ожидают архивирования сегментов WAL, необходимых для согласованности резервной копии.

default: 1m
allowed: [100ms, 1d]
example: --archive-timeout=30

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: --cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: --process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр каталога очереди (--spool-path)

Путь для хранения промежуточных данных.

Этот каталог используется для хранения данных асинхронных команд archive-push и archive-get.

Асинхронная команда archive-push записывает подтверждения в каталог очереди после успешного сохранения WAL в архиве (а при сбое — сообщения об ошибках), чтобы процесс переднего плана мог быстро уведомить PostgreSQL. Файлы подтверждений очень малы: нулевого размера при успехе и несколько сотен байтов при ошибке.

Асинхронная команда archive-get помещает WAL в очередь в каталоге очереди, чтобы быстро передавать его по запросу PostgreSQL. Перемещение файлов в PostgreSQL наиболее эффективно, когда каталог очереди находится в той же файловой системе, что и pg_xlog/pg_wal. Однако не рекомендуется размещать каталог очереди внутри pg_xlog/pg_wal, поскольку это может вызвать проблемы у утилит PostgreSQL, таких как pg_rewind.

Данные в каталоге очереди нельзя считать строго временными: они могут сохраняться после перезагрузки, и их следует сохранять. Однако их потеря не представляет проблемы. pgBackRest просто повторно проверит каждый сегмент WAL, чтобы убедиться в его надёжном архивировании для archive-push, и заново построит очередь для archive-get.

Каталог очереди предназначен для размещения в локальной файловой системе, совместимой с Posix, а не в удалённой файловой системе, такой как NFS или CIFS.

default: /var/spool/pgbackrest
example: --spool-path=/backup/db/spool

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

4.3 - Команда отправки в архив (archive-push)

Справочник по параметрам и поведению команды pgBackRest archive-push.

Принимает сегмент WAL от PostgreSQL и архивирует его в каждом репозитории, заданном индексированным параметром repo-path (сведения о настройке репозиториев приведены в разделе Репозиторий ). В зависимости от archive-async сегмент WAL может быть сразу отправлен в архив или сохранён локально. При нескольких настроенных репозиториях archive-push пытается отправить сегмент в максимально возможное их число.

Команда archive-push предназначена для настройки и вызова из PostgreSQL. Пример приведён в разделе Настройка архивирования .

Параметры команды

Параметр асинхронного архивирования (--archive-async)

Асинхронная отправка и получение сегментов WAL.

Включает асинхронный режим работы команд archive-push и archive-get.

Асинхронный режим эффективнее, поскольку позволяет повторно использовать соединения и выполнять операции параллельно. Дополнительные сведения приведены в описании параметров spool-path, archive-get-queue-max и archive-push-queue-max.

default: n
example: --archive-async

Параметр проверки архива (--archive-check)

Проверка наличия сегментов WAL в архиве перед завершением резервного копирования.

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

Этот параметр должен быть включён, если включён archive-copy.

default: y
example: --no-archive-check

Параметр проверки режима архивирования (--archive-mode-check)

Проверка настройки PostgreSQL archive_mode.

Этот параметр включён по умолчанию и запрещает использовать в PostgreSQL archive_mode=always.

Сегменты WAL, отправляемые с резервного сервера, могут логически совпадать с сегментами WAL с первичного сервера, но иметь другие контрольные суммы. Во избежание конфликтов рекомендуется отключить архивирование из нескольких источников.

ОСТОРОЖНО:

Если этот параметр отключён, крайне важно обеспечить, чтобы в репозиторий через команду archive-push писал только один процесс архивирования.

default: y
example: --no-archive-mode-check

Параметр размера пакета отправки в архив (--archive-push-batch-size)

Максимальный объём WAL, отправляемый за один асинхронный запуск.

В асинхронном режиме процесс archive-push отправляет все готовые сегменты WAL за один запуск. Поскольку archive-push-queue-max проверяется только в начале каждого запуска, при обработке очень большого числа сегментов очередь может значительно превысить предел до следующей проверки.

Этот параметр ограничивает объём WAL, обрабатываемый за один запуск, после чего процесс завершается и вновь запускается следующим вызовом archive-push, который повторно проверяет очередь. Меньшие значения позволяют проверять очередь чаще, но требуют более частого запуска асинхронного процесса. Значение округляется вниз до целого числа сегментов WAL, однако всегда обрабатывается хотя бы один сегмент.

default: 16GiB
allowed: [1MiB, 4PiB]
example: --archive-push-batch-size=1GiB

Параметр максимального размера очереди отправки в архив (--archive-push-queue-max)

Максимальный размер очереди архивирования PostgreSQL.

При достижении предела произойдёт следующее:

  • pgBackRest сообщит PostgreSQL об успешном архивировании WAL, а затем УДАЛИТ ЕГО.
  • В журнал PostgreSQL будет выведено предупреждение.

В этом случае поток архивного журнала прервётся, и PITR за этой точкой станет невозможен. Чтобы вновь обеспечить полные возможности восстановления, потребуется новая резервная копия.

В асинхронном режиме удаляется вся очередь, чтобы отдельные сегменты WAL не успевали попадать в архив до повторного превышения предела очереди.

В асинхронном режиме этот предел проверяется только в начале каждого запуска archive-push, поэтому за один запуск очередь может превысить его. Уменьшите archive-push-batch-size, чтобы проверять очередь чаще.

Эта возможность предотвращает заполнение тома с журналом, при котором PostgreSQL полностью остановится. Лучше потерять резервную копию, чем допустить остановку PostgreSQL.

allowed: [0B, 4PiB]
example: --archive-push-queue-max=1TiB

Устаревшее имя: archive-queue-max

Параметр тайм-аута архивирования (--archive-timeout)

Тайм-аут архивирования.

Задаёт максимальное время в секундах, в течение которого ожидается поступление каждого сегмента WAL в архивный репозиторий pgBackRest. Тайм-аут применяется к командам check и backup, когда они ожидают архивирования сегментов WAL, необходимых для согласованности резервной копии.

default: 1m
allowed: [100ms, 1d]
example: --archive-timeout=30

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: --cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр сжатия (--compress)

Сжатие файлов.

Файлы резервных копий совместимы с утилитами сжатия командной строки.

Этот параметр устарел. Вместо него следует использовать compress-type.

default: y
example: --no-compress

Параметр уровня сжатия (--compress-level)

Уровень сжатия файлов.

Задаёт уровень сжатия файлов, когда compress-type не равен none или задано compress=y (устаревший вариант).

default (depending on compress-type):
    bz2 - 9
    gz - 6
    lz4 - 1
    zst - 3

allow range (depending on compress-type):
    bz2 - [1, 9]
    gz - [-1, 9]
    lz4 - [-5, 12]
    zst - [-7, 22]

example: --compress-level=9

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр типа сжатия (--compress-type)

Тип сжатия файлов.

Поддерживаются следующие типы сжатия:

  • none - без сжатия
  • bz2 - формат сжатия bzip2
  • gz - формат сжатия gzip
  • lz4 - формат сжатия lz4 (доступен не на всех платформах)
  • zst - формат сжатия Zstandard (доступен не на всех платформах)
default: gz
example: --compress-type=none

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: --process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр каталога очереди (--spool-path)

Путь для хранения промежуточных данных.

Этот каталог используется для хранения данных асинхронных команд archive-push и archive-get.

Асинхронная команда archive-push записывает подтверждения в каталог очереди после успешного сохранения WAL в архиве (а при сбое — сообщения об ошибках), чтобы процесс переднего плана мог быстро уведомить PostgreSQL. Файлы подтверждений очень малы: нулевого размера при успехе и несколько сотен байтов при ошибке.

Асинхронная команда archive-get помещает WAL в очередь в каталоге очереди, чтобы быстро передавать его по запросу PostgreSQL. Перемещение файлов в PostgreSQL наиболее эффективно, когда каталог очереди находится в той же файловой системе, что и pg_xlog/pg_wal. Однако не рекомендуется размещать каталог очереди внутри pg_xlog/pg_wal, поскольку это может вызвать проблемы у утилит PostgreSQL, таких как pg_rewind.

Данные в каталоге очереди нельзя считать строго временными: они могут сохраняться после перезагрузки, и их следует сохранять. Однако их потеря не представляет проблемы. pgBackRest просто повторно проверит каждый сегмент WAL, чтобы убедиться в его надёжном архивировании для archive-push, и заново построит очередь для archive-get.

Каталог очереди предназначен для размещения в локальной файловой системе, совместимой с Posix, а не в удалённой файловой системе, такой как NFS или CIFS.

default: /var/spool/pgbackrest
example: --spool-path=/backup/db/spool

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр проверки заголовков WAL (--archive-header-check)

Проверка версии и идентификатора PostgreSQL в заголовках WAL.

Этот параметр включён по умолчанию и проверяет соответствие заголовка WAL версии PostgreSQL и системному идентификатору, чтобы убедиться, что WAL копируется в правильную stanza. Эта проверка дополняет проверку соответствия pg_control stanza и проверку того, что WAL копируется из того же каталога данных PostgreSQL, где находится pg_control.

Поэтому отключение этой проверки достаточно безопасно, но делать это следует только при необходимости, например если WAL зашифрован.

default: y
example: --no-archive-header-check

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

4.4 - Команда резервного копирования (backup)

Справочник по параметрам и поведению команды pgBackRest backup.

Если настроено несколько репозиториев, pgBackRest создаёт резервную копию в репозитории с наивысшим приоритетом (например, repo1), если не указан параметр --repo.

В pgBackRest нет встроенного планировщика, поэтому лучше запускать его через cron или другой механизм планирования.

Подробности и примеры приведены в разделе Создание резервной копии .

Параметры команды

Параметр аннотации резервной копии (--annotation)

Добавление к резервной копии пользовательских пар «ключ — значение».

Пользователи могут добавлять к резервной копии информационные пары «ключ — значение». Этот параметр можно указывать несколько раз для добавления нескольких аннотаций.

Аннотации включаются в текстовый вывод команды info, если резервная копия указана через --set, и всегда присутствуют в выводе JSON.

example: --annotation=source="Sunday backup for website database"

Параметр проверки архива (--archive-check)

Проверка наличия сегментов WAL в архиве перед завершением резервного копирования.

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

Этот параметр должен быть включён, если включён archive-copy.

default: y
example: --no-archive-check

Параметр копирования архива (--archive-copy)

Копирование в резервную копию сегментов WAL, необходимых для согласованности.

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

При использовании этого параметра желательно, чтобы команды archive-push и backup имели одинаковый compress-type (например, lz4). Иначе сегменты WAL потребуется повторно сжать с compress-type, используемым резервной копией, что может потребовать значительных ресурсов в зависимости от объёма WAL, созданного во время резервного копирования.

При восстановлении сегменты WAL будут находиться в pg_xlog/pg_wal, и PostgreSQL предпочтёт использовать их, а не вызывать restore_command.

Параметр archive-check должен быть включён, если включён archive-copy.

default: n
example: --archive-copy

Параметр проверки режима архивирования (--archive-mode-check)

Проверка настройки PostgreSQL archive_mode.

Этот параметр включён по умолчанию и запрещает использовать в PostgreSQL archive_mode=always.

Сегменты WAL, отправляемые с резервного сервера, могут логически совпадать с сегментами WAL с первичного сервера, но иметь другие контрольные суммы. Во избежание конфликтов рекомендуется отключить архивирование из нескольких источников.

ОСТОРОЖНО:

Если этот параметр отключён, крайне важно обеспечить, чтобы в репозиторий через команду archive-push писал только один процесс архивирования.

default: y
example: --no-archive-mode-check

Параметр тайм-аута архивирования (--archive-timeout)

Тайм-аут архивирования.

Задаёт максимальное время в секундах, в течение которого ожидается поступление каждого сегмента WAL в архивный репозиторий pgBackRest. Тайм-аут применяется к командам check и backup, когда они ожидают архивирования сегментов WAL, необходимых для согласованности резервной копии.

default: 1m
allowed: [100ms, 1d]
example: --archive-timeout=30

Параметр резервного копирования с резервного сервера (--backup-standby)

Резервное копирование с резервного кластера.

Включает резервное копирование с резервного сервера для снижения нагрузки на первичный кластер. Этот параметр требует настройки как первичного, так и резервного сервера.

Поддерживаются следующие режимы:

  • y - Для резервного копирования необходим резервный сервер.
  • prefer - Копирование с резервного сервера, если он доступен; иначе с первичного.
  • n - Копирование только с первичного сервера.
default: n
example: --backup-standby=y

Параметр контрольных сумм страниц (--checksum-page)

Проверка контрольных сумм страниц данных.

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

Ошибки проверки контрольных сумм не прерывают резервное копирование. Вместо этого в журнал выводятся предупреждения (а при настройках по умолчанию — и в консоль), а список некорректных страниц сохраняется в манифесте резервной копии.

example: --no-checksum-page

Параметр исключения путей и файлов (--exclude)

Исключение путей и файлов из резервной копии.

Все исключения задаются относительно $PGDATA. Если исключение заканчивается на /, исключаются только файлы в указанном каталоге: например, --exclude=junk/ исключит все файлы в каталоге $PGDATA/junk, но сохранит сам каталог. Если исключение не заканчивается на /, файл может либо точно совпадать с исключением, либо соответствовать исключению с добавленным /: например, --exclude=junk исключит каталог $PGDATA/junk и все содержащиеся в нём файлы.

Используйте эту возможность осторожно: очень легко исключить важные данные и нарушить согласованность резервной копии. Обязательно проверяйте восстановление!

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

ПРИМЕЧАНИЕ: при дельта-восстановлении исключения не учитываются. Все файлы и каталоги, исключённые при резервном копировании, будут удалены при дельта-восстановлении.

Этот параметр не следует использовать для исключения журналов PostgreSQL из резервной копии. Журналы можно вынести за пределы каталога PGDATA с помощью настройки PostgreSQL log_directory; при этом они также сохранятся после восстановления.

В командной строке или файле конфигурации можно задать несколько исключений.

example: --exclude=junk/

Параметр автоматического удаления устаревших копий (--expire-auto)

Автоматический запуск команды expire после успешного резервного копирования.

Этот параметр включён по умолчанию. Отключать его следует с осторожностью: в этом случае все резервные копии и архивы будут храниться бессрочно, что может привести к исчерпанию места в репозитории. Чтобы избежать этого, необходимо регулярно запускать команду expire.

При автоматическом запуске после успешного резервного копирования expire использует конфигурацию команды backup, поэтому параметры, заданные только в секции команды expire (например, [global:expire]), не применяются. Чтобы применялась конфигурация, специфичная для expire, отключите этот параметр и запускайте команду expire отдельно.

default: y
example: --expire-auto

Параметр принудительного выполнения (--force)

Принудительное резервное копирование остановленного кластера.

При использовании с --no-start-stop резервное копирование выполняется, даже если pgBackRest считает PostgreSQL работающим. Этот параметр следует использовать крайне осторожно, поскольку он, скорее всего, приведёт к созданию непригодной резервной копии.

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

default: n
example: --force

Параметр порога сохранения манифеста (--manifest-save-threshold)

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

Определяет, как часто манифест сохраняется во время резервного копирования. Сохранять его важно, поскольку он содержит контрольные суммы и обеспечивает эффективное возобновление. Фактический порог равен большему из двух значений: 1% размера резервной копии или manifest-save-threshold.

default: 1GiB
allowed: [1B, 1TiB]
example: --manifest-save-threshold=8GiB

Параметр копирования работающего кластера (--online)

Резервное копирование работающего кластера.

Параметр –no-online запрещает pgBackRest вызывать функции начала и завершения резервного копирования на кластере базы данных. Для этого PostgreSQL следует остановить; если он работает, pgBackRest выдаст ошибку.

Этот параметр позволяет создавать резервные копии остановленного кластера. Каталог pg_xlog/pg_wal копируется как есть, а archive-check автоматически отключается для этой копии.

default: y
example: --no-online

Параметр возобновления (--resume)

Разрешение возобновления неудавшегося резервного копирования.

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

default: y
example: --no-resume

Параметр быстрого запуска (--start-fast)

Принудительная контрольная точка для быстрого начала резервного копирования.

Принудительно выполняет контрольную точку, передавая y в параметр fast функции начала резервного копирования, чтобы копирование началось немедленно. Иначе резервное копирование начнётся после следующей плановой контрольной точки.

default: n
example: --start-fast

Параметр типа (--type)

Тип резервной копии.

Поддерживаются следующие типы резервных копий:

  • full - Копируются все файлы кластера базы данных; зависимостей от предыдущих копий нет.
  • incr - Инкрементная копия относительно последней успешной резервной копии.
  • diff - Аналогична инкрементной копии, но всегда основана на последней полной копии.
default: incr
example: --type=full

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: --cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр сжатия (--compress)

Сжатие файлов.

Файлы резервных копий совместимы с утилитами сжатия командной строки.

Этот параметр устарел. Вместо него следует использовать compress-type.

default: y
example: --no-compress

Параметр уровня сжатия (--compress-level)

Уровень сжатия файлов.

Задаёт уровень сжатия файлов, когда compress-type не равен none или задано compress=y (устаревший вариант).

default (depending on compress-type):
    bz2 - 9
    gz - 6
    lz4 - 1
    zst - 3

allow range (depending on compress-type):
    bz2 - [1, 9]
    gz - [-1, 9]
    lz4 - [-5, 12]
    zst - [-7, 22]

example: --compress-level=9

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр типа сжатия (--compress-type)

Тип сжатия файлов.

Поддерживаются следующие типы сжатия:

  • none - без сжатия
  • bz2 - формат сжатия bzip2
  • gz - формат сжатия gzip
  • lz4 - формат сжатия lz4 (доступен не на всех платформах)
  • zst - формат сжатия Zstandard (доступен не на всех платформах)
default: gz
example: --compress-type=none

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ: параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: --db-timeout=600

Параметр дельта-восстановления и копирования (--delta)

Восстановление или резервное копирование с использованием контрольных сумм.

При восстановлении по умолчанию предполагается, что каталоги данных и табличных пространств PostgreSQL существуют, но пусты. Этот параметр выполняет дельта-восстановление с использованием контрольных сумм.

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

default: n
example: --delta

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: --process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр проверки заголовков страниц (--page-header-check)

Проверка заголовков страниц PostgreSQL.

Этот параметр включён по умолчанию и добавляет проверки заголовков страниц.

Следует избегать отключения этого параметра, кроме случаев, когда оно необходимо, например если страницы зашифрованы.

default: y
example: --no-page-header-check

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр поблочного инкрементного резервного копирования (--repo-block)

Включение поблочного инкрементного резервного копирования.

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

ПРИМЕЧАНИЕ: прежде чем включить repo-block, необходимо включить параметр repo-bundle.

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

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

default: n
example: --repo1-block

Параметр пакетирования файлов в репозитории (--repo-bundle)

Пакетирование файлов в репозитории.

Объединяет небольшие файлы в пакеты, уменьшая общее число файлов, записываемых в репозиторий. Записывать меньше файлов обычно эффективнее, особенно в объектные хранилища, такие как S3. Кроме того, файлы нулевого размера не сохраняются (кроме записей в манифесте), что экономит время и место.

default: n
example: --repo1-bundle

Параметр предельного размера файла в пакете репозитория (--repo-bundle-limit)

Предельный размер файлов для пакетирования.

Максимальный размер файлов, включаемых в пакеты. Файлы большего размера хранятся отдельно.

Файлы в пакетах нельзя использовать повторно при возобновлении резервного копирования, поэтому этот параметр определяет, какие файлы можно использовать при возобновлении: чем больше значение, тем меньше таких файлов.

default: 2MiB
allowed: [8KiB, 1PiB]
example: --repo1-bundle-limit=10MiB

Параметр размера пакета репозитория (--repo-bundle-size)

Целевой размер пакета файлов.

Определяет целевой суммарный размер файлов, добавляемых в один пакет. Несжатый пакет может достигать размера repo-bundle-size + repo-bundle-limit, поэтому не следует задавать этому параметру максимальный размер, допустимый файловой системой.

Как правило, слишком большое значение нежелательно: при повторной попытке потребуется заново обработать весь пакет.

default: 20MiB
allowed: [1MiB, 1PiB]
example: --repo1-bundle-size=10MiB

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Жёсткие ссылки между файлами резервных копий в репозитории.

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

default: n
example: --repo1-hardlink

Устаревшее имя: hardlink

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр хранения архива (--repo-retention-archive)

Число резервных копий, для которых сохраняется непрерывный WAL.

ПРИМЕЧАНИЕ: сегменты WAL, необходимые для согласованности резервной копии, всегда сохраняются до удаления этой копии независимо от настройки данного параметра.

Если значение не задано, а repo-retention-full-type равен count (по умолчанию), то для удаления архива по умолчанию используется значение repo-retention-full (или repo-retention-diff), соответствующее repo-retention-archive-type, заданному как full (или diff). Это гарантирует, что WAL удаляется только для уже удалённых резервных копий. Если repo-retention-full-type равен time, по умолчанию удаляются архивы, предшествующие самой старой полной копии, оставшейся после применения настройки repo-retention-full.

Этот параметр должен быть задан, если repo-retention-archive-type равен incr. При острой нехватке дискового пространства он вместе с repo-retention-archive-type позволяет агрессивнее удалять сегменты WAL. Однако это исключает возможность PITR из копий с удалённым WAL и потому не рекомендуется.

allowed: [1, 9999999]
example: --repo1-retention-archive=2

Устаревшее имя: retention-archive

Параметр типа хранения архива (--repo-retention-archive-type)

Тип резервных копий для хранения WAL.

При значении full pgBackRest сохраняет архивные журналы для числа полных резервных копий, заданного repo-retention-archive. При значении diff (дифференциальные) pgBackRest сохраняет архивные журналы для числа полных и дифференциальных копий, заданного repo-retention-archive: если последняя копия полная, для целей хранения в репозитории она учитывается как дифференциальная. При значении incr (инкрементные) pgBackRest сохраняет архивные журналы для числа полных, дифференциальных и инкрементных копий, заданного repo-retention-archive. Рекомендуется оставить значение по умолчанию, при котором WAL удаляется только вместе с полными резервными копиями.

default: full
example: --repo1-retention-archive-type=diff

Устаревшее имя: retention-archive-type

Параметр хранения дифференциальных копий (--repo-retention-diff)

Число сохраняемых дифференциальных резервных копий.

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

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

allowed: [1, 9999999]
example: --repo1-retention-diff=3

Устаревшее имя: retention-diff

Параметр хранения полных копий (--repo-retention-full)

Число или срок хранения полных резервных копий.

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

allowed: [1, 9999999]
example: --repo1-retention-full=2

Устаревшее имя: retention-full

Параметр типа хранения полных копий (--repo-retention-full-type)

Тип срока хранения полных резервных копий.

Определяет, означает ли настройка repo-retention-full период времени (в днях) или число полных копий, которые нужно сохранять.

При значении time полные копии старше repo-retention-full удаляются из репозитория, если существует хотя бы ещё одна копия, возраст которой не меньше значения repo-retention-full. Например, если repo-retention-full равен 30 (дней) и есть 2 полные копии возрастом 25 и 35 дней, ни одна не будет удалена: после удаления копии возрастом 35 дней останется только копия возрастом 25 дней, что нарушит политику хранения за 30 дней. Эта политика требует наличия хотя бы одной копии возрастом 30 дней перед удалением более старой. Архивный WAL, предшествующий самой старой оставшейся полной копии, удаляется автоматически, если repo-retention-archive-type и repo-retention-archive не заданы явно.

При значении count полные копии сверх числа repo-retention-full удаляются. Например, если repo-retention-full равен 4 и завершается пятая полная копия, самая старая полная копия будет удалена, чтобы их число осталось равным 4.

Резервная копия учитывается при применении политики хранения только после успешного завершения. Например, если repo-retention-full-type равен count, а repo-retention-full равен 2, для удаления самой старой копии должны существовать 3 завершённые полные копии.

default: count
example: --repo1-retention-full-type=time

Параметр хранения истории резервных копий (--repo-retention-history)

Число дней хранения манифестов истории резервных копий.

После завершения резервного копирования копия манифеста сохраняется в каталоге backup.history. По умолчанию эти файлы никогда не удаляются, поскольку полезны для анализа данных, например для измерения роста резервных копий и WAL со временем.

Параметр repo-retention-history задаёт число дней хранения манифестов истории резервных копий. Неудалённые резервные копии всегда сохраняются в истории. Укажите repo-retention-history=0, чтобы хранить историю только для неудалённых резервных копий.

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

allowed: [0, 9999999]
example: --repo1-retention-history=365

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Создание символических ссылок внутри репозитория.

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

Хотя подавляющему большинству пользователей эта возможность, вероятно, не нужна, она остаётся включённой по умолчанию ради совместимости. Однако для Posix-подобных хранилищ, не поддерживающих символические ссылки, может быть полезно отключить их.

default: y
example: --no-repo1-symlink

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: --pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: --pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: --pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: --pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: --pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ: при pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: --pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: --pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: --pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: --pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: --pg1-user=backupuser

4.5 - Команда проверки конфигурации (check)

Справочник по параметрам и поведению команды pgBackRest check.

Команда check проверяет правильность настройки pgBackRest и archive_command для архивирования и резервного копирования указанной stanza. Она пытается проверить все репозитории и базы данных, настроенные для сервера, на котором запущена. Команда обнаруживает ошибки конфигурации, особенно архивирования, из-за которых резервные копии оказываются неполными, поскольку необходимые сегменты WAL не попали в архив. Её можно запускать на сервере PostgreSQL или сервере репозитория. Также её можно запускать на резервном сервере, однако, поскольку pg_switch_xlog()/pg_switch_wal() нельзя выполнить на резервном сервере, в этом случае проверяется только конфигурация репозитория.

Для принудительного архивирования сегмента WAL в PostgreSQL вызываются pg_create_restore_point('pgBackRest Archive Check') и pg_switch_xlog()/pg_switch_wal().

Параметры команды

Параметр проверки архива (--archive-check)

Проверка наличия сегментов WAL в архиве перед завершением резервного копирования.

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

Этот параметр должен быть включён, если включён archive-copy.

default: y
example: --no-archive-check

Параметр проверки режима архивирования (--archive-mode-check)

Проверка настройки PostgreSQL archive_mode.

Этот параметр включён по умолчанию и запрещает использовать в PostgreSQL archive_mode=always.

Сегменты WAL, отправляемые с резервного сервера, могут логически совпадать с сегментами WAL с первичного сервера, но иметь другие контрольные суммы. Во избежание конфликтов рекомендуется отключить архивирование из нескольких источников.

ОСТОРОЖНО:

Если этот параметр отключён, крайне важно обеспечить, чтобы в репозиторий через команду archive-push писал только один процесс архивирования.

default: y
example: --no-archive-mode-check

Параметр тайм-аута архивирования (--archive-timeout)

Тайм-аут архивирования.

Задаёт максимальное время в секундах, в течение которого ожидается поступление каждого сегмента WAL в архивный репозиторий pgBackRest. Тайм-аут применяется к командам check и backup, когда они ожидают архивирования сегментов WAL, необходимых для согласованности резервной копии.

default: 1m
allowed: [100ms, 1d]
example: --archive-timeout=30

Параметр резервного копирования с резервного сервера (--backup-standby)

Резервное копирование с резервного кластера.

Включает резервное копирование с резервного сервера для снижения нагрузки на первичный кластер. Этот параметр требует настройки как первичного, так и резервного сервера.

Поддерживаются следующие режимы:

  • y - Для резервного копирования необходим резервный сервер.
  • prefer - Копирование с резервного сервера, если он доступен; иначе с первичного.
  • n - Копирование только с первичного сервера.
default: n
example: --backup-standby=y

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ: параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: --db-timeout=600

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: --pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: --pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: --pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: --pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: --pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ: при pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: --pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: --pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: --pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: --pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: --pg1-user=backupuser

4.6 - Команда удаления устаревших копий (expire)

Справочник по параметрам и поведению команды pgBackRest expire.

pgBackRest выполняет ротацию полных резервных копий в зависимости от типа срока хранения: по числу копий или по периоду времени. Если задано число, удаление зависит не от времени создания копий, а от количества, которое необходимо сохранить. Дифференциальные копии хранятся по числу, но всегда удаляются вместе с полной копией, от которой зависят. Инкрементные копии не удаляются независимо по сроку хранения: они всегда удаляются вместе со связанной полной или дифференциальной копией. Подробности и примеры приведены в разделах Хранение полных резервных копий и Хранение дифференциальных резервных копий .

По умолчанию архивный WAL сохраняется для ещё не удалённых резервных копий. Хотя это не рекомендуется, правила можно изменить для каждого репозитория параметрами retention-archive. Подробности и примеры приведены в разделе Хранение архива .

Команда expire автоматически запускается после каждого успешного резервного копирования; пользователь также может запустить её вручную. При ручном запуске удаление выполняется согласно настройкам хранения каждого настроенного репозитория. Если указан --repo, удаление выполняется только в этом репозитории. Пользователь также может ограничить удаление конкретным набором резервной копии с помощью --set: если не указан --repo, поиск выполняется во всех репозиториях и удаляются наборы, соответствующие критериям. При каждом запуске expire правила хранения архива также проверяются и применяются.

Параметры команды

Параметр удаления архива до указанного сегмента (--archive-expire-before)

Удаление архива WAL, предшествующего указанному сегменту WAL.

Удаляет сегменты WAL, предшествующие указанному, но только те, которые не нужны сохраняемым резервным копиям: то есть сегменты старше самой ранней сохраняемой копии либо любые сегменты, если в репозитории нет копий. Указанный сегмент и всё после него сохраняются. Это соответствует значению, которое PostgreSQL передаёт archive_cleanup_command как %r.

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

example: --archive-expire-before=000000010000000000000010

Параметр самой старой копии (--oldest)

Удаление самого старого набора резервной копии, допустимого к удалению.

Удаляет самый старый набор полной резервной копии, который можно удалить (то есть остаётся хотя бы одна более новая полная копия). Это эквивалентно ручному уменьшению числа хранимых копий на одну, но вычисляется автоматически. Все копии, связанные с удаляемым полным набором (дифференциальные и инкрементные), также удаляются.

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

Если хранение полных копий настроено по времени (через --repo-retention-full-type=time), --oldest для этого запуска использует удаление по числу копий.

ПРЕДУПРЕЖДЕНИЕ:

Этот параметр нельзя сочетать с --set.

default: n
example: --oldest

Параметр набора резервной копии (--set)

Набор резервной копии для удаления.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр крайне осторожно: он безвозвратно удаляет из репозитория pgBackRest все копии указанного набора и все архивы, не требуемые для согласованности резервной копии. Это может исключить возможность PITR. Если настроены --repo-retention-full и/или --repo-retention-archive, при таком разовом удалении рекомендуется переопределить их максимальными значениями, чтобы избежать непреднамеренного удаления архивов.

example: --set=20150131-153358F_20150131-153401I

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр пробного запуска (--dry-run)

Пробный запуск команды.

Параметр --dry-run доступен только в командной строке. Его можно передать, чтобы определить, какие изменения выполнит команда, без фактического внесения изменений.

default: n
example: --dry-run

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр хранения архива (--repo-retention-archive)

Число резервных копий, для которых сохраняется непрерывный WAL.

ПРИМЕЧАНИЕ: сегменты WAL, необходимые для согласованности резервной копии, всегда сохраняются до удаления этой копии независимо от настройки данного параметра.

Если значение не задано, а repo-retention-full-type равен count (по умолчанию), то для удаления архива по умолчанию используется значение repo-retention-full (или repo-retention-diff), соответствующее repo-retention-archive-type, заданному как full (или diff). Это гарантирует, что WAL удаляется только для уже удалённых резервных копий. Если repo-retention-full-type равен time, по умолчанию удаляются архивы, предшествующие самой старой полной копии, оставшейся после применения настройки repo-retention-full.

Этот параметр должен быть задан, если repo-retention-archive-type равен incr. При острой нехватке дискового пространства он вместе с repo-retention-archive-type позволяет агрессивнее удалять сегменты WAL. Однако это исключает возможность PITR из копий с удалённым WAL и потому не рекомендуется.

allowed: [1, 9999999]
example: --repo1-retention-archive=2

Устаревшее имя: retention-archive

Параметр типа хранения архива (--repo-retention-archive-type)

Тип резервных копий для хранения WAL.

При значении full pgBackRest сохраняет архивные журналы для числа полных резервных копий, заданного repo-retention-archive. При значении diff (дифференциальные) pgBackRest сохраняет архивные журналы для числа полных и дифференциальных копий, заданного repo-retention-archive: если последняя копия полная, для целей хранения в репозитории она учитывается как дифференциальная. При значении incr (инкрементные) pgBackRest сохраняет архивные журналы для числа полных, дифференциальных и инкрементных копий, заданного repo-retention-archive. Рекомендуется оставить значение по умолчанию, при котором WAL удаляется только вместе с полными резервными копиями.

default: full
example: --repo1-retention-archive-type=diff

Устаревшее имя: retention-archive-type

Параметр хранения дифференциальных копий (--repo-retention-diff)

Число сохраняемых дифференциальных резервных копий.

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

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

allowed: [1, 9999999]
example: --repo1-retention-diff=3

Устаревшее имя: retention-diff

Параметр хранения полных копий (--repo-retention-full)

Число или срок хранения полных резервных копий.

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

allowed: [1, 9999999]
example: --repo1-retention-full=2

Устаревшее имя: retention-full

Параметр типа хранения полных копий (--repo-retention-full-type)

Тип срока хранения полных резервных копий.

Определяет, означает ли настройка repo-retention-full период времени (в днях) или число полных копий, которые нужно сохранять.

При значении time полные копии старше repo-retention-full удаляются из репозитория, если существует хотя бы ещё одна копия, возраст которой не меньше значения repo-retention-full. Например, если repo-retention-full равен 30 (дней) и есть 2 полные копии возрастом 25 и 35 дней, ни одна не будет удалена: после удаления копии возрастом 35 дней останется только копия возрастом 25 дней, что нарушит политику хранения за 30 дней. Эта политика требует наличия хотя бы одной копии возрастом 30 дней перед удалением более старой. Архивный WAL, предшествующий самой старой оставшейся полной копии, удаляется автоматически, если repo-retention-archive-type и repo-retention-archive не заданы явно.

При значении count полные копии сверх числа repo-retention-full удаляются. Например, если repo-retention-full равен 4 и завершается пятая полная копия, самая старая полная копия будет удалена, чтобы их число осталось равным 4.

Резервная копия учитывается при применении политики хранения только после успешного завершения. Например, если repo-retention-full-type равен count, а repo-retention-full равен 2, для удаления самой старой копии должны существовать 3 завершённые полные копии.

default: count
example: --repo1-retention-full-type=time

Параметр хранения истории резервных копий (--repo-retention-history)

Число дней хранения манифестов истории резервных копий.

После завершения резервного копирования копия манифеста сохраняется в каталоге backup.history. По умолчанию эти файлы никогда не удаляются, поскольку полезны для анализа данных, например для измерения роста резервных копий и WAL со временем.

Параметр repo-retention-history задаёт число дней хранения манифестов истории резервных копий. Неудалённые резервные копии всегда сохраняются в истории. Укажите repo-retention-history=0, чтобы хранить историю только для неудалённых резервных копий.

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

allowed: [0, 9999999]
example: --repo1-retention-history=365

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Создание символических ссылок внутри репозитория.

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

Хотя подавляющему большинству пользователей эта возможность, вероятно, не нужна, она остаётся включённой по умолчанию ради совместимости. Однако для Posix-подобных хранилищ, не поддерживающих символические ссылки, может быть полезно отключить их.

default: y
example: --no-repo1-symlink

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.7 - Команда справки (help)

Справочник по параметрам и поведению команды pgBackRest help.

Предоставляется три уровня справки. Если команда не указана, выводится общая справка. Если указана команда (например, pgbackrest help backup), выводится её полное описание со списком допустимых параметров. Если вместе с командой указан параметр (например, pgbackrest help backup type), выводится полное описание этого параметра применительно к команде.

Параметры команды

Параметр вывода справки (--help)

Вывод справки.

Выводит справку, даже если команда help не указана, и переопределяет параметр --version.

default: n
example: --help

Параметр вывода версии (--version)

Вывод версии.

Отображает версию, даже если не указаны команды version или help.

default: n
example: --version

4.8 - Команда вывода сведений (info)

Справочник по параметрам и поведению команды pgBackRest info.

Команда info работает с одной stanza или со всеми stanza. По умолчанию выводится текстовая сводка резервных копий для запрошенных stanza, предназначенная для чтения человеком. Этот формат может меняться в любом выпуске.

Для машиночитаемого вывода используйте --output=json. Вывод JSON содержит гораздо больше сведений, чем текстовый, и сохраняет стабильный формат, если не обнаружена ошибка.

Чтобы ускорить выполнение, ограничьте вывод сведениями о ходе выполнения, указав --detail-level=progress. При этом пропускаются все проверки, кроме доступности stanza.

Для каждой stanza выводится отдельный раздел; параметром --stanza можно ограничить вывод одной stanza. Поле «status» кратко отражает состояние stanza. Значение «ok» означает, что pgBackRest работает нормально. При нескольких репозиториях состояние «mixed» указывает на проблемы со stanza в одном или нескольких репозиториях; в этом случае её состояние подробно выводится для каждого репозитория. Если в репозитории возникла ошибка, не относящаяся к известным кодам, используется код «other» и приводятся полные сведения об ошибке. Поле «wal archive min/max» показывает минимальный и максимальный WAL, хранящийся в архиве. При нескольких репозиториях значения учитывают все репозитории, если не задан --repo. Возможны пропуски из-за политик хранения архива или по другим причинам.

Если на сервере выполняется какая-либо из этих команд, рядом с «status» появляются сообщения «backup/expire running» и/или «restore running». В текстовом выводе также показывается ход выполнения по каждому репозиторию, а в вывод JSON включается массив «repo».

Резервные копии выводятся от старых к новым. Самая старая копия всегда полная (обозначается F в конце метки), а самая новая может быть полной, дифференциальной (метка заканчивается на D) или инкрементной (на I).

Поле «timestamp start/stop» определяет период выполнения резервного копирования. По «timestamp stop» можно выбрать копию для восстановления на заданный момент времени. Дополнительные сведения приведены в разделе Восстановление на заданный момент времени .

Поле «wal start/stop» задаёт диапазон WAL, необходимый для приведения базы данных в согласованное состояние при восстановлении. Команда backup перед завершением гарантирует наличие этого диапазона WAL в архиве.

Поле «database size» — полный несжатый размер базы данных, а «database backup size» — объём данных базы, который фактически нужно скопировать (для полных копий они совпадают).

Поле «repo» указывает репозиторий, содержащий копию. Поле «backup set size» включает все файлы этой копии и всех используемых ею копий в репозитории, необходимых для восстановления базы данных из неё, а «backup size» — только файлы этой копии (для полных копий значения также совпадают). Если в pgBackRest включено сжатие, размеры в репозитории отражают размеры сжатых файлов.

Поле «backup reference total» сводит сведения о дополнительных копиях, необходимых для восстановления этой копии. Полный список зависимостей можно вывести параметром --set.

Параметры команды

Параметр уровня детализации (--detail-level)

Уровень детализации вывода.

Поддерживаются следующие уровни:

  • progress - Только текущий ход резервного копирования или удаления копий. Этот уровень нельзя использовать с параметром --set.
  • full - Полные сведения.
default: full
example: --detail-level=progress

Параметр вывода (--output)

Формат вывода.

Поддерживаются следующие типы вывода:

  • text - Сводка сведений о резервных копиях для чтения человеком.
  • json - Исчерпывающие машиночитаемые сведения о резервных копиях в формате JSON.
default: text
example: --output=json

Параметр набора резервной копии (--set)

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

Подробные сведения включают полный список дополнительных копий, необходимых для восстановления этой копии, список баз данных (с OID) в наборе (кроме шаблонных баз), табличные пространства (с OID) и пути их восстановления по умолчанию, а также символические ссылки с целями, на которые они будут восстановлены при указании --link-all.

example: --set=20150131-153358F_20150131-153401I

Параметр типа (--type)

Фильтрация по типу резервной копии.

Фильтрует вывод по одному из следующих типов резервных копий:

  • full - Только полные копии.
  • diff - Только дифференциальные копии.
  • incr - Только инкрементные копии.
example: --type=full

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.9 - Команда чтения из репозитория (repo-get)

Справочник по параметрам и поведению команды pgBackRest repo-get.

Аналог команды Unix cat, работающий со всеми поддерживаемыми типами репозиториев. Команда требует полного имени файла и предназначена прежде всего для администрирования, исследования и тестирования. Она не является обязательной частью обычной настройки pgBackRest.

Если репозиторий зашифрован, repo-get автоматически расшифрует файл. Автоматическая распаковка не выполняется, но вывод можно передать по конвейеру соответствующей команде распаковки, например gzip -d.

Если настроено несколько репозиториев, по умолчанию команда использует репозиторий с наивысшим приоритетом (например, repo1), если не указан параметр --repo.

Параметры команды

Параметр игнорирования отсутствующего файла (--ignore-missing)

Игнорирование отсутствующего исходного файла.

Если исходный файл отсутствует, завершается с кодом 1, но не выдаёт ошибку.

default: n
example: --ignore-missing

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр необработанных данных (--raw)

Запрет преобразования данных.

Не преобразует данные (то есть не шифрует, не распаковывает и т. п.) для текущей команды.

default: n
example: --raw

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.10 - Команда просмотра репозитория (repo-ls)

Справочник по параметрам и поведению команды pgBackRest repo-ls.

Аналог команды Unix ls, работающий со всеми поддерживаемыми типами репозиториев. Команда принимает абсолютный путь либо путь относительно каталога репозитория, заданного параметром --repo-path, и предназначена прежде всего для администрирования, исследования и тестирования. Она не является обязательной частью обычной настройки pgBackRest.

В текстовом выводе по умолчанию каждое имя файла выводится на отдельной строке. Для вывода JSON укажите --output=json.

Если настроено несколько репозиториев, по умолчанию команда использует репозиторий с наивысшим приоритетом (например, repo1), если не указан параметр --repo.

Параметры команды

Параметр фильтрации вывода (--filter)

Фильтрация вывода регулярным выражением.

Фильтр применяется к именам файлов и путей перед их выводом.

example: --filter="(F|D|I)$"

Параметр вывода (--output)

Формат вывода.

Поддерживаются следующие типы вывода:

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

В формате JSON доступны следующие поля:

  • name - Имя файла, ссылки или пути (при рекурсивном обходе — также часть пути).
  • type - file, path или link.
  • size - Размер в байтах (только для файлов).
  • time - Время последнего изменения (только для файлов).
  • destination - Цель ссылки (только для ссылок).
default: text
example: --output=json

Параметр рекурсивного обхода (--recurse)

Включение в вывод всех вложенных путей.

В вывод включаются все вложенные пути и их файлы.

default: n
example: --recurse

Параметр сортировки вывода (--sort)

Сортировка вывода по возрастанию, по убыванию либо без сортировки.

Поддерживаются следующие типы сортировки:

  • asc - Сортировка по возрастанию.
  • desc - Сортировка по убыванию.
  • none - Без сортировки.
default: asc
example: --sort=desc

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.11 - Команда восстановления (restore)

Справочник по параметрам и поведению команды pgBackRest restore.

По умолчанию команда восстановления автоматически выбирает последнюю резервную копию из первого репозитория, где есть копии (см. Быстрый старт — восстановление резервной копии ). Порядок проверки репозиториев задаётся в pgbackrest.conf (например, repo1 проверяется раньше repo2). Для выбора конкретного репозитория можно передать --repo (например, --repo=1). Если требуется не последняя копия, можно передать --set.

При PITR с --type=time или --type=lsn целевое время или LSN необходимо указать с помощью параметра --target. Если --set не задан, настроенные репозитории проверяются по порядку: выбирается резервная копия, время завершения которой предшествует целевому времени или LSN завершения которой меньше либо равен целевому LSN. Если подходящая копия не найдена, pgBackRest выдаёт ошибку как для --type=time, так и для --type=lsn; перехода к последней резервной копии не происходит. Для других типов PITR, например xid, необходимо указать параметр --set, если цель предшествует последней резервной копии. Подробнее и с примерами см. Восстановление на заданный момент времени .

Слоты репликации не включаются согласно рекомендации PostgreSQL. Дополнительные сведения приведены в разделе Резервное копирование каталога данных документации PostgreSQL.

Параметры команды

Параметр режима архивирования (--archive-mode)

Сохранение или отключение архивирования на восстановленном кластере.

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

Поддерживаются следующие режимы:

  • off - Отключает архивирование, задавая archive_mode=off.
  • preserve - Сохраняет текущее значение archive_mode.

ПРИМЕЧАНИЕ: этот параметр недоступен в PostgreSQL < 12.

default: preserve
example: --archive-mode=off

Параметр исключения баз данных (--db-exclude)

Восстановление с исключением указанных баз данных.

Исключённые базы данных восстанавливаются в виде разреженных файлов, заполненных нулями: это экономит место, сохраняя возможность восстановления PostgreSQL. После восстановления эти базы будут недоступны, но их можно удалить командой drop database. Параметр --db-exclude можно передать несколько раз, чтобы исключить несколько баз данных.

В сочетании с параметром --db-include параметр --db-exclude применяется только к стандартным системным базам данных (template0, template1 и postgres).

example: --db-exclude=db_main

Параметр включения баз данных (--db-include)

Восстановление только указанных баз данных.

Эта возможность позволяет восстановить только выбранные базы данных. Базы, не включённые явно, восстанавливаются в виде разреженных файлов, заполненных нулями: это экономит место, сохраняя возможность восстановления PostgreSQL. После восстановления базы, которые не были включены, будут недоступны, но их можно удалить командой drop database.

ПРИМЕЧАНИЕ: встроенные базы данных (template0, template1 и postgres) всегда восстанавливаются, если они не исключены явно.

Параметр --db-include можно передать несколько раз, чтобы включить несколько баз данных.

Дополнительные сведения и ограничения приведены в разделе Восстановление выбранных баз данных .

example: --db-include=db_main

Параметр принудительного выполнения (--force)

Принудительное восстановление.

Сам по себе этот параметр принудительно полностью перезаписывает каталоги данных и табличных пространств PostgreSQL. В сочетании с --delta выполняется дельта-восстановление по временным меткам и размерам вместо контрольных сумм.

default: n
example: --force

Восстановление всех символических ссылок.

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

default: n
example: --link-all

Изменение цели символической ссылки.

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

example: --link-map=pg_xlog=/data/xlog

Параметр настройки восстановления (--recovery-option)

Установка параметра в postgresql.auto.conf или recovery.conf.

Сведения о параметрах postgresql.auto.conf и recovery.conf приведены в разделе Конфигурация сервера (обязательно выберите свою версию PostgreSQL). Этот параметр можно указывать несколько раз.

Для PostgreSQL >= 12 параметры записываются в postgresql.auto.conf. Для всех остальных версий — в recovery.conf.

ПРИМЕЧАНИЕ: параметр restore_command создаётся автоматически, но его можно переопределить этим параметром. Собственный restore_command следует задавать осторожно, поскольку pgBackRest рассчитан на автоматическое управление им. Параметры цели восстановления (recovery_target_name, recovery_target_time и т. п.) pgBackRest формирует автоматически, и их не следует задавать таким способом.

Поскольку после записи файла postgresql.auto.conf или recovery.conf pgBackRest не запускает PostgreSQL, перед ручным перезапуском всегда можно проверить или отредактировать postgresql.auto.conf или recovery.conf.

example: --recovery-option=primary_conninfo=db.mydomain.com

Параметр набора резервной копии (--set)

Набор резервной копии для восстановления.

Набор резервной копии, который требуется восстановить. Значение latest восстанавливает последнюю копию; иначе следует указать имя нужной копии.

default: latest
example: --set=20150131-153358F_20150131-153401I

Параметр переназначения табличного пространства (--tablespace-map)

Восстановление табличного пространства в указанный каталог.

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

Расположения табличных пространств не хранятся в pg_tablespace, поэтому их можно свободно перемещать. Однако переносить табличное пространство в data_directory не рекомендуется: это может вызвать проблемы. Дополнительные сведения о перемещении табличных пространств приведены на http://www.databasesoup.com/2013/11/moving-tablespaces.html .

example: --tablespace-map=ts_01=/db/ts_01

Параметр переназначения всех табличных пространств (--tablespace-map-all)

Восстановление всех табличных пространств в указанный каталог.

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

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

ОСТОРОЖНО:

Табличные пространства, созданные после начала резервного копирования, не переназначаются. Если требуется переназначение, после создания табличного пространства следует сделать новую резервную копию.

example: --tablespace-map-all=/data/tablespace

Параметр цели (--target)

Цель восстановления.

Определяет цель восстановления при --type, равном lsn, name, xid или time. Если цель предшествует последней копии и --type не равен time или lsn, укажите набор резервной копии параметром --set.

example: --target=2015-01-30 14:15:11 EST

Параметр действия при достижении цели (--target-action)

Действие при достижении цели восстановления.

При hot_standby=on (значение по умолчанию начиная с PostgreSQL 10) этот параметр одинаково управляет поведением кластера при достижении цели или исчерпании WAL в архиве.

При hot_standby=off в PostgreSQL >= 12 значение pause действует как shutdown. При hot_standby=off в PostgreSQL < 12 значение pause действует как promote.

Поддерживаются следующие действия:

  • pause - Приостановка при достижении цели восстановления.
  • promote - Повышение до первичного сервера и смена временной шкалы при достижении цели восстановления.
  • shutdown - Остановка сервера при достижении цели восстановления. (PostgreSQL >= 9.5)
default: pause
example: --target-action=promote

Параметр исключения цели (--target-exclusive)

Остановка непосредственно перед достижением цели восстановления.

Определяет, исключается ли сама цель из восстановления (по умолчанию включается), и допустим только при --type, равном lsn, time или xid. Например, при --type=xid и --target=1007 параметр --target-exclusive исключит содержимое транзакции 1007. Дополнительные сведения приведены в описании recovery_target_inclusive в документации PostgreSQL.

default: n
example: --no-target-exclusive

Параметр целевой временной шкалы (--target-timeline)

Восстановление по временной шкале.

Дополнительные сведения приведены в описании recovery_target_timeline в документации PostgreSQL.

example: --target-timeline=3

Параметр типа (--type)

Тип восстановления.

Поддерживаются следующие типы восстановления:

  • default - Восстановление до конца потока архива.
  • immediate - Восстановление только до достижения согласованного состояния базы данных.
  • lsn - Восстановление до LSN (номера позиции в журнале), заданного в --target. Поддерживается только в PostgreSQL >= 10.
  • name - Восстановление до точки восстановления, заданной в --target.
  • xid - Восстановление до идентификатора транзакции, заданного в --target.
  • time - Восстановление до времени, заданного в --target.
  • preserve - Сохранение существующего файла postgresql.auto.conf или recovery.conf.
  • standby - Добавление standby_mode=on в файл postgresql.auto.conf или recovery.conf, чтобы кластер запустился в режиме резервного сервера.
  • none - Файл postgresql.auto.conf или recovery.conf не записывается, поэтому PostgreSQL попытается достичь согласованности с помощью сегментов WAL в pg_xlog/pg_wal. Предоставьте необходимые сегменты WAL или используйте настройку archive-copy, чтобы включить их в резервную копию.

ПРЕДУПРЕЖДЕНИЕ:

Следует избегать восстановления с type=none, поскольку по его завершении временная шкала не увеличивается. Это может привести, например, к попытке PostgreSQL архивировать дублирующийся WAL, которая будет отклонена; в результате диск может заполниться, а PostgreSQL — аварийно завершиться с panic. Кроме того, такие средства, как pg_rewind, могут работать некорректно или вызывать повреждение данных.

Для копий остановленного кластера значение type восстановления по умолчанию — none, поскольку при wal_level=minimal восстановление на заданный момент времени невозможно. Если type задан явно, он применяется, так как восстановление на заданный момент времени из копии остановленного кластера возможно при wal_level > minimal.

default: default
example: --type=xid

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: y
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: --cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр дельта-восстановления и копирования (--delta)

Восстановление или резервное копирование с использованием контрольных сумм.

При восстановлении по умолчанию предполагается, что каталоги данных и табличных пространств PostgreSQL существуют, но пусты. Этот параметр выполняет дельта-восстановление с использованием контрольных сумм.

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

default: n
example: --delta

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: --process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

4.12 - Команда сервера (server)

Справочник по параметрам и поведению команды pgBackRest server.

Сервер pgBackRest обеспечивает доступ к удалённым серверам без использования протокола SSH.

Параметры команды

Параметр адреса TLS-сервера (--tls-server-address)

Адрес TLS-сервера.

IP-адрес, на котором сервер будет слушать запросы клиентов.

default: localhost
example: --tls-server-address=*

Параметр авторизованных клиентов TLS-сервера (--tls-server-auth)

Авторизованные клиенты TLS-сервера.

Сервер авторизует клиентов, проверяя их сертификаты и сверяя CN (общее имя) сертификата со списком, заданным на сервере параметром tls-server-auth.

Клиентский CN можно авторизовать для любого количества stanza, передав в параметре tls-server-auth список через запятую, либо для всех stanza, указав tls-server-auth=client-cn=*. Для клиентского CN нельзя указывать подстановочные символы.

example: --tls-server-auth=client-cn=stanza1,stanza2

Параметр центров сертификации TLS-сервера (--tls-server-ca-file)

Центры сертификации TLS-сервера.

Проверяет, что сертификаты клиентов подписаны доверенным центром сертификации.

example: --tls-server-ca-file=/path/to/server.ca

Параметр сертификата TLS-сервера (--tls-server-cert-file)

Файл сертификата TLS-сервера.

Отправляется клиенту для подтверждения личности сервера.

example: --tls-server-cert-file=/path/to/server.crt

Параметр ключа TLS-сервера (--tls-server-key-file)

Файл ключа TLS-сервера.

Подтверждает, что сертификат сервера отправлен его владельцем.

example: --tls-server-key-file=/path/to/server.key

Параметр порта TLS-сервера (--tls-server-port)

Порт сервера TLS.

Порт, на котором сервер будет слушать запросы клиентов.

default: 8432
allowed: [1, 65535]
example: --tls-server-port=8000

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

4.13 - Команда проверки доступности сервера (server-ping)

Справочник по параметрам и поведению команды pgBackRest server-ping.

Проверяет, что TLS-сервер pgBackRest принимает соединения. Это только проверка доступности, поскольку попытка аутентификации не выполняется.

Если сервер не указан в командной строке, используется параметр tls-server-host.

Параметры команды

Параметр адреса TLS-сервера (--tls-server-address)

Адрес TLS-сервера.

IP-адрес, на котором сервер будет слушать запросы клиентов.

default: localhost
example: --tls-server-address=*

Параметр порта TLS-сервера (--tls-server-port)

Порт сервера TLS.

Порт, на котором сервер будет слушать запросы клиентов.

default: 8432
allowed: [1, 65535]
example: --tls-server-port=8000

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

4.14 - Команда создания stanza (stanza-create)

Справочник по параметрам и поведению команды pgBackRest stanza-create.

Команду stanza-create необходимо выполнить после настройки stanza в pgbackrest.conf. Если настроено несколько репозиториев, stanza создаётся в каждом. Уже созданные stanza пропускаются, поэтому stanza-create всегда безопасно запускать, в том числе после настройки нового репозитория.

Дополнительные сведения и пример приведены в разделе Создание stanza .

Параметры команды

Параметр копирования работающего кластера (--online)

Создание на работающем кластере.

Параметр –no-online запрещает pgBackRest соединяться с PostgreSQL при создании stanza.

default: y
example: --no-online

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ: параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: --db-timeout=600

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: --pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: --pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: --pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: --pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: --pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ: при pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: --pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: --pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: --pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: --pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: --pg1-user=backupuser

4.15 - Команда удаления stanza (stanza-delete)

Справочник по параметрам и поведению команды pgBackRest stanza-delete.

Команда stanza-delete удаляет из репозитория данные, связанные со stanza.

ПРЕДУПРЕЖДЕНИЕ:

Используйте эту команду осторожно: она безвозвратно удаляет все резервные копии и архивы указанной stanza из репозитория pgBackRest.

Чтобы удалить stanza:

  • Остановите кластер PostgreSQL, связанный со stanza (или используйте –force, чтобы обойти это требование).
  • Выполните команду stop на сервере, где будет запущена команда stanza-delete.
  • Выполните команду stanza-delete.

После успешного завершения команды пользователь должен самостоятельно удалить stanza из всех файлов конфигурации pgBackRest и/или переменных окружения.

За один раз stanza можно удалить только из одного репозитория. Для удаления из нескольких репозиториев повторите команду stanza-delete для каждого из них, указывая параметр --repo.

Параметры команды

Параметр принудительного выполнения (--force)

Принудительное удаление stanza.

Если PostgreSQL для этой stanza продолжает работать, этот параметр позволяет принудительно удалить stanza из репозитория.

default: n
example: --no-force

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ: параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: --db-timeout=600

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: --pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: --pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: --pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: --pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: --pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ: при pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: --pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: --pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: --pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: --pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: --pg1-user=backupuser

4.16 - Команда обновления stanza (stanza-upgrade)

Справочник по параметрам и поведению команды pgBackRest stanza-upgrade.

Сразу после обновления PostgreSQL до более новой основной версии необходимо во всех конфигурациях pgBackRest задать pg-path, указывающий новое расположение базы данных, и выполнить команду stanza-upgrade. Если на сервере настроено несколько репозиториев, stanza обновляется в каждом. Если база данных остановлена, используйте параметр --no-online.

Параметры команды

Параметр копирования работающего кластера (--online)

Обновление работающего кластера.

Параметр –no-online запрещает pgBackRest соединяться с PostgreSQL при обновлении stanza.

default: y
example: --no-online

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ: параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: --db-timeout=600

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

Параметры stanza

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: --pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: --pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: --pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: --pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: --pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ: при pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: --pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: --pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: --pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: --pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: --pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: --pg1-user=backupuser

4.17 - Команда разрешения запуска (start)

Справочник по параметрам и поведению команды pgBackRest start.

Если процессы pgBackRest ранее были остановлены командой stop, командой start можно снова разрешить их запуск. Сама команда не запускает процессы pgBackRest немедленно, а лишь разрешает их выполнение. Дополнительные сведения и примеры приведены в разделе Запуск и остановка .

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

4.18 - Команда остановки (stop)

Справочник по параметрам и поведению команды pgBackRest stop.

Запрещает запуск новых процессов pgBackRest. По умолчанию работающим процессам разрешается успешно завершиться. Для завершения работающих процессов используйте параметр --force.

Процессы pgBackRest, запущенные после завершения команды stop, возвращают ошибку. Дополнительные сведения и примеры приведены в разделе Запуск и остановка .

Параметры команды

Параметр принудительного выполнения (--force)

Принудительная остановка всех процессов pgBackRest.

Этот параметр отправляет сигналы TERM всем работающим процессам pgBackRest для корректного, но немедленного завершения. Это также останавливает процессы, запущенные на другой системе, если их удалённые процессы работают на текущей. Например, если резервное копирование запущено на сервере резервного копирования, команда stop --force на сервере базы данных остановит процесс резервного копирования на сервере резервного копирования.

default: n
example: --force

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: --lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

4.19 - Команда проверки данных (verify)

Справочник по параметрам и поведению команды pgBackRest verify.

Команда verify определяет, корректны ли резервные копии и архивы в репозитории.

Параметры команды

Параметр вывода (--output)

Тип вывода.

Поддерживаются следующие типы вывода:

  • none - Не выводить результаты проверки.
  • text - Выводить сведения о проверке в stdout.
default: none
example: --output=text

Параметр набора резервной копии (--set)

Набор резервной копии для проверки.

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

example: --set=20150131-153358F_20150131-153401I

Параметр подробного вывода (--verbose)

Подробный вывод.

По умолчанию verbose равен false: выводится краткий ответ с важными сведениями об ошибках в репозитории. Значение true добавляет сведения о том, что было успешно проверено.

default: n
example: --verbose

Общие параметры

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: --allow-root

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: --buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: --cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: --cmd-ssh=/usr/bin/ssh

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: --compress-level-network=1

Параметр файла конфигурации (--config)

Конфигурационный файл pgBackRest.

Используйте этот параметр для указания другого файла конфигурации, отличного от файла по умолчанию.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --config=/conf/pgbackrest/pgbackrest.conf

Параметр каталога включаемых конфигураций (--config-include-path)

Путь к дополнительным файлам конфигурации pgBackRest.

Файлы конфигурации с расширением .conf, находящиеся в указанном каталоге, объединяются с файлом конфигурации pgBackRest в единый файл конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации (--config-path)

Базовый путь файлов конфигурации pgBackRest.

Эта настройка переопределяет базовый каталог по умолчанию для параметров --config и --config-include-path, если они не заданы явно в командной строке.

Например, передача только --config-path=/conf/pgbackrest приводит к установке значения по умолчанию для --config в /conf/pgbackrest/pgbackrest.conf и значения по умолчанию для --config-include-path в /conf/pgbackrest/conf.d.

default: CFGOPTDEF_CONFIG_PATH
example: --config-path=/conf/pgbackrest

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: --io-timeout=120

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: --no-neutral-umask

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: --priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: --process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ: параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: --protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: --no-sck-keep-alive

Параметр stanza (--stanza)

Определение stanza.

Stanza — конфигурация кластера баз данных PostgreSQL, которая определяет его расположение, способ резервного копирования, параметры архивирования и т. п. Большинство серверов баз данных содержат только один кластер PostgreSQL и, соответственно, одну stanza, тогда как на серверах резервного копирования есть stanza для каждого кластера, требующего резервного копирования.

Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных в нём. Поскольку имя stanza используется для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, такое как main или prod.

example: --stanza=main

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: --tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: --tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: --tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: --tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ: абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: --tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: --log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: --log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: --log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: --log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: --log-subprocess

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: --no-log-timestamp

Параметры для сопровождающих

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: --pg-version-force=15

Параметры репозитория

Параметр выбора репозитория (--repo)

Выбор репозитория.

Задаёт репозиторий, с которым работает команда.

Например, позволяет выполнить восстановление из конкретного репозитория, не предоставляя выбор pgBackRest.

allowed: [1, 256]
example: --repo=1

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: --repo1-azure-container=pg-backup

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: --repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: --repo1-azure-uri-style=path

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: --repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: --repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: --repo1-gcs-endpoint=localhost

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: --repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: --repo1-gcs-user-project=my-project

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: --repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: --repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: --repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: --repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: --repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: --repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: --repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: --repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: --repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ: при repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: --repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: --repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: --repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: --repo1-path=/backup/db/backrest

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: --repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: --repo1-s3-endpoint=s3.amazonaws.com

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: --repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: --repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: --repo1-s3-process-cmd=/usr/local/bin/get-credentials --repo1-s3-process-cmd=--role --repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: --repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: --no-repo1-s3-requester-pays

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: --repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: --repo1-s3-service=s3-outposts

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: --repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: --repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: --repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: --repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: --repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: --repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: --repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: --repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: --repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: --repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: --repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: --repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: --repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: --repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: --repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: --repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: --repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: --no-repo1-storage-verify-tls

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: --repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: --repo1-type=cifs

4.20 - Команда версии (version)

Справочник по параметрам и поведению команды pgBackRest version.

Отображает установленную версию pgBackRest.

Параметры команды

Параметр вывода (--output)

Тип вывода.

Поддерживаются следующие типы вывода:

  • text - Отображает установленную версию pgBackRest в виде текста.
  • num - Отображает установленную версию pgBackRest в виде целого числа.
default: text
example: --output=num

5 - Справочник по конфигурации

Полный справочник по конфигурации pgBackRest: параметры архивирования, резервного копирования, репозиториев и облачных хранилищ.

Введение

pgBackRest может работать исключительно с параметрами командной строки, однако для сложных установок или большого числа параметров практичнее использовать файл конфигурации. По умолчанию он расположен в /etc/pgbackrest/pgbackrest.conf. Если файла там нет, проверяется прежнее расположение по умолчанию: /etc/pgbackrest.conf.

Используются следующие типы параметров:

Строка: текстовая строка, обычно идентификатор, пароль и т. п.

Пример командной строки: --stanza=demo
Пример файла конфигурации: repo1-cipher-pass=zWaf6XtpjIVZC5444yXB...

Путь: однозначно определяет расположение в структуре каталогов. Путь должен начинаться с /; двойной // не допускается, завершающий / не ожидается.

Пример командной строки: --repo1-path=/var/lib/pgbackrest
Пример файла конфигурации: repo1-path=/var/lib/pgbackrest

Логическое значение: включает или отключает параметр. Допустимы только значения аргумента y/n.

Примеры командной строки: --start-fast, --no-start-fast, --start-fast=y, --start-fast=n
Примеры файла конфигурации: start-fast=y, start-fast=n

Целое число: используется для портов, количества хранимых копий или повторных попыток, допустимого числа параллельных процессов и т. п.

Пример командной строки: --compress-level=3
Пример файла конфигурации: pg1-port=5432

Размер: используется для размеров буферов, объёма дискового пространства и т. п. Размер можно указать в байтах (по умолчанию) либо в KiB, MiB, GiB, TiB или PiB, где множитель равен степени 1024. Например, вместо 5368709120 можно использовать значение 5GiB (или 5GB, 5g) без учёта регистра. Дробные значения, такие как 2.5GiB, не допускаются; вместо них следует использовать 2560MiB.

Пример командной строки: --archive-get-queue-max=1GiB
Пример файла конфигурации: buffer-size=2MiB

Время: время в секундах.

Пример командной строки: --io-timeout=90
Пример файла конфигурации: db-timeout=600

Список: параметр можно указать несколько раз.

Пример командной строки: --db-exclude=db1 --db-exclude=db2 --db-exclude=db5

Пример файла конфигурации, каждое значение на отдельной строке:

db-exclude=db1
db-exclude=db2
db-exclude=db5

Ключ/значение: параметр можно указать несколько раз в форме key=value.

Пример командной строки: --tablespace-map=ts_01=/db/ts_01 --tablespace-map=ts_02=/db/ts_02

Пример файла конфигурации, каждое значение на отдельной строке:

tablespace-map=ts_01=/db/ts_01
tablespace-map=ts_02=/db/ts_02

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

Секция archive определяет параметры команд archive-push и archive-get.

Параметр асинхронного архивирования (--archive-async)

Асинхронная отправка и получение сегментов WAL.

Включает асинхронный режим работы команд archive-push и archive-get.

Асинхронный режим эффективнее, поскольку позволяет повторно использовать соединения и выполнять операции параллельно. Дополнительные сведения приведены в описании параметров spool-path, archive-get-queue-max и archive-push-queue-max.

default: n
example: archive-async=y

Параметр максимального размера очереди получения из архива (--archive-get-queue-max)

Максимальный размер очереди archive-get в pgBackRest.

Задаёт максимальный размер очереди archive-get при включённом archive-async. Очередь хранится в spool-path и ускоряет передачу WAL в PostgreSQL.

default: 128MiB
allowed: [0B, 4PiB]
example: archive-get-queue-max=1GiB

Параметр повторного запроса отсутствующего сегмента WAL (--archive-missing-retry)

Повторный запрос отсутствующего сегмента WAL

Повторно запрашивает сегмент WAL, об отсутствии которого ранее сообщила команда archive-get в асинхронном режиме. Это предотвращает использование уведомлений в каталоге очереди, оставшихся от предыдущего восстановления, которые могли бы привести к сбою восстановления, если согласованность ещё не достигнута.

Отключение этого параметра позволяет PostgreSQL надёжнее определять достижение конца WAL в архиве и переключаться на потоковую передачу с первичного сервера. Если повторные запросы включены, непрерывное поступление WAL в архив заставляет PostgreSQL продолжать получать WAL из архива вместо переключения на потоковую передачу.

При отключении этого параметра важно убедиться, что каталог очереди для stanza пуст. Команда restore очищает его автоматически, если каталог очереди настроен на момент восстановления. В противном случае пользователь должен самостоятельно обеспечить его очистку.

default: y
example: archive-missing-retry=n

Параметр размера пакета отправки в архив (--archive-push-batch-size)

Максимальный объём WAL, отправляемый за один асинхронный запуск.

В асинхронном режиме процесс archive-push отправляет все готовые сегменты WAL за один запуск. Поскольку archive-push-queue-max проверяется только в начале каждого запуска, при обработке очень большого числа сегментов очередь может значительно превысить предел до следующей проверки.

Этот параметр ограничивает объём WAL, обрабатываемый за один запуск, после чего процесс завершается и вновь запускается следующим вызовом archive-push, который повторно проверяет очередь. Меньшие значения позволяют проверять очередь чаще, но требуют более частого запуска асинхронного процесса. Значение округляется вниз до целого числа сегментов WAL, однако всегда обрабатывается хотя бы один сегмент.

default: 16GiB
allowed: [1MiB, 4PiB]
example: archive-push-batch-size=1GiB

Параметр максимального размера очереди отправки в архив (--archive-push-queue-max)

Максимальный размер очереди архивирования PostgreSQL.

При достижении предела произойдёт следующее:

  • pgBackRest сообщит PostgreSQL об успешном архивировании WAL, а затем УДАЛИТ ЕГО.
  • В журнал PostgreSQL будет выведено предупреждение.

В этом случае поток архивного журнала прервётся, и PITR за этой точкой станет невозможен. Чтобы вновь обеспечить полные возможности восстановления, потребуется новая резервная копия.

В асинхронном режиме удаляется вся очередь, чтобы отдельные сегменты WAL не успевали попадать в архив до повторного превышения предела очереди.

В асинхронном режиме этот предел проверяется только в начале каждого запуска archive-push, поэтому за один запуск очередь может превысить его. Уменьшите archive-push-batch-size, чтобы проверять очередь чаще.

Эта возможность предотвращает заполнение тома с журналом, при котором PostgreSQL полностью остановится. Лучше потерять резервную копию, чем допустить остановку PostgreSQL.

allowed: [0B, 4PiB]
example: archive-push-queue-max=1TiB

Устаревшее имя: archive-queue-max

Параметр тайм-аута архивирования (--archive-timeout)

Тайм-аут архивирования.

Задаёт максимальное время в секундах, в течение которого ожидается поступление каждого сегмента WAL в архивный репозиторий pgBackRest. Тайм-аут применяется к командам check и backup, когда они ожидают архивирования сегментов WAL, необходимых для согласованности резервной копии.

default: 1m
allowed: [100ms, 1d]
example: archive-timeout=30

Параметры резервного копирования

Секция backup определяет параметры резервного копирования.

Параметр аннотации резервной копии (--annotation)

Добавление к резервной копии пользовательских пар «ключ — значение».

Пользователи могут добавлять к резервной копии информационные пары «ключ — значение». Этот параметр можно указывать несколько раз для добавления нескольких аннотаций.

Аннотации включаются в текстовый вывод команды info, если резервная копия указана через --set, и всегда присутствуют в выводе JSON.

example: annotation=source="Sunday backup for website database"

Параметр проверки архива (--archive-check)

Проверка наличия сегментов WAL в архиве перед завершением резервного копирования.

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

Этот параметр должен быть включён, если включён archive-copy.

default: y
example: archive-check=n

Параметр копирования архива (--archive-copy)

Копирование в резервную копию сегментов WAL, необходимых для согласованности.

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

При использовании этого параметра желательно, чтобы команды archive-push и backup имели одинаковый compress-type (например, lz4). Иначе сегменты WAL потребуется повторно сжать с compress-type, используемым резервной копией, что может потребовать значительных ресурсов в зависимости от объёма WAL, созданного во время резервного копирования.

При восстановлении сегменты WAL будут находиться в pg_xlog/pg_wal, и PostgreSQL предпочтёт использовать их, а не вызывать restore_command.

Параметр archive-check должен быть включён, если включён archive-copy.

default: n
example: archive-copy=y

Параметр проверки режима архивирования (--archive-mode-check)

Проверка настройки PostgreSQL archive_mode.

Этот параметр включён по умолчанию и запрещает использовать в PostgreSQL archive_mode=always.

Сегменты WAL, отправляемые с резервного сервера, могут логически совпадать с сегментами WAL с первичного сервера, но иметь другие контрольные суммы. Во избежание конфликтов рекомендуется отключить архивирование из нескольких источников.

ОСТОРОЖНО:

Если этот параметр отключён, крайне важно обеспечить, чтобы в репозиторий через команду archive-push писал только один процесс архивирования.

default: y
example: archive-mode-check=n

Параметр резервного копирования с резервного сервера (--backup-standby)

Резервное копирование с резервного кластера.

Включает резервное копирование с резервного сервера для снижения нагрузки на первичный кластер. Этот параметр требует настройки как первичного, так и резервного сервера.

Поддерживаются следующие режимы:

  • y - Для резервного копирования необходим резервный сервер.
  • prefer - Копирование с резервного сервера, если он доступен; иначе с первичного.
  • n - Копирование только с первичного сервера.
default: n
example: backup-standby=y

Параметр контрольных сумм страниц (--checksum-page)

Проверка контрольных сумм страниц данных.

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

Ошибки проверки контрольных сумм не прерывают резервное копирование. Вместо этого в журнал выводятся предупреждения (а при настройках по умолчанию — и в консоль), а список некорректных страниц сохраняется в манифесте резервной копии.

example: checksum-page=n

Параметр исключения путей и файлов (--exclude)

Исключение путей и файлов из резервной копии.

Все исключения задаются относительно $PGDATA. Если исключение заканчивается на /, исключаются только файлы в указанном каталоге: например, --exclude=junk/ исключит все файлы в каталоге $PGDATA/junk, но сохранит сам каталог. Если исключение не заканчивается на /, файл может либо точно совпадать с исключением, либо соответствовать исключению с добавленным /: например, --exclude=junk исключит каталог $PGDATA/junk и все содержащиеся в нём файлы.

Используйте эту возможность осторожно: очень легко исключить важные данные и нарушить согласованность резервной копии. Обязательно проверяйте восстановление!

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

ПРИМЕЧАНИЕ:

При дельта-восстановлении исключения не учитываются. Все файлы и каталоги, исключённые при резервном копировании, будут удалены при дельта-восстановлении.

Этот параметр не следует использовать для исключения журналов PostgreSQL из резервной копии. Журналы можно вынести за пределы каталога PGDATA с помощью настройки PostgreSQL log_directory; при этом они также сохранятся после восстановления.

В командной строке или файле конфигурации можно задать несколько исключений.

example: exclude=junk/

Параметр автоматического удаления устаревших копий (--expire-auto)

Автоматический запуск команды expire после успешного резервного копирования.

Этот параметр включён по умолчанию. Отключать его следует с осторожностью: в этом случае все резервные копии и архивы будут храниться бессрочно, что может привести к исчерпанию места в репозитории. Чтобы избежать этого, необходимо регулярно запускать команду expire.

При автоматическом запуске после успешного резервного копирования expire использует конфигурацию команды backup, поэтому параметры, заданные только в секции команды expire (например, [global:expire]), не применяются. Чтобы применялась конфигурация, специфичная для expire, отключите этот параметр и запускайте команду expire отдельно.

default: y
example: expire-auto=y

Параметр порога сохранения манифеста (--manifest-save-threshold)

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

Определяет, как часто манифест сохраняется во время резервного копирования. Сохранять его важно, поскольку он содержит контрольные суммы и обеспечивает эффективное возобновление. Фактический порог равен большему из двух значений: 1% размера резервной копии или manifest-save-threshold.

default: 1GiB
allowed: [1B, 1TiB]
example: manifest-save-threshold=8GiB

Параметр возобновления (--resume)

Разрешение возобновления неудавшегося резервного копирования.

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

default: y
example: resume=n

Параметр быстрого запуска (--start-fast)

Принудительная контрольная точка для быстрого начала резервного копирования.

Принудительно выполняет контрольную точку, передавая y в параметр fast функции начала резервного копирования, чтобы копирование началось немедленно. Иначе резервное копирование начнётся после следующей плановой контрольной точки.

default: n
example: start-fast=y

Общие параметры

Секция general определяет параметры, общие для многих команд.

Параметр разрешения запуска от root (--allow-root)

Разрешение запуска команды от пользователя root.

По умолчанию только команда restore может выполняться от пользователя root, поскольку она предназначена для тщательного управления принадлежностью файлов. Выполнение других команд от пользователя root может привести к созданию файлов (например, в репозитории), принадлежащих root, и, как следствие, недоступных для пользователя PostgreSQL, что вызовет сбой последующих команд.

Включите этот параметр, чтобы запустить команду от имени root. Однако гораздо лучше запускать pgBackRest от пользователя, владеющего репозиторием и кластером PostgreSQL.

default: n
example: allow-root=y

Параметр размера буфера (--buffer-size)

Размер буфера для операций ввода-вывода.

Размер буфера, используемый для копирования, сжатия, шифрования и других операций. Количество используемых буферов зависит от параметров, и каждая операция может использовать дополнительную память, например, сжатие gz может потребовать дополнительно 256KiB памяти.

Допустимые значения: 16KiB, 32KiB, 64KiB, 128KiB, 256KiB, 512KiB, 1MiB, 2MiB, 4MiB, 8MiB и 16MiB.

default: 1MiB
example: buffer-size=2MiB

Параметр команды pgBackRest (--cmd)

Команда pgBackRest.

pgBackRest может формировать командную строку, например когда команда restore создаёт настройку restore_command. В этом случае используется команда, которой был запущен процесс pgBackRest, если не задан параметр cmd.

ОСТОРОЖНО:

Использование обёртки для команды pgBackRest может привести к непредсказуемому поведению и не рекомендуется.

default: [path of executed pgbackrest binary]
example: cmd=/var/lib/pgsql/bin/pgbackrest_wrapper.sh

Параметр команды SSH-клиента (--cmd-ssh)

Команда SSH-клиента.

Позволяет задать конкретную команду SSH-клиента, если нужен другой клиент или команда ssh отсутствует в $PATH.

default: ssh
example: cmd-ssh=/usr/bin/ssh

Параметр сжатия (--compress)

Сжатие файлов.

Файлы резервных копий совместимы с утилитами сжатия командной строки.

Этот параметр устарел. Вместо него следует использовать compress-type.

default: y
example: compress=n

Параметр уровня сжатия (--compress-level)

Уровень сжатия файлов.

Задаёт уровень сжатия файлов, когда compress-type не равен none или задано compress=y (устаревший вариант).

default (depending on compress-type):
    bz2 - 9
    gz - 6
    lz4 - 1
    zst - 3

allow range (depending on compress-type):
    bz2 - [1, 9]
    gz - [-1, 9]
    lz4 - [-5, 12]
    zst - [-7, 22]

example: compress-level=9

Параметр уровня сжатия для сети (--compress-level-network)

Уровень сжатия для передачи по сети.

Задаёт уровень сетевого сжатия, когда compress-type=none и команда выполняется на другом сервере, чем репозиторий. Сжатие уменьшает сетевой трафик. Когда compress-type не равен none, настройка compress-level-network игнорируется и вместо неё используется compress-level, чтобы файл сжимался только один раз.

default: 1
allowed: [-5, 12]
example: compress-level-network=1

Параметр типа сжатия (--compress-type)

Тип сжатия файлов.

Поддерживаются следующие типы сжатия:

  • none - без сжатия
  • bz2 - формат сжатия bzip2
  • gz - формат сжатия gzip
  • lz4 - формат сжатия lz4 (доступен не на всех платформах)
  • zst - формат сжатия Zstandard (доступен не на всех платформах)
default: gz
example: compress-type=none

Параметр тайм-аута базы данных (--db-timeout)

Тайм-аут запроса к базе данных.

Задаёт тайм-аут запросов к базе данных в секундах. Он распространяется и на функции начала и завершения резервного копирования, каждая из которых может выполняться довольно долго. Поэтому следует задавать большой тайм-аут, если нет уверенности, что эти функции завершатся быстро (то есть если задано start-fast=y и известно, что кластер базы данных не создаст много сегментов WAL во время резервного копирования).

ПРИМЕЧАНИЕ:

Параметр db-timeout должен быть меньше protocol-timeout.

default: 30m
allowed: [100ms, 7d]
example: db-timeout=600

Параметр дельта-восстановления и копирования (--delta)

Восстановление или резервное копирование с использованием контрольных сумм.

При восстановлении по умолчанию предполагается, что каталоги данных и табличных пространств PostgreSQL существуют, но пусты. Этот параметр выполняет дельта-восстановление с использованием контрольных сумм.

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

default: n
example: delta=y

Параметр тайм-аута ввода-вывода (--io-timeout)

Тайм-аут ввода-вывода.

Тайм-аут, в секундах, используемый для соединений и операций чтения/записи.

Операция чтения или записи не обязана полностью завершиться за это время, но какое-то продвижение должно произойти, хотя бы на один байт.

default: 1m
allowed: [100ms, 1h]
example: io-timeout=120

Параметр каталога блокировок (--lock-path)

Путь для хранения файлов блокировок.

В каталоге блокировок pgBackRest создаёт файлы блокировок, предотвращающие одновременное выполнение конфликтующих операций.

default: /tmp/pgbackrest
example: lock-path=/backup/db/lock

Параметр нейтральной маски umask (--neutral-umask)

Использование нейтральной маски umask.

Устанавливает umask в 0000, чтобы объекты в репозитории создавались с подходящими правами. По умолчанию права каталогов — 0750, файлов — 0640.

Чтобы вместо этого использовать umask пользователя, выполняющего команду, укажите neutral-umask=n в файле конфигурации или --no-neutral-umask в командной строке.

default: y
example: neutral-umask=n

Параметр приоритета процесса (--priority)

Установка приоритета процесса.

Определяет приоритет процесса (то есть значение nice) для планировщика ядра. Положительные значения понижают приоритет, отрицательные — повышают. В большинстве случаев процессы не имеют права повышать свой приоритет.

allowed: [-20, 19]
example: priority=19

Параметр максимального числа процессов (--process-max)

Максимальное число процессов для сжатия и передачи данных.

Каждый процесс выполняет сжатие и передачу, ускоряя выполнение команды, однако не следует задавать process-max настолько большим, чтобы это ухудшало производительность базы данных.

default: 1
allowed: [1, 999]
example: process-max=4

Параметр тайм-аута протокола (--protocol-timeout)

Тайм-аут протокола.

Задаёт тайм-аут, в секундах, на который локальный или удалённый процесс будет ждать получения нового сообщения на уровне протокола. Это предотвращает бесконечное ожидание сообщения процессами.

ПРИМЕЧАНИЕ:

Параметр protocol-timeout должен быть больше db-timeout.

default: 31m
allowed: [100ms, 7d]
example: protocol-timeout=630

Параметр поддержания соединения (--sck-keep-alive)

Включение поддержания соединения.

Включает сообщения keep-alive для сокетных соединений.

default: y
example: sck-keep-alive=n

Параметр каталога очереди (--spool-path)

Путь для хранения промежуточных данных.

Этот каталог используется для хранения данных асинхронных команд archive-push и archive-get.

Асинхронная команда archive-push записывает подтверждения в каталог очереди после успешного сохранения WAL в архиве (а при сбое — сообщения об ошибках), чтобы процесс переднего плана мог быстро уведомить PostgreSQL. Файлы подтверждений очень малы: нулевого размера при успехе и несколько сотен байтов при ошибке.

Асинхронная команда archive-get помещает WAL в очередь в каталоге очереди, чтобы быстро передавать его по запросу PostgreSQL. Перемещение файлов в PostgreSQL наиболее эффективно, когда каталог очереди находится в той же файловой системе, что и pg_xlog/pg_wal. Однако не рекомендуется размещать каталог очереди внутри pg_xlog/pg_wal, поскольку это может вызвать проблемы у утилит PostgreSQL, таких как pg_rewind.

Данные в каталоге очереди нельзя считать строго временными: они могут сохраняться после перезагрузки, и их следует сохранять. Однако их потеря не представляет проблемы. pgBackRest просто повторно проверит каждый сегмент WAL, чтобы убедиться в его надёжном архивировании для archive-push, и заново построит очередь для archive-get.

Каталог очереди предназначен для размещения в локальной файловой системе, совместимой с Posix, а не в удалённой файловой системе, такой как NFS или CIFS.

default: /var/spool/pgbackrest
example: spool-path=/backup/db/spool

Параметр числа сообщений keep-alive (--tcp-keep-alive-count)

Число сообщений keep-alive.

Задаёт число сообщений TCP keep-alive, которые могут быть потеряны, прежде чем соединение будет считаться неработающим.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPCNT.

allowed: [1, 32]
example: tcp-keep-alive-count=3

Параметр времени простоя keep-alive (--tcp-keep-alive-idle)

Время простоя перед отправкой keep-alive.

Задаёт время отсутствия сетевой активности в секундах, по истечении которого операционной системе следует отправить сообщение TCP keep-alive.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPIDLE.

allowed: [1, 3600]
example: tcp-keep-alive-idle=60

Параметр интервала keep-alive (--tcp-keep-alive-interval)

Интервал сообщений keep-alive.

Задаёт время в секундах, после которого следует повторно отправить сообщение TCP keep-alive, не получившее подтверждения.

Этот параметр доступен на системах, которые поддерживают опцию сокета TCP_KEEPINTVL.

allowed: [1, 900]
example: tcp-keep-alive-interval=30

Параметр наборов шифров TLSv1.2 (--tls-cipher-12)

Допустимые наборы шифров TLSv1.2.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ:

Абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

При необходимости допустимые наборы шифров можно изменить. Приведённый пример подходит, если нет особых требований к безопасности. Если параметр не задан (по умолчанию), применяется значение по умолчанию используемой библиотеки OpenSSL.

example: tls-cipher-12=HIGH:MEDIUM:+3DES:!aNULL

Параметр наборов шифров TLSv1.3 (--tls-cipher-13)

Допустимые наборы шифров TLSv1.3.

Все соединения TLS между клиентом pgBackRest и сервером зашифрованы. По умолчанию также зашифрованы соединения с объектными хранилищами (например, S3).

ПРИМЕЧАНИЕ:

Абсолютный минимальный уровень безопасности для любого транспортного соединения — TLSv1.2.

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

example: tls-cipher-13=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

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

Секция log определяет параметры ведения журнала.

ОСТОРОЖНО:

Журналирование на уровне trace может раскрыть секретные данные, такие как ключи и пароли. Используйте его осторожно!

Параметр уровня журналирования в консоль (--log-level-console)

Уровень журналирования в консоль.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: warn
example: log-level-console=error

Параметр уровня журналирования в файл (--log-level-file)

Уровень журналирования в файл.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: info
example: log-level-file=debug

Параметр уровня журналирования в стандартный поток ошибок (--log-level-stderr)

Уровень ведения журнала для stderr.

Задаёт уровни журнала, сообщения которых выводятся в stderr, а не в stdout (задаваемый параметром log-level-console). Временная метка и процесс в stderr не выводятся.

Поддерживаются следующие уровни журналирования:

  • off - Журналирование отключено (не рекомендуется)
  • error - Только ошибки
  • warn - Предупреждения и ошибки
  • info - Информационные сообщения, предупреждения и ошибки
  • detail - Подробные и информационные сообщения, предупреждения и ошибки
  • debug - Отладочные, подробные и информационные сообщения, предупреждения и ошибки
  • trace - Трассировка (очень подробная отладка), отладочные и информационные сообщения, предупреждения и ошибки
default: off
example: log-level-stderr=error

Параметр каталога журналов (--log-path)

Путь, по которому хранятся файлы журналов.

Путь к журналу задаёт местоположение для хранения файлов журналов pgBackRest. Примечание: если log-level-file=off, то путь к журналу не требуется.

default: /var/log/pgbackrest
example: log-path=/backup/db/log

Параметр журналирования подпроцессов (--log-subprocess)

Включение журналирования в подпроцессах.

Включает запись журнала в файл для всех подпроцессов, создаваемых этим процессом, с уровнем, заданным параметром log-level-file.

default: n
example: log-subprocess=y

Параметр временных меток журнала (--log-timestamp)

Включение временных меток в журнале.

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

default: y
example: log-timestamp=n

Параметры для сопровождающих

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

ПРЕДУПРЕЖДЕНИЕ:

Неправильное использование этих параметров может привести к неожиданному поведению или повреждению данных.

Сопровождающий форка отвечает за тестирование pgBackRest с требуемыми параметрами. pgBackRest не гарантирует совместимость ни с одним форком.

Параметр проверки заголовков WAL (--archive-header-check)

Проверка версии и идентификатора PostgreSQL в заголовках WAL.

Этот параметр включён по умолчанию и проверяет соответствие заголовка WAL версии PostgreSQL и системному идентификатору, чтобы убедиться, что WAL копируется в правильную stanza. Эта проверка дополняет проверку соответствия pg_control stanza и проверку того, что WAL копируется из того же каталога данных PostgreSQL, где находится pg_control.

Поэтому отключение этой проверки достаточно безопасно, но делать это следует только при необходимости, например если WAL зашифрован.

default: y
example: archive-header-check=n

Параметр проверки заголовков страниц (--page-header-check)

Проверка заголовков страниц PostgreSQL.

Этот параметр включён по умолчанию и добавляет проверки заголовков страниц.

Следует избегать отключения этого параметра, кроме случаев, когда оно необходимо, например если страницы зашифрованы.

default: y
example: page-header-check=n

Параметр принудительного задания версии PostgreSQL (--pg-version-force)

Принудительное задание версии PostgreSQL.

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

ПРЕДУПРЕЖДЕНИЕ:

Используйте этот параметр осторожно: pg_control и заголовки WAL всё равно будут читаться в формате, ожидаемом для указанной версии, то есть в формате официальной версии PostgreSQL с открытым исходным кодом. Если форк или версия в разработке меняет формат полей, от которых зависит pgBackRest, это приведёт к неожиданному поведению. В общем случае параметр будет работать как ожидается только тогда, когда форк добавляет все собственные поля структур после стандартных полей PostgreSQL.

example: pg-version-force=15

Параметры репозитория

Секция repository определяет параметры настройки репозитория.

Индексация: все параметры repo- имеют индексы, что позволяет настраивать несколько репозиториев. Например, один репозиторий настраивается параметрами repo1-path, repo1-host и т. п. Если настроено несколько репозиториев и для команды не указан параметр --repo, действия с репозиториями выполняются в порядке убывания приоритета (например, сначала repo1, затем repo2).

Параметры repo-retention-* определяют срок хранения резервных копий. Удаление происходит только тогда, когда число завершённых резервных копий превышает заданное число хранимых копий. Иными словами, если repo1-retention-full-type равен count (по умолчанию), а repo1-retention-full равен 2, то для удаления самой старой копии должны существовать 3 завершённые копии. Если repo1-retention-full-type равен time, значение repo1-retention-full задаётся в днях, поэтому до удаления должны накопиться полные резервные копии хотя бы за указанное число дней. Убедитесь, что места всегда хватает для числа копий, заданного сроком хранения, + 1 резервной копии.

Параметр учётной записи репозитория Azure (--repo-azure-account)

Учётная запись репозитория Azure.

Учётная запись Azure для хранения репозитория.

example: repo1-azure-account=pg-backup

Параметр контейнера репозитория Azure (--repo-azure-container)

Контейнер репозитория Azure.

Контейнер Azure для хранения репозитория.

Репозитории pgBackRest можно хранить в корне контейнера, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в контейнере также можно было хранить журналы и другие данные, создаваемые Azure.

example: repo1-azure-container=pg-backup

Параметр конечной точки репозитория Azure (--repo-azure-endpoint)

Конечная точка репозитория Azure.

Конечная точка для соединения со службой BLOB-объектов. Значение по умолчанию обычно подходит, если не используется Azure Government.

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

default: blob.core.windows.net
example: repo1-azure-endpoint=blob.core.usgovcloudapi.net

Параметр ключа репозитория Azure (--repo-azure-key)

Ключ репозитория Azure.

Общий ключ или подпись общего доступа в зависимости от параметра repo-azure-key-type.

example: repo1-azure-key=T+9+aov82qNhrcXSNGZCzm9mjd4d75/oxxOr6r1JVpgTLA==

Параметр типа ключа репозитория Azure (--repo-azure-key-type)

Тип ключа репозитория Azure.

Для авторизации поддерживаются следующие типы:

  • shared - Общий ключ
  • sas - Подпись общего доступа
  • auto - Автоматическая авторизация с использованием управляемых удостоверений Azure
default: shared
example: repo1-azure-key-type=sas

Параметр стиля URI репозитория Azure (--repo-azure-uri-style)

Стиль URI Azure.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом account.endpoint.
  • path - Соединение с узлом endpoint с добавлением учётной записи в начало URI.
default: host
example: repo1-azure-uri-style=path

Параметр поблочного инкрементного резервного копирования (--repo-block)

Включение поблочного инкрементного резервного копирования.

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

ПРИМЕЧАНИЕ:

Прежде чем включить repo-block, необходимо включить параметр repo-bundle.

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

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

default: n
example: repo1-block=y

Параметр пакетирования файлов в репозитории (--repo-bundle)

Пакетирование файлов в репозитории.

Объединяет небольшие файлы в пакеты, уменьшая общее число файлов, записываемых в репозиторий. Записывать меньше файлов обычно эффективнее, особенно в объектные хранилища, такие как S3. Кроме того, файлы нулевого размера не сохраняются (кроме записей в манифесте), что экономит время и место.

default: n
example: repo1-bundle=y

Параметр предельного размера файла в пакете репозитория (--repo-bundle-limit)

Предельный размер файлов для пакетирования.

Максимальный размер файлов, включаемых в пакеты. Файлы большего размера хранятся отдельно.

Файлы в пакетах нельзя использовать повторно при возобновлении резервного копирования, поэтому этот параметр определяет, какие файлы можно использовать при возобновлении: чем больше значение, тем меньше таких файлов.

default: 2MiB
allowed: [8KiB, 1PiB]
example: repo1-bundle-limit=10MiB

Параметр размера пакета репозитория (--repo-bundle-size)

Целевой размер пакета файлов.

Определяет целевой суммарный размер файлов, добавляемых в один пакет. Несжатый пакет может достигать размера repo-bundle-size + repo-bundle-limit, поэтому не следует задавать этому параметру максимальный размер, допустимый файловой системой.

Как правило, слишком большое значение нежелательно: при повторной попытке потребуется заново обработать весь пакет.

default: 20MiB
allowed: [1MiB, 1PiB]
example: repo1-bundle-size=10MiB

Параметр парольной фразы шифрования репозитория (--repo-cipher-pass)

Парольная фраза шифрования репозитория.

Парольная фраза для шифрования и расшифрования файлов репозитория.

ПРИМЕЧАНИЕ:

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

example: repo1-cipher-pass=zWaf6XtpjIVZC5444yXB+cgFDFl7MxGlgkZSaoPvTGirhPygu4jOKOXf9LO4vjfO

Параметр типа шифрования репозитория (--repo-cipher-type)

Шифр для шифрования репозитория.

Поддерживаются следующие типы шифрования:

  • none - Репозиторий не зашифрован
  • aes-256-cbc - Advanced Encryption Standard с длиной ключа 256 бит

Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3) поддерживает шифрование.

default: none
example: repo1-cipher-type=aes-256-cbc

Параметр бакета репозитория GCS (--repo-gcs-bucket)

Бакет репозитория GCS.

Бакет GCS для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые GCS.

example: repo1-gcs-bucket=/pg-backup

Параметр конечной точки репозитория GCS (--repo-gcs-endpoint)

Конечная точка репозитория GCS.

Конечная точка для соединения со службой хранения. Её можно изменить для использования локального сервера GCS или другой конечной точки.

default: storage.googleapis.com
example: repo1-gcs-endpoint=localhost

Параметр ключа репозитория GCS (--repo-gcs-key)

Ключ репозитория GCS.

Токен или файл ключа служебной учётной записи в зависимости от параметра repo-gcs-key-type.

example: repo1-gcs-key=/etc/pgbackrest/gcs-key.json

Параметр типа ключа репозитория GCS (--repo-gcs-key-type)

Тип ключа репозитория GCS.

Для авторизации поддерживаются следующие типы:

  • auto - Авторизация с помощью служебной учётной записи экземпляра.
  • service - Служебная учётная запись из локально сохранённого ключа.
  • token - Для локального тестирования, например с fakegcs.

При repo-gcs-key-type=service учётные данные повторно загружаются при обновлении токена аутентификации.

default: service
example: repo1-gcs-key-type=auto

Параметр идентификатора проекта репозитория GCS (--repo-gcs-user-project)

Идентификатор проекта GCS.

Идентификатор проекта GCS, определяющий оплату запросов.

example: repo1-gcs-user-project=my-project

Жёсткие ссылки между файлами резервных копий в репозитории.

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

default: n
example: repo1-hardlink=y

Устаревшее имя: hardlink

Параметр сервера репозитория (--repo-host)

Сервер репозитория при удалённой работе.

При резервном копировании и архивировании в локально смонтированную файловую систему эта настройка не требуется.

example: repo1-host=repo1.domain.com

Устаревшее имя: backup-host

Параметр файла центра сертификации сервера репозитория (--repo-host-ca-file)

Файл центра сертификации сервера репозитория.

Позволяет использовать для соединения с сервером репозитория файл CA, отличный от системного файла по умолчанию.

example: repo1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера репозитория (--repo-host-ca-path)

Каталог центра сертификации сервера репозитория.

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

example: repo1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера репозитория (--repo-host-cert-file)

Файл сертификата для сервера репозитория.

Отправляется серверу репозитория для подтверждения личности клиента.

example: repo1-host-cert-file=/path/to/client.crt

Параметр команды на сервере репозитория (--repo-host-cmd)

Команда pgBackRest на сервере репозитория.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере репозитория различается. Если параметр не задан, команда на сервере репозитория будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: repo1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: backup-cmd

Параметр файла конфигурации сервера репозитория (--repo-host-config)

Файл конфигурации pgBackRest на сервере репозитория.

Задаёт расположение файла конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: repo1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: backup-config

Параметр каталога включаемых конфигураций сервера репозитория (--repo-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере репозитория.

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

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: repo1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера репозитория (--repo-host-config-path)

Каталог конфигурации pgBackRest на сервере репозитория.

Задаёт расположение каталога конфигурации на сервере репозитория. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: repo1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера репозитория (--repo-host-key-file)

Файл ключа для сервера репозитория.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: repo1-host-key-file=/path/to/client.key

Параметр порта сервера репозитория (--repo-host-port)

Порт сервера репозитория при заданном repo-host.

Позволяет указать нестандартный порт для протокола сервера репозитория.

ПРИМЕЧАНИЕ:

При repo-host-type=ssh для repo-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on repo-host-type):
    tls - 8432

allowed: [0, 65535]
example: repo1-host-port=25

Устаревшее имя: backup-ssh-port

Параметр типа протокола сервера репозитория (--repo-host-type)

Тип протокола сервера репозитория.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: repo1-host-type=tls

Параметр пользователя сервера репозитория (--repo-host-user)

Пользователь сервера репозитория при заданном repo-host.

Определяет пользователя, от имени которого выполняются операции на сервере репозитория. Предпочтительно использовать не postgres, а другого пользователя, например pgbackrest. Если PostgreSQL работает на сервере репозитория, пользователя postgres можно включить в группу pgbackrest, чтобы предоставить ему право чтения репозитория без возможности случайно повредить его содержимое.

default: pgbackrest
example: repo1-host-user=repo-user

Устаревшее имя: backup-user

Параметр пути репозитория (--repo-path)

Путь для хранения резервных копий и архива.

В репозитории pgBackRest хранит резервные копии и архивирует сегменты WAL.

Заранее оценить требуемое место бывает сложно. Лучше создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за день. Это даст общее представление о необходимом месте, хотя со временем по мере развития базы данных требования, скорее всего, изменятся.

default: /var/lib/pgbackrest
example: repo1-path=/backup/db/backrest

Параметр хранения архива (--repo-retention-archive)

Число резервных копий, для которых сохраняется непрерывный WAL.

ПРИМЕЧАНИЕ:

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

Если значение не задано, а repo-retention-full-type равен count (по умолчанию), то для удаления архива по умолчанию используется значение repo-retention-full (или repo-retention-diff), соответствующее repo-retention-archive-type, заданному как full (или diff). Это гарантирует, что WAL удаляется только для уже удалённых резервных копий. Если repo-retention-full-type равен time, по умолчанию удаляются архивы, предшествующие самой старой полной копии, оставшейся после применения настройки repo-retention-full.

Этот параметр должен быть задан, если repo-retention-archive-type равен incr. При острой нехватке дискового пространства он вместе с repo-retention-archive-type позволяет агрессивнее удалять сегменты WAL. Однако это исключает возможность PITR из копий с удалённым WAL и потому не рекомендуется.

allowed: [1, 9999999]
example: repo1-retention-archive=2

Устаревшее имя: retention-archive

Параметр типа хранения архива (--repo-retention-archive-type)

Тип резервных копий для хранения WAL.

При значении full pgBackRest сохраняет архивные журналы для числа полных резервных копий, заданного repo-retention-archive. При значении diff (дифференциальные) pgBackRest сохраняет архивные журналы для числа полных и дифференциальных копий, заданного repo-retention-archive: если последняя копия полная, для целей хранения в репозитории она учитывается как дифференциальная. При значении incr (инкрементные) pgBackRest сохраняет архивные журналы для числа полных, дифференциальных и инкрементных копий, заданного repo-retention-archive. Рекомендуется оставить значение по умолчанию, при котором WAL удаляется только вместе с полными резервными копиями.

default: full
example: repo1-retention-archive-type=diff

Устаревшее имя: retention-archive-type

Параметр хранения дифференциальных копий (--repo-retention-diff)

Число сохраняемых дифференциальных резервных копий.

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

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

allowed: [1, 9999999]
example: repo1-retention-diff=3

Устаревшее имя: retention-diff

Параметр хранения полных копий (--repo-retention-full)

Число или срок хранения полных резервных копий.

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

allowed: [1, 9999999]
example: repo1-retention-full=2

Устаревшее имя: retention-full

Параметр типа хранения полных копий (--repo-retention-full-type)

Тип срока хранения полных резервных копий.

Определяет, означает ли настройка repo-retention-full период времени (в днях) или число полных копий, которые нужно сохранять.

При значении time полные копии старше repo-retention-full удаляются из репозитория, если существует хотя бы ещё одна копия, возраст которой не меньше значения repo-retention-full. Например, если repo-retention-full равен 30 (дней) и есть 2 полные копии возрастом 25 и 35 дней, ни одна не будет удалена: после удаления копии возрастом 35 дней останется только копия возрастом 25 дней, что нарушит политику хранения за 30 дней. Эта политика требует наличия хотя бы одной копии возрастом 30 дней перед удалением более старой. Архивный WAL, предшествующий самой старой оставшейся полной копии, удаляется автоматически, если repo-retention-archive-type и repo-retention-archive не заданы явно.

При значении count полные копии сверх числа repo-retention-full удаляются. Например, если repo-retention-full равен 4 и завершается пятая полная копия, самая старая полная копия будет удалена, чтобы их число осталось равным 4.

Резервная копия учитывается при применении политики хранения только после успешного завершения. Например, если repo-retention-full-type равен count, а repo-retention-full равен 2, для удаления самой старой копии должны существовать 3 завершённые полные копии.

default: count
example: repo1-retention-full-type=time

Параметр хранения истории резервных копий (--repo-retention-history)

Число дней хранения манифестов истории резервных копий.

После завершения резервного копирования копия манифеста сохраняется в каталоге backup.history. По умолчанию эти файлы никогда не удаляются, поскольку полезны для анализа данных, например для измерения роста резервных копий и WAL со временем.

Параметр repo-retention-history задаёт число дней хранения манифестов истории резервных копий. Неудалённые резервные копии всегда сохраняются в истории. Укажите repo-retention-history=0, чтобы хранить историю только для неудалённых резервных копий.

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

allowed: [0, 9999999]
example: repo1-retention-history=365

Параметр бакета репозитория S3 (--repo-s3-bucket)

Бакет репозитория S3.

Бакет S3 для хранения репозитория.

Репозитории pgBackRest можно хранить в корне бакета, задав repo-path=/, но обычно лучше указать префикс, например /repo, чтобы в бакете также можно было хранить журналы и другие данные, создаваемые AWS.

example: repo1-s3-bucket=pg-backup

Параметр конечной точки репозитория S3 (--repo-s3-endpoint)

Конечная точка репозитория S3.

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

Для нестандартных или тестовых конфигураций могут быть полезны параметры repo-storage-ca-file, repo-storage-ca-path, repo-storage-host, repo-storage-port и repo-storage-verify-tls.

example: repo1-s3-endpoint=s3.amazonaws.com

Параметр ключа доступа к репозиторию S3 (--repo-s3-key)

Ключ доступа к репозиторию S3.

Ключ AWS для доступа к этому бакету.

example: repo1-s3-key=AKIAIOSFODNN7EXAMPLE

Параметр секретного ключа доступа к репозиторию S3 (--repo-s3-key-secret)

Секретный ключ доступа к репозиторию S3.

Секретный ключ AWS для доступа к этому бакету.

example: repo1-s3-key-secret=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Параметр типа ключа репозитория S3 (--repo-s3-key-type)

Тип ключа репозитория S3.

Поддерживаются следующие типы:

  • shared - Общие ключи
  • auto - Автоматическое получение временных учётных данных
  • web-id - Автоматическое получение учётных данных веб-идентификации
  • pod-id - Автоматическое получение учётных данных EKS Pod Identity
  • process - Получение учётных данных запуском процесса
default: shared
example: repo1-s3-key-type=auto

Параметр идентификатора ключа KMS репозитория S3 (--repo-s3-kms-key-id)

Ключ KMS репозитория S3.

Включает шифрование на стороне сервера S3 с указанным ключом AWS Key Management Service.

example: repo1-s3-kms-key-id=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр команды процесса аутентификации S3 (--repo-s3-process-cmd)

Команда процесса аутентификации S3.

Команда (и необязательные аргументы), выполняемая для получения временных учётных данных S3. Первый элемент списка — команда, остальные передаются ей как параметры.

Процесс должен вывести JSON с полями AccessKeyId, SecretAccessKey, SessionToken и Expiration. Учётные данные автоматически обновляются до истечения срока действия. Формат описан в разделе Поставщик учётных данных через процесс .

example: repo1-s3-process-cmd=/usr/local/bin/get-credentials
example: repo1-s3-process-cmd=--role
example: repo1-s3-process-cmd=my-role

Параметр региона репозитория S3 (--repo-s3-region)

Регион репозитория S3.

Регион AWS, в котором создан бакет.

example: repo1-s3-region=us-east-1

Параметр оплаты запросов отправителем в репозитории S3 (--repo-s3-requester-pays)

Оплата запросов отправителем в репозитории S3.

Включает в S3 оплату запросов отправителем.

default: n
example: repo1-s3-requester-pays=n

Параметр роли репозитория S3 (--repo-s3-role)

Роль репозитория S3.

Имя роли AWS (не полный ARN), используемой для получения временных учётных данных при repo-s3-key-type=auto.

example: repo1-s3-role=authrole

Параметр службы репозитория S3 (--repo-s3-service)

Служба подписывания S3.

Служба подписывания S3, используемая при аутентификации SigV4. Для стандартных конечных точек S3 по умолчанию используется s3. При использовании конечной точки S3 Outposts задайте s3-outposts.

default: s3
example: repo1-s3-service=s3-outposts

Параметр клиентского ключа SSE репозитория S3 (--repo-s3-sse-customer-key)

Клиентский ключ SSE репозитория S3.

Включает шифрование на стороне сервера S3 с указанным клиентским ключом.

example: repo1-s3-sse-customer-key=bceb4f13-6939-4be3-910d-df54dee817b7

Параметр конечной точки STS репозитория S3 (--repo-s3-sts-host)

Конечная точка STS репозитория S3.

Конечная точка STS для получения временных учётных данных при repo-s3-key-type=web-id. Укажите региональную конечную точку (например, sts.us-east-1.amazonaws.com) для использования регионального STS; это может требоваться для GovCloud, китайских регионов или снижения задержки.

default: sts.amazonaws.com
example: repo1-s3-sts-host=sts.us-east-1.amazonaws.com

Параметр токена безопасности репозитория S3 (--repo-s3-token)

Токен безопасности репозитория S3.

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

example: repo1-s3-token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22 ...

Параметр стиля URI репозитория S3 (--repo-s3-uri-style)

Стиль URI S3.

Поддерживаются следующие стили URI:

  • host - Соединение с узлом bucket.endpoint.
  • path - Соединение с узлом endpoint с добавлением бакета в начало URI.
default: host
example: repo1-s3-uri-style=path

Параметр сервера репозитория SFTP (--repo-sftp-host)

Сервер репозитория SFTP.

Сервер SFTP, на котором расположен репозиторий.

example: repo1-sftp-host=sftprepo.domain

Параметр отпечатка сервера репозитория SFTP (--repo-sftp-host-fingerprint)

Отпечаток сервера репозитория SFTP.

Способ формирования отпечатка сервера репозитория SFTP следует выбирать в соответствии с repo-sftp-host-key-hash-type. Отпечаток можно получить командой awk '{print $2}' ssh_host_xxx_key.pub | base64 -d | (md5sum or sha1sum) -b. Ключи сервера ssh обычно находятся в каталоге /etc/ssh.

example: repo1-sftp-host-fingerprint=f84e172dfead7aeeeae6c1fdfb5aa8cf

Параметр типа проверки ключа сервера SFTP (--repo-sftp-host-key-check-type)

Тип проверки ключа сервера SFTP.

Поддерживаются следующие типы проверки ключа сервера SFTP:

  • strict - pgBackRest никогда не добавляет ключи серверов в файл ~/.ssh/known_hosts автоматически и отказывается соединяться с серверами, ключ которых изменился или отсутствует в файлах известных серверов. При этом пользователь должен вручную добавлять все новые серверы.
  • accept-new - pgBackRest автоматически добавляет новые ключи серверов в пользовательский файл известных серверов, но не разрешает соединения с серверами, ключи которых изменились.
  • fingerprint - pgBackRest сравнивает ключ сервера с отпечатком, заданным параметром repo-sftp-host-fingerprint.
  • none - Ключ сервера не проверяется.
default: strict
example: repo1-sftp-host-key-check-type=accept-new

Параметр типа хеша ключа сервера репозитория SFTP (--repo-sftp-host-key-hash-type)

Тип хеша ключа сервера репозитория SFTP.

Тип хеша ключа сервера репозитория SFTP. Задаёт тип хеша для вычисления дайджеста ключа удалённой системы при установлении SSH-соединения. Новые версии libssh2 поддерживают sha256 в дополнение к md5 и sha1.

example: repo1-sftp-host-key-hash-type=sha256

Параметр порта сервера репозитория SFTP (--repo-sftp-host-port)

Порт сервера репозитория SFTP.

Порт сервера репозитория SFTP.

default: 22
allowed: [1, 65535]
example: repo1-sftp-host-port=22

Параметр пользователя сервера репозитория SFTP (--repo-sftp-host-user)

Пользователь сервера репозитория SFTP.

Пользователь на сервере, используемом для хранения репозитория.

example: repo1-sftp-host-user=pg-backup

Параметр файла известных серверов SFTP (--repo-sftp-known-host)

Файл известных серверов SFTP.

Файл известных серверов, в котором при аутентификации ищется совпадение с сервером SFTP. Если параметр не задан, pgBackRest по умолчанию проверяет ~/.ssh/known_hosts, ~/.ssh/known_hosts2, /etc/ssh/ssh_known_hosts и /etc/ssh/ssh_known_hosts2. Если заданы один или несколько путей к файлам, поиск выполняется в них. Пути должны быть абсолютными или начинаться с тильды. Параметр repo-sftp-known-host можно указывать несколько раз для поиска в нескольких файлах известных серверов. Чтобы использовать проверку по этим файлам, repo-sftp-host-fingerprint не должен быть задан. См. также параметр repo-sftp-host-check-type.

example: repo1-sftp-known-host=/home/postgres/.ssh/known_hosts

Параметр файла закрытого ключа репозитория SFTP (--repo-sftp-private-key-file)

Файл закрытого ключа SFTP.

Файл закрытого ключа SFTP для аутентификации.

example: repo1-sftp-private-key-file=~/.ssh/id_ed25519

Параметр парольной фразы закрытого ключа репозитория SFTP (--repo-sftp-private-key-passphrase)

Парольная фраза закрытого ключа SFTP.

Парольная фраза для доступа к закрытому ключу. Её можно задать при создании пары открытого и закрытого ключей SSH.

example: repo1-sftp-private-key-passphrase=BeSureToGenerateAndUseASecurePassphrase

Параметр файла открытого ключа репозитория SFTP (--repo-sftp-public-key-file)

Файл открытого ключа SFTP.

Файл открытого ключа SFTP для аутентификации. Необязателен при сборке с OpenSSL и обязателен при сборке с другой библиотекой.

example: repo1-sftp-public-key-file=~/.ssh/id_ed25519.pub

Параметр файла CA хранилища репозитория (--repo-storage-ca-file)

Файл CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) файл CA, отличный от системного файла по умолчанию.

example: repo1-storage-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Устаревшие имена: repo-azure-ca-file, repo-s3-ca-file

Параметр каталога CA для TLS хранилища репозитория (--repo-storage-ca-path)

Каталог CA хранилища репозитория.

Позволяет использовать для сертификатов хранилища (например, S3 или Azure) каталог CA, отличный от системного каталога по умолчанию.

example: repo1-storage-ca-path=/etc/pki/tls/certs

Устаревшие имена: repo-azure-ca-path, repo-s3-ca-path

Параметр сервера хранилища репозитория (--repo-storage-host)

Сервер хранилища репозитория.

Устанавливает соединение с сервером, отличным от конечной точки хранилища (например, S3 или Azure). Обычно используется для тестирования.

example: repo1-storage-host=127.0.0.1

Устаревшие имена: repo-azure-host, repo-s3-host

Параметр порта хранилища репозитория (--repo-storage-port)

Порт хранилища репозитория.

Порт для соединения с конечной точкой хранилища (например, S3 или Azure) либо с сервером, если он указан.

default: 443
allowed: [1, 65535]
example: repo1-storage-port=9000

Устаревшие имена: repo-azure-port, repo-s3-port

Параметр тегов хранилища репозитория (--repo-storage-tag)

Теги хранилища репозитория.

Задаёт теги, добавляемые к объектам, если репозиторий расположен в объектном хранилище (например, S3). Параметр можно повторять для добавления нескольких тегов.

В pgBackRest нет возможности изменять эти теги, поэтому их следует правильно задать до запуска stanza-create, чтобы теги были одинаковыми во всём репозитории.

example: repo1-storage-tag=key1=value1

Параметр размера части загрузки в хранилище репозитория (--repo-storage-upload-chunk-size)

Размер части загрузки в хранилище репозитория.

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

Больший размер части обычно повышает производительность, поскольку уменьшает число запросов загрузки и позволяет загружать больше файлов одним запросом, а не частями. Недостаток — повышенное потребление памяти. Поскольку буфер части выделяется каждому процессу, большие значения process-max увеличивают общий расход памяти.

Допустимые размеры частей зависят от типа хранилища и платформы. Например, минимальный размер части в AWS S3 — 5MiB. Терминология также различается: при поиске минимальных и максимальных значений используйте «part size» для AWS S3, «chunk size» для GCS и «block size» для Azure.

Если файл больше 1GiB (максимального размера, который PostgreSQL создаёт по умолчанию), размер части постепенно увеличивается вплоть до максимально допустимого, чтобы завершить загрузку файла.

default (depending on repo-type):
    azure - 4MiB
    gcs - 4MiB
    s3 - 5MiB

allow range (depending on repo-type):
    azure - [4MiB, 1GiB]
    gcs - [4MiB, 1GiB]
    s3 - [5MiB, 1GiB]

example: repo1-storage-upload-chunk-size=16MiB

Параметр проверки сертификата хранилища репозитория (--repo-storage-verify-tls)

Проверка сертификата хранилища репозитория.

Позволяет включать и отключать проверку TLS-сертификата сервера хранилища (например, S3 или Azure). Отключать проверку следует только при тестировании или в других случаях использования самоподписанного сертификата.

default: y
example: repo1-storage-verify-tls=n

Устаревшие имена: repo-azure-verify-tls, repo-s3-verify-ssl, repo-s3-verify-tls

Создание символических ссылок внутри репозитория.

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

Хотя подавляющему большинству пользователей эта возможность, вероятно, не нужна, она остаётся включённой по умолчанию ради совместимости. Однако для Posix-подобных хранилищ, не поддерживающих символические ссылки, может быть полезно отключить их.

default: y
example: repo1-symlink=n

Параметр целевого времени репозитория (--repo-target-time)

Целевое время репозитория.

Целевое время определяет момент, на который команды читают репозиторий в хранилище с версионированием. Это позволяет прочитать состояние репозитория на определённый момент времени и восстановить данные, удалённые или повреждённые по ошибке пользователя либо вредоносным ПО.

S3, GCS и Azure поддерживают версионирование, но обычно оно отключено по умолчанию. Помимо включения версионирования, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.

Если указан параметр repo-target-time, необходимо также указать repo. Версионирование, вероятно, поддерживается не всеми типами репозиториев, и в целом при восстановлении разумно обращаться к одному конкретному репозиторию.

Временные метки хранилища сравниваются с указанной по условию <=; миллисекунды, если они указаны, отбрасываются.

example: repo-target-time=2024-08-08 12:12:12+00

Параметр типа репозитория (--repo-type)

Тип хранилища репозитория.

Поддерживаются следующие типы репозиториев:

  • azure - Azure Blob Storage Service
  • cifs - Аналогичен posix, но отключает ссылки и fsync каталогов
  • gcs - Google Cloud Storage
  • posix - Файловые системы, совместимые с Posix
  • s3 - AWS Simple Storage Service
  • sftp - Secure File Transfer Protocol

При использовании смонтированной NFS в качестве репозитория posix к pgBackRest применяются те же правила, что описаны в документации PostgreSQL: Создание кластера баз данных — файловые системы .

default: posix
example: repo1-type=cifs

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

Секция restore определяет параметры восстановления резервных копий.

Параметр режима архивирования (--archive-mode)

Сохранение или отключение архивирования на восстановленном кластере.

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

Поддерживаются следующие режимы:

  • off - Отключает архивирование, задавая archive_mode=off.
  • preserve - Сохраняет текущее значение archive_mode.

ПРИМЕЧАНИЕ: этот параметр недоступен в PostgreSQL < 12.

default: preserve
example: archive-mode=off

Параметр исключения баз данных (--db-exclude)

Восстановление с исключением указанных баз данных.

Исключённые базы данных восстанавливаются в виде разреженных файлов, заполненных нулями: это экономит место, сохраняя возможность восстановления PostgreSQL. После восстановления эти базы будут недоступны, но их можно удалить командой drop database. Параметр --db-exclude можно передать несколько раз, чтобы исключить несколько баз данных.

В сочетании с параметром --db-include параметр --db-exclude применяется только к стандартным системным базам данных (template0, template1 и postgres).

example: db-exclude=db_main

Параметр включения баз данных (--db-include)

Восстановление только указанных баз данных.

Эта возможность позволяет восстановить только выбранные базы данных. Базы, не включённые явно, восстанавливаются в виде разреженных файлов, заполненных нулями: это экономит место, сохраняя возможность восстановления PostgreSQL. После восстановления базы, которые не были включены, будут недоступны, но их можно удалить командой drop database.

ПРИМЕЧАНИЕ:

Встроенные базы данных (template0, template1 и postgres) всегда восстанавливаются, если они не исключены явно.

Параметр --db-include можно передать несколько раз, чтобы включить несколько баз данных.

Дополнительные сведения и ограничения приведены в разделе Восстановление выбранных баз данных .

example: db-include=db_main

Восстановление всех символических ссылок.

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

default: n
example: link-all=y

Изменение цели символической ссылки.

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

example: link-map=pg_xlog=/data/xlog

Параметр настройки восстановления (--recovery-option)

Установка параметра в postgresql.auto.conf или recovery.conf.

Сведения о параметрах postgresql.auto.conf и recovery.conf приведены в разделе Конфигурация сервера (обязательно выберите свою версию PostgreSQL). Этот параметр можно указывать несколько раз.

Для PostgreSQL >= 12 параметры записываются в postgresql.auto.conf. Для всех остальных версий — в recovery.conf.

ПРИМЕЧАНИЕ:

Параметр restore_command создаётся автоматически, но его можно переопределить этим параметром. Собственный restore_command следует задавать осторожно, поскольку pgBackRest рассчитан на автоматическое управление им. Параметры цели восстановления (recovery_target_name, recovery_target_time и т. п.) pgBackRest формирует автоматически, и их не следует задавать таким способом.

Поскольку после записи файла postgresql.auto.conf или recovery.conf pgBackRest не запускает PostgreSQL, перед ручным перезапуском всегда можно проверить или отредактировать postgresql.auto.conf или recovery.conf.

example: recovery-option=primary_conninfo=db.mydomain.com

Параметр переназначения табличного пространства (--tablespace-map)

Восстановление табличного пространства в указанный каталог.

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

Расположения табличных пространств не хранятся в pg_tablespace, поэтому их можно свободно перемещать. Однако переносить табличное пространство в data_directory не рекомендуется: это может вызвать проблемы. Дополнительные сведения о перемещении табличных пространств приведены на http://www.databasesoup.com/2013/11/moving-tablespaces.html .

example: tablespace-map=ts_01=/db/ts_01

Параметр переназначения всех табличных пространств (--tablespace-map-all)

Восстановление всех табличных пространств в указанный каталог.

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

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

ОСТОРОЖНО:

Табличные пространства, созданные после начала резервного копирования, не переназначаются. Если требуется переназначение, после создания табличного пространства следует сделать новую резервную копию.

example: tablespace-map-all=/data/tablespace

Параметры сервера

Секция server определяет параметры настройки TLS-сервера.

Параметр адреса TLS-сервера (--tls-server-address)

Адрес TLS-сервера.

IP-адрес, на котором сервер будет слушать запросы клиентов.

default: localhost
example: tls-server-address=*

Параметр авторизованных клиентов TLS-сервера (--tls-server-auth)

Авторизованные клиенты TLS-сервера.

Сервер авторизует клиентов, проверяя их сертификаты и сверяя CN (общее имя) сертификата со списком, заданным на сервере параметром tls-server-auth.

Клиентский CN можно авторизовать для любого количества stanza, передав в параметре tls-server-auth список через запятую, либо для всех stanza, указав tls-server-auth=client-cn=*. Для клиентского CN нельзя указывать подстановочные символы.

example: tls-server-auth=client-cn=stanza1,stanza2

Параметр центров сертификации TLS-сервера (--tls-server-ca-file)

Центры сертификации TLS-сервера.

Проверяет, что сертификаты клиентов подписаны доверенным центром сертификации.

example: tls-server-ca-file=/path/to/server.ca

Параметр сертификата TLS-сервера (--tls-server-cert-file)

Файл сертификата TLS-сервера.

Отправляется клиенту для подтверждения личности сервера.

example: tls-server-cert-file=/path/to/server.crt

Параметр ключа TLS-сервера (--tls-server-key-file)

Файл ключа TLS-сервера.

Подтверждает, что сертификат сервера отправлен его владельцем.

example: tls-server-key-file=/path/to/server.key

Параметр порта TLS-сервера (--tls-server-port)

Порт сервера TLS.

Порт, на котором сервер будет слушать запросы клиентов.

default: 8432
allowed: [1, 65535]
example: tls-server-port=8000

Параметры stanza

Stanza определяет конфигурацию резервного копирования конкретного кластера баз данных PostgreSQL. В секции stanza должен быть задан путь к кластеру, а для удалённого кластера — также сервер и пользователь. Кроме того, любые глобальные секции конфигурации можно переопределить, задав настройки для конкретной stanza.

Индексация: все параметры pg- имеют индексы, что позволяет настраивать несколько серверов PostgreSQL. Например, один первичный сервер настраивается параметрами pg1-path, pg1-port и т. п. Если настроен резервный сервер, укажите на сервере репозитория его параметры pg- с индексом pg2- (например, pg2-host, pg2-path и т. п.).

Параметр базы данных PostgreSQL (--pg-database)

База данных PostgreSQL.

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

По историческим причинам значение переменной окружения PGDATABASE игнорируется.

default: postgres
example: pg1-database=backupdb

Параметр сервера PostgreSQL (--pg-host)

Сервер PostgreSQL для удалённой работы.

Используется при резервном копировании, когда сервер PostgreSQL отличается от сервера репозитория.

example: pg1-host=db.domain.com

Устаревшее имя: db-host

Параметр файла центра сертификации сервера PostgreSQL (--pg-host-ca-file)

Файл центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL файл CA, отличный от системного файла по умолчанию.

example: pg1-host-ca-file=/etc/pki/tls/certs/ca-bundle.crt

Параметр каталога центра сертификации сервера PostgreSQL (--pg-host-ca-path)

Каталог центра сертификации сервера PostgreSQL.

Позволяет использовать для соединения с сервером PostgreSQL каталог CA, отличный от системного каталога по умолчанию.

example: pg1-host-ca-path=/etc/pki/tls/certs

Параметр файла сертификата сервера PostgreSQL (--pg-host-cert-file)

Файл сертификата для сервера PostgreSQL.

Отправляется серверу PostgreSQL для подтверждения личности клиента.

example: pg1-host-cert-file=/path/to/client.crt

Параметр команды на сервере PostgreSQL (--pg-host-cmd)

Команда pgBackRest на сервере PostgreSQL.

Требуется только тогда, когда путь к команде pgBackRest на локальном сервере и сервере PostgreSQL различается. Если параметр не задан, команда на сервере PostgreSQL будет той же, что и локальная команда.

default: [path of executed pgbackrest binary]
example: pg1-host-cmd=/usr/lib/backrest/bin/pgbackrest

Устаревшее имя: db-cmd

Параметр файла конфигурации сервера PostgreSQL (--pg-host-config)

Файл конфигурации pgBackRest на сервере базы данных.

Задаёт расположение файла конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального файла конфигурации.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_FILE
example: pg1-host-config=/conf/pgbackrest/pgbackrest.conf

Устаревшее имя: db-config

Параметр каталога включаемых конфигураций сервера PostgreSQL (--pg-host-config-include-path)

Каталог включаемых конфигураций pgBackRest на сервере базы данных.

Задаёт расположение каталога включаемых конфигураций на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога включаемых конфигураций.

default: CFGOPTDEF_CONFIG_PATH "/" PROJECT_CONFIG_INCLUDE_PATH
example: pg1-host-config-include-path=/conf/pgbackrest/conf.d

Параметр каталога конфигурации сервера PostgreSQL (--pg-host-config-path)

Каталог конфигурации pgBackRest на сервере базы данных.

Задаёт расположение каталога конфигурации на сервере PostgreSQL. Требуется только тогда, когда оно отличается от расположения локального каталога конфигурации.

default: CFGOPTDEF_CONFIG_PATH
example: pg1-host-config-path=/conf/pgbackrest

Параметр файла ключа для сервера PostgreSQL (--pg-host-key-file)

Файл ключа для сервера PostgreSQL.

Подтверждает, что сертификат клиента отправлен его владельцем.

example: pg1-host-key-file=/path/to/client.key

Параметр порта сервера PostgreSQL (--pg-host-port)

Порт сервера PostgreSQL при заданном pg-host.

Позволяет указать нестандартный порт для протокола сервера PostgreSQL.

ПРИМЕЧАНИЕ:

При pg-host-type=ssh для pg-host-port нет значения по умолчанию. В этом случае используется порт, настроенный для команды, указанной в cmd-ssh.

default (depending on pg-host-type):
    tls - 8432

allowed: [0, 65535]
example: pg1-host-port=25

Устаревшее имя: db-ssh-port

Параметр типа протокола сервера PostgreSQL (--pg-host-type)

Тип протокола сервера PostgreSQL.

Поддерживаются следующие типы протоколов:

  • ssh - Secure Shell.
  • tls - TLS-сервер pgBackRest.
default: ssh
example: pg1-host-type=tls

Параметр пользователя сервера PostgreSQL (--pg-host-user)

Пользователь для входа на сервер PostgreSQL при заданном pg-host.

Этот пользователь также будет владельцем удалённого процесса pgBackRest и будет устанавливать соединения с PostgreSQL. Для правильной работы следует использовать владельца кластера базы данных PostgreSQL, обычно это пользователь postgres, выбранный по умолчанию.

default: postgres
example: pg1-host-user=db_owner

Устаревшее имя: db-user

Параметр пути PostgreSQL (--pg-path)

Каталог данных PostgreSQL.

Следует указать значение data_directory, сообщаемое PostgreSQL. Хотя его можно получить из разных источников, разумно задать его явно на случай, если эти источники будут недоступны при восстановлении или резервном копировании остановленного кластера.

При каждом резервном копировании работающего кластера параметр pg-path сверяется со значением, сообщаемым PostgreSQL, поэтому его следует всегда поддерживать актуальным.

example: pg1-path=/data/db

Устаревшее имя: db-path

Параметр порта PostgreSQL (--pg-port)

Порт PostgreSQL.

Порт, на котором работает PostgreSQL. Обычно его не требуется указывать, поскольку большинство кластеров PostgreSQL работают на порту по умолчанию.

default: 5432
allowed: [0, 65535]
example: pg1-port=6543

Устаревшее имя: db-port

Параметр каталога сокета PostgreSQL (--pg-socket-path)

Каталог Unix-сокета PostgreSQL.

Каталог Unix-сокета, указанный при запуске PostgreSQL. pgBackRest автоматически проверяет стандартное расположение для используемой ОС, поэтому обычно этот параметр не требуется, если каталог сокета не был явно изменён настройкой unix_socket_directories в postgresql.conf.

example: pg1-socket-path=/var/run/postgresql

Устаревшее имя: db-socket-path

Параметр пользователя базы данных PostgreSQL (--pg-user)

Пользователь базы данных PostgreSQL.

Имя пользователя базы данных для соединения с PostgreSQL. Если оно не указано, pgBackRest использует локального пользователя ОС или PGUSER.

example: pg1-user=backupuser

6 - Примечания к выпускам

История выпусков pgBackRest с подробным описанием изменений каждой версии.

Введение

Номер выпуска pgBackRest состоит из двух частей: основной и дополнительной. Основной выпуск может нарушать совместимость с предыдущим основным выпуском, однако выпуски v2 полностью совместимы с репозиториями v1 и принимают все параметры v1. Дополнительные выпуски могут включать исправления ошибок и новые возможности, но не меняют формат репозитория; изменения параметров и имён по возможности исключаются. Документация выпуска v1 доступна здесь . Примечания к выпуску также могут содержать раздел «Дополнительные примечания», но описанные в нём изменения касаются только документации или набора тестов и не влияют непосредственно на код pgBackRest.


Документированный стабильный выпуск

Это зеркало содержит документацию v2.59.3. Сведения о более новых версиях доступны в истории выпусков исходного проекта .

Примечания к выпуску v2.59.3

Ошибка генерации подключей шифрования

Выпущено 4 октября 2026

ВАЖНОЕ ПРИМЕЧАНИЕ: В предыдущих версиях при ошибке доступа к системным случайным данным могли генерироваться слабые подключи шифрования и соли. Подробности см. в разделе Слабые подключи шифрования и соли .

Исправления ошибок:

  • Исправлена возможная ошибка контрольной суммы при загрузке зашифрованных информационных файлов и манифестов. (Исправил j0uinim. Проверили: David Steele.)
  • Исправлена возможная генерация слабых подключей шифрования и солей. (Исправил j0uinim. Проверили: David Steele, Stefan Fercot, Douglas J Hunley.)

Стабильные выпуски

Примечания к выпуску v2.59.2

Поддержка PostgreSQL 19beta4

Выпущен 27 сентября 2026

Исправления ошибок:

  • Исправлена обработка пустой карты блоков при усечении файла до нулевого размера во время резервного копирования. (Рецензирование: Douglas J Hunley. Сообщили: JPCOSTA78.)
  • Отключены повторные попытки чтения, если драйверу переданы фильтры. (Рецензирование: Douglas J Hunley. Сообщили: megamaced.)
  • Исправлена постраничная выдача списка версий S3. (Рецензирование: Douglas J Hunley, guruguruguru. Сообщили: guruguruguru.)
  • Добавлена установка заголовка версии Azure при аутентификации SAS. (Рецензирование: Douglas J Hunley. Сообщили: Florian Helmberger.)
  • Исправлено зависание асинхронной команды archive-push на файле истории резервного копирования нулевого размера. (Исправление: Andrew Kroh. Рецензирование: David Steele, Douglas J Hunley.)
  • Исправлена работа команды annotate с удалённым зашифрованным репозиторием. (Исправление: Douglas J Hunley. Рецензирование: David Steele.)

Новые возможности:

  • Поддержка PostgreSQL 19beta4.

Примечания к выпуску v2.59.1

Поддержка PostgreSQL 19beta3

Выпущен 17 августа 2026

Исправления ошибок:

  • Исправлено зависание, возникавшее, когда буфер блока меньше входного буфера. (Рецензирование: Andrew Pogrebnoi, Douglas J Hunley. Сообщили: crajac66.)
  • Новая метка резервной копии теперь сравнивается только с метками в наборе её собственной полной резервной копии. (Рецензирование: Douglas J Hunley. Сообщили: Anton Glushakov.)
  • Исправлено отсутствие необходимых для сборки файлов в архивах исходного кода, создаваемых GitHub. (Сообщили: aardvarkzed.)

Новые возможности:

  • Поддержка PostgreSQL 19beta3. (Авторы: Lardière Sébastien. Рецензирование: David Steele.)

Улучшения документации:

  • Документировано исключение, допускающее точки в именах бакетов S3 при repo-s3-uri-style=path.
  • Из руководства пользователя удалена явная настройка hot_standby.

Примечания к выпуску v2.59.0

Поддержка PostgreSQL 19beta2

Выпущен 20 июля 2026

ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Доступен новый дистрибутивный tar-архив, упрощающий сборку за счёт предварительно сгенерированных документации HTML, страницы man и кода. Архив прилагается к каждому выпуску как файл pgbackrest-{version}.tar.gz. Подробности см. в README.md внутри архива. Рекомендуется использовать новый дистрибутивный tar-архив, чтобы избежать установки дополнительных средств сборки для генерации кода в будущих выпусках. Подробнее см. Новый дистрибутивный tar-архив . ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Добавлена новая необязательная зависимость от libsystemd. ВАЖНОЕ ПРИМЕЧАНИЕ: Начиная с этого выпуска по умолчанию от имени root можно запускать только команду restore. Для запуска остальных команд от имени root используется allow-root (хотя это не рекомендуется).

Исправления ошибок:

  • Исправлено удаление командой expire резервной копии, создаваемой на другом сервере. (Рецензирование: Douglas J Hunley. Сообщили: Dmitrii.)
  • Исправлено несоблюдение archive-push-queue-max при ошибке обработки файла WAL. (Рецензирование: Stefan Fercot. Сообщили: vut12.)
  • Исправлен сбой асинхронной команды archive-get при восстановлении с переходом на другую временную шкалу. (Рецензирование: Douglas J Hunley. Сообщили: Jimmy Yih.)
  • Исправлено возможное переполнение буфера в модуле обработки ошибок. (Исправление: Christophe Pettus. Рецензирование: David Steele.)
  • Исправлено обращение к освобождённой памяти клиента параллельного протокола. (Рецензирование: Douglas J Hunley. Сообщили: Georgy Shelkovy.)
  • Исправлено переполнение кучи при задании параметра pg без pg1. (Рецензирование: Douglas J Hunley. Сообщили: Naveen.)

Новые возможности:

  • Поддержка PostgreSQL 19beta2. (Рецензирование: Stefan Fercot.)
  • Добавлен параметр archive-expire-before для очистки архива WAL. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Добавлено пакетное удаление в хранилище Azure. (Рецензирование: Douglas J Hunley, Crispy.)
  • Добавлена поддержка S3 Outposts. (Авторы: Shiva Kumar Ambigi. Рецензирование: David Steele, Roberto Mello.)
  • Добавлена аутентификация S3 с получением учётных данных через внешний процесс. (Рецензирование: Andrew Charlton. Предложили: Andrew Charlton.)

Улучшения:

  • Добавлено повторное подключение к хранилищу SFTP после разрыва сервером неактивного соединения. (Рецензирование: Stefan Fercot. Предложили: mustafa0x, tisserat.)
  • Добавлено кэширование пользователей и групп для ускорения построения манифеста. (Авторы: Gunnar Lindholm. Рецензирование: David Steele.)
  • В вывод команды info добавлен ход резервного копирования для каждого репозитория. (Авторы: Will Morland. Рецензирование: David Steele, Stefan Fercot.)
  • В команду verify добавлены проверки backup.info. (Авторы: Denis Garsh. Рецензирование: David Steele, Douglas J Hunley.)
  • Добавлена возможность настройки конечной точки S3 STS. (Авторы: Simon Gratton. Рецензирование: David Steele.)
  • Добавлен параметр archive-push-batch-size, ограничивающий объём WAL, отправляемого за один асинхронный запуск. (Рецензирование: Stefan Fercot.)
  • Асинхронная команда archive-push теперь завершается при первой ошибке. (Рецензирование: Stefan Fercot. Предложили: Lardière Sébastien.)
  • Повышена надёжность разбора ответов HTTP с передачей по частям. (Авторы: Shubham. Рецензирование: David Steele.)
  • При запуске от имени root без включённого allow-root теперь выдаётся ошибка. (Рецензирование: Douglas J Hunley.)
  • Сокращено число двоичных поисков при построении манифеста. (Авторы: Gunnar Lindholm. Рецензирование: David Steele.)
  • Ускорено позиционирование в файлах при дельта-восстановлении инкрементных копий на уровне блоков. (Рецензирование: David Christensen, Douglas J Hunley.)
  • Файлы резервной копии теперь пакетируются по порядку, без поиска более подходящего по размеру файла. (Рецензирование: Stefan Fercot.)
  • При невозможности завершить запрос теперь сообщается исходная ошибка. (Рецензирование: Andrew Pogrebnoi. Предложили: Marco Fontana.)
  • При сбое запроса учётных данных S3 теперь сообщается фактическая ошибка. (Рецензирование: Douglas J Hunley. Предложили: Mitchell Grice.)
  • Ошибки каталога очереди команды archive-push теперь записываются в журнал PostgreSQL. (Рецензирование: Douglas J Hunley. Предложили: Don Seiler.)
  • Для неподдерживаемой версии добавлена подсказка о том, что pgBackRest может быть устаревшим.
  • Добавлена интеграция с механизмом уведомлений systemd notify. (Авторы: Andrew Jackson. Рецензирование: David Steele.)
  • Подавлены ошибки unused parameter при проверках компилятора в meson. (Авторы: Jörg Plate. Рецензирование: David Steele.)
  • Минимальным стандартом C теперь является C11. (Рецензирование: Mohammad Ali Nazir Kosar.)

Улучшения документации:

  • Параметр stanza сделан внутренним для команд repo-*. (Рецензирование: Stefan Fercot.)
  • Документировано чтение командой info настроек шифрования из секции global. (Рецензирование: Stefan Fercot. Предложили: Ron Johnson.)
  • Документировано использование конфигурации команды backup параметром expire-auto. (Рецензирование: Stefan Fercot. Предложили: Lardière Sébastien.)
  • Документирована настройка директивы su logrotate для выделенного пользователя. (Рецензирование: Douglas J Hunley. Предложили: lkanbus.)
  • Документировано отсутствие поддержки комментариев в конце строк в файлах конфигурации. (Рецензирование: Douglas J Hunley. Предложили: Alex Richman.)

Улучшения набора тестов:

  • Исправлены конфликты групп Alpine в контейнерах CI. (Авторы: Artur Zakirov. Рецензирование: David Steele.)

Примечания к выпуску v2.58.0

Улучшения объектных хранилищ

Выпущен 19 января 2026

ВАЖНОЕ ПРИМЕЧАНИЕ: Минимальные значения параметра repo-storage-upload-chunk-size увеличены. Теперь они соответствуют минимальным значениям, разрешённым поставщиками.

Исправления ошибок:

  • Исправлена взаимная блокировка из-за записи в журнал в обработчике сигнала. (Исправление: Maxim Michkov. Рецензирование: David Steele.)

Новые возможности:

  • Поддержка HTTP для S3, GCS и Azure. (Авторы: Will Morland. Рецензирование: David Steele.)
  • Добавлена возможность удаления самой старой полной резервной копии независимо от текущего срока хранения. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Ron Johnson.)
  • Поддержка управляемых удостоверений Azure. (Авторы: Moiz Ibrar, Matthew Mols. Рецензирование: David Steele.)
  • Экспериментальная поддержка идентификации подов S3 EKS. (Авторы: Pierre BOUTELOUP. Рецензирование: David Steele.)
  • Добавлена возможность настройки наборов шифров TLS. (Авторы: Gunnar “Nick” Bluth. Рецензирование: David Steele.)
  • Добавлена возможность задания приоритета процесса. (Рецензирование: Douglas J Hunley.)

Улучшения:

  • Разрешены точки в именах бакетов S3 при использовании URI с адресацией через путь. (Авторы: Joakim Hindersson. Рецензирование: David Steele.)
  • Если проверка не отключена, требуется TLS >= 1.2. (Рецензирование: Douglas J Hunley, Gunnar “Nick” Bluth.)
  • Размер частей S3/GCS/Azure теперь определяется динамически для больших загрузок. (Рецензирование: Douglas J Hunley. Предложили: Timothée Peignier.)
  • Оптимизирован размер частей S3/GCS/Azure для небольших файлов. (Рецензирование: Douglas J Hunley.)
  • Удалена поддержка PostgreSQL 9.5. (Рецензирование: Douglas J Hunley.)
  • Улучшена запись в журнал значений по умолчанию для параметров с неразрешённой зависимостью. (Рецензирование: Stefan Fercot.)

Улучшения документации:

  • Из руководства пользователя удалена явная настройка max_wal_senders/wal_level. (Предложили: Jamie Nguyen.)
  • Уточнено, что пакетирование файлов полезно для файловых систем с большим размером блока. (Предложили: Ron Johnson.)

Примечания к выпуску v2.57.0

Отключение символических ссылок в репозитории

Выпущен 18 октября 2025

Исправления ошибок:

  • Устранена вложенность тайм-аутов HTTP/TLS/сокетов. (Рецензирование: David Christensen.)
  • Исправлено возможное нарушение сегментации в сообщении об ошибке контрольной суммы страницы. (Исправление: Zsolt Parragi. Рецензирование: David Steele.)

Новые возможности:

  • Добавлен параметр repo-symlink для отключения создания символических ссылок в репозитории. (Рецензирование: Douglas J Hunley. Предложили: Ron Johnson.)

Улучшения:

  • Добавлены повторные попытки HTTP при ошибках 408 и 429. (Рецензирование: David Christensen.)

Примечания к выпуску v2.56.0

Улучшения информации о ходе выполнения

Выпущен 21 июля 2025

Исправления ошибок:

  • Исправлена проблема с удалением выбранных копий при отсутствии резервных копий в репозитории. (Рецензирование: Stefan Fercot. Сообщили: Anup Gupta.)

Новые возможности:

  • В вывод команды info добавлен ход восстановления. (Авторы: Denis Garsh, Maxim Michkov. Рецензирование: David Steele.)
  • В вывод команды info добавлен уровень детализации, показывающий только ход выполнения. (Авторы: Denis Garsh. Рецензирование: David Steele, Stefan Fercot.)

Улучшения:

  • Добавлены повторные попытки чтения из объектных хранилищ после сбоя. (Рецензирование: David Christensen.)
  • Исправлены значения по умолчанию в справке командной строки. (Рецензирование: David Christensen, Chris Bandy.)

Улучшения документации:

  • Отдельные допустимые значения параметров теперь описываются списком, где это уместно. (Авторы: Anton Kurochkin. Рецензирование: David Steele.)
  • Исправлено выражение “less than” в справке по параметру archive-mode. (Авторы: Anton Kurochkin. Рецензирование: David Steele.)

Примечания к выпуску v2.55.1

Исправления ошибок

Выпущен 5 мая 2025

Исправления ошибок:

  • Отменено изменение «вычислять content-md5 в S3 только при необходимости». (Рецензирование: David Christensen. Сообщили: Frank Brendel.)
  • Исправлена проверка нижних границ ключей параметров. (Рецензирование: David Christensen, Wolfgang Walther. Сообщили: Wolfgang Walther.)

Примечания к выпуску v2.55.0

Улучшения проверки и поддержка PostgreSQL 18

Выпущен 21 апреля 2025

Исправления ошибок:

  • Исправлена проблема восстановления инкрементных копий на уровне блоков из репозитория, отличного от выбранного по умолчанию. (Рецензирование: David Christensen, Aleksander Łukasz. Сообщили: Aleksander Łukasz.)
  • Для PostgreSQL < 12 больше не задаётся recovery_target_timeline=current. (Рецензирование: Stefan Fercot.)
  • Исправлена запись в журнал диапазона удаляемого архива. (Рецензирование: Stefan Fercot. Сообщили: Aleš Zelený.)
  • Исправлены сообщения об ошибках для запросов без результатов. (Рецензирование: Stefan Fercot. Сообщили: Susantha Bathige.)

Новые возможности:

  • Добавлена проверка целевой временной шкалы восстановления. (Рецензирование: Stefan Fercot.)
  • Добавлена возможность проверки указанной резервной копии. (Авторы: Maxim Michkov. Рецензирование: David Steele.)
  • Добавлена поддержка оплаты запросов инициатором в S3/GCS. (Авторы: Timothée Peignier. Рецензирование: David Steele.)
  • Поддержка PostgreSQL 18. (Рецензирование: Stefan Fercot.)
  • Добавлена возможность соединения с PostgreSQL через абстрактные доменные сокеты. (Рецензирование: Chris Bandy. Предложили: Chris Bandy.)
  • В команду version добавлен числовой вывод. (Авторы: Stefan Fercot. Рецензирование: David Steele.)

Улучшения:

  • Команда резервного копирования теперь может работать с удалёнными репозиториями. (Рецензирование: Stefan Fercot.)
  • Для сжатия данных протокола используется lz4. (Рецензирование: Stefan Fercot.)
  • content-md5 в S3 теперь вычисляется только при необходимости. (Рецензирование: David Christensen.)
  • Добавлено предупреждение при перезаписи значения параметра с несколькими ключами. (Рецензирование: David Christensen, Stefan Fercot.)
  • Добавлена запись пути удалённого архива в журнал на уровне detail. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Удалена поддержка PostgreSQL 9.4. (Рецензирование: Stefan Fercot.)
  • Удалена сборка с помощью autoconf/make. (Рецензирование: David Christensen.)

Улучшения документации:

  • Исправлена документация по заданию нескольких stanza с помощью tls-server-auth. (Рецензирование: David Christensen, Stefan Fercot. Предложили: Terry MacAndrew.)
  • Уточнено удаление инкрементных резервных копий по сроку хранения. (Рецензирование: Stefan Fercot.)
  • Уточнено требование совпадения локальной и удалённой версий pgBackRest. (Авторы: Greg Clough. Рецензирование: David Steele.)
  • В раздел вопросов и ответов добавлен вопрос об экспорте самодостаточного кластера. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Добавлено предостережение о создании табличных пространств при использовании --tablespace-map-all. (Рецензирование: Stefan Fercot, Christophe Courtois. Предложили: Christophe Courtois.)
  • Уточнено поведение --repo-retention-full-type. (Рецензирование: Antoine Beaupré. Предложили: Antoine Beaupré.)
  • Для объектных хранилищ рекомендация использовать --process-max заменена рекомендацией использовать --repo-bundle. (Рецензирование: Stefan Fercot.)
  • unix_socket_directory заменён на unix_socket_directories. (Авторы: hyunkyu han. Рецензирование: David Steele.)
  • Добавлена рекомендация не размещать spool-path внутри pg_xlog/pg_wal. (Рецензирование: Martín Marqués, Don Seiler. Предложили: Martín Marqués.)

Примечания к выпуску v2.54.2

Исправление ошибки

Выпущен 20 января 2025

Исправления ошибок:

  • Исправлена проблема после отключения пакетирования файлов при включённом инкрементном копировании на уровне блоков. (Рецензирование: David Christensen.)

Улучшения документации:

  • Уточнено поведение при использовании нескольких файлов конфигурации. (Рецензирование: Paul Bierly. Предложили: Paul Bierly.)

Примечания к выпуску v2.54.1

Исправление ошибки

Выпущен 16 декабря 2024

Исправления ошибок:

  • Устранены попытки команд version/help загрузить pgbackrest.conf. (Рецензирование: Stefan Fercot. Сообщили: Bradford Boyle, Julian.)

Улучшения набора тестов:

  • Стабилизировано асинхронное архивирование в интеграционных тестах. (Авторы: Viktor Kurilko. Рецензирование: David Steele.)

Примечания к выпуску v2.54.0

Целевое время для хранилищ с версионированием

Выпущен 21 октября 2024

ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Это последний выпуск с новыми возможностями, поддерживающий сборку autoconf/make. Если переход на meson ещё не выполнен, его следует выполнить. Корректирующие выпуски 2.54.X (если они будут) продолжат поддерживать autoconf/make.

Исправления ошибок:

  • Исправлена проблема с производительностью запросов PostgreSQL для больших наборов данных. (Исправление: Thibault Vincent, David Steele. Рецензирование: David Christensen, Antoine Millet. Сообщили: Antoine Millet.)

Новые возможности:

  • Добавлена возможность чтения репозиториев в хранилищах с версионированием на заданный момент времени. (Рецензирование: Stefan Fercot, David Christensen.)
  • Запрошенное резервное копирование с резервного сервера теперь может продолжаться и при отсутствии резервного сервера. (Рецензирование: Stefan Fercot.)

Улучшения:

  • Список ссылок на резервные копии в текстовом выводе команды info теперь представлен в сокращённом виде. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Токен web-id теперь обновляется при каждой аутентификации S3. (Авторы: Brent Graveland. Рецензирование: David Steele.)
  • Исправлено отображение текущих значений индексируемых параметров в справке. (Рецензирование: David Christensen.)
  • backup.info теперь сохраняется только при изменении содержимого. (Рецензирование: Stefan Fercot.)
  • Снято ограничение на параллельное чтение файлов при восстановлении. (Рецензирование: David Christensen.)
  • Улучшены сообщения об ошибках SFTP. (Авторы: Reid Thompson. Рецензирование: David Steele.)

Дополнения к документации:

  • В руководство пользователя добавлен раздел о настройке производительности. (Рецензирование: Stefan Fercot.)

Улучшения документации:

  • Уточнён источник значения data_directory. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Matthias.)
  • Улучшена логика определения случаев, когда краткое описание следует приводить к нижнему регистру. (Предложили: Daniel Westermann.)

Примечания к выпуску v2.53.1

Поддержка PostgreSQL 17

Выпущен 19 августа 2024

Исправления ошибок:

  • Исправлены права доступа при запуске restore от имени root. (Рецензирование: Stefan Fercot. Сообщили: Will M.)
  • Исправлено нарушение сегментации при отложенных ошибках соединения. (Рецензирование: David Christensen. Сообщили: Anton Glushakov.)
  • Для SFTP пропускается проверка дублирования локального репозитория. (Исправление: Reid Thompson. Рецензирование: David Steele. Сообщили: Anton Kurochkin.)

Улучшения:

  • Поддержка PostgreSQL 17.

Примечания к выпуску v2.53

Одновременное резервное копирование

Выпущен 22 июля 2024

ВАЖНОЕ ПРИМЕЧАНИЕ: Значение по умолчанию параметра log-level-stderr изменено с warn на off. Это упрощает перехват ошибок при перенаправлении только stdout. Чтобы сохранить прежнее поведение, задайте log-level-stderr=warn. ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Для сборки с помощью meson теперь требуется библиотека lz4. ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Для сборки с помощью meson теперь требуется поддержка __builtin_clzl() и __builtin_bswap64() в компиляторе.

Исправления ошибок:

  • Исправлен сбой переименования по SFTP, если файл уже существует. (Исправление: Reid Thompson. Рецензирование: David Steele. Сообщили: ahmed112212.)

Новые возможности:

  • Добавлена возможность одновременного резервного копирования в разные репозитории. (Рецензирование: Reid Thompson, Stefan Fercot.)
  • Добавлена поддержка SAN с IP-адресами при проверке сертификатов TLS. (Авторы: David Christensen. Рецензирование: David Steele.)

Улучшения:

  • Значением по умолчанию параметра log-level-stderr стало off. (Рецензирование: Greg Sabino Mullane, Stefan Fercot.)
  • Добавлена поддержка альтернативных размеров сегмента WAL для PostgreSQL ≤ 10. (Авторы: Viktor Kurilko. Рецензирование: David Steele.)
  • Добавлена подсказка о проверке журнала авторизации SFTP. (Авторы: Vitalii Zurian. Рецензирование: Reid Thompson, David Steele.)

Улучшения документации:

  • Уточнено поведение archive-push при использовании нескольких репозиториев. (Рецензирование: Stefan Fercot.)

Примечания к выпуску v2.52.1

Исправление ошибки

Выпущен 25 июня 2024

Исправления ошибок:

  • Исправлена проблема с файлами, размер которых на реплике больше, чем на первичном сервере. (Рецензирование: Stefan Fercot. Сообщили: Nicolas Lassimonne.)

Примечания к выпуску v2.52

Поддержка PostgreSQL 17beta1

Выпущен 27 мая 2024

ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Системой сборки pgBackRest теперь является meson. Сборка autoconf/make больше не получит новых возможностей и будет удалена через несколько выпусков.

Новые возможности:

  • Добавлена поддержка пакетного удаления в GCS. (Рецензирование: Reid Thompson.)
  • Поддержка шифрования S3 SSE-C. (Рецензирование: Tim Jones. Предложили: Tim Jones.)
  • Поддержка PostgreSQL 17beta1. (Рецензирование: Stefan Fercot.)

Улучшения:

  • Добавлена возможность явного отключения необязательных зависимостей при сборке meson. (Авторы: Michael Schout. Рецензирование: David Steele.)
  • Добавлен динамический поиск python при сборке meson. (Авторы: Michael Schout. Рецензирование: David Steele.)
  • Цель сборки pgbackrest в meson помечена как устанавливаемая. (Авторы: Bradford Boyle. Рецензирование: David Steele.)

Улучшения документации:

  • Документация start/stop приведена в соответствие с фактическим поведением. (Рецензирование: Stefan Fercot.)

Примечания к выпуску v2.51

Система сборки Meson

Выпущен 25 марта 2024

Исправления ошибок:

  • При дельта-восстановлении инкрементных копий на уровне блоков пропускаются файлы нулевой длины. (Рецензирование: Sebastian Krause, René Højbjerg Larsen. Сообщили: Sebastian Krause.)
  • Исправлена регрессия производительности получения списка объектов хранилища. (Рецензирование: Stephen Frost. Сообщили: Maksym Boguk.)
  • Исправлена запись хода выполнения в журнал при изменении размера файла во время резервного копирования. (Рецензирование: Stephen Frost. Сообщили: samkingno.)

Улучшения:

  • Улучшена поддержка соединений с двойным стеком протоколов. (Рецензирование: Stephen Frost. Предложили: Timothée Peignier.)
  • Основной системой сборки стала meson. (Рецензирование: Stephen Frost.)
  • Добавлено обнаружение неизменившихся файлов при инкрементном резервном копировании без дельта-режима. (Рецензирование: Stephen Frost.)
  • Предотвращено некорректное восстановление при удалении backup_label. (Рецензирование: Stephen Frost.)
  • Улучшена обработка очереди сегментов WAL командой archive-push. (Рецензирование: Stephen Frost.)
  • Возобновление ограничено полными резервными копиями. (Рецензирование: Stephen Frost, Stefan Fercot.)
  • Возобновление адаптировано для инкрементного копирования на уровне блоков. (Рецензирование: Stephen Frost.)
  • Для вывода версии и справки теперь допускаются --version и --help. (Рецензирование: Greg Sabino Mullane. Предложили: Greg Sabino Mullane.)
  • В сборку autoconf/make добавлена подробная трассировка стека. (Рецензирование: Stephen Frost.)

Улучшения документации:

  • Обновлены упоминания recovery.conf. (Рецензирование: Stefan Fercot. Предложили: Stephen Frost.)

Примечания к выпуску v2.50

Улучшения производительности и исправления ошибок

Выпущен 22 января 2024

Исправления ошибок:

  • Исправлено неполное чтение при восстановлении инкрементных копий на уровне блоков. (Рецензирование: Stephen Frost, Brent Graveland. Сообщили: Adol Rodriguez, Brent Graveland.)
  • Исправлено переполнение, из-за которого ход резервного копирования не отображался в выводе info. (Исправление: Robert Donovan. Рецензирование: Joe Wildish.)

Улучшения:

  • При дельта-восстановлении инкрементных копий на уровне блоков сохраняются частичные файлы. (Рецензирование: Stephen Frost.)
  • Добавлена поддержка альтернативных размеров страниц, задаваемых при компиляции. (Авторы: Viktor Kurilko. Рецензирование: David Steele.)
  • При пакетировании пропускаются файлы, усечённые во время резервного копирования. (Авторы: Georgy Shelkovy. Рецензирование: David Steele.)
  • Улучшены сообщения об ошибках хранилища SFTP. (Авторы: Reid Thompson. Рецензирование: David Steele.)

Примечания к выпуску v2.49

Удаление поддержки PostgreSQL 9.3

Выпущен 27 ноября 2023

Исправления ошибок:

  • Исправлена регрессия повторных попыток. (Рецензирование: Stephen Frost. Сообщили: Norman Adkins, Tanel Suurhans, Jordan English, Timothée Peignier.)
  • Исправлено рекурсивное удаление каталогов в драйвере хранилища SFTP. (Исправление: Reid Thompson. Рецензирование: Stephen Frost. Сообщили: Luc.)

Улучшения:

  • Удалена поддержка PostgreSQL 9.3. (Рецензирование: Stephen Frost.)

Дополнения к документации:

  • Документированы параметры для сопровождающих. (Рецензирование: Stefan Fercot.)
  • Обновлена документация по восстановлению на заданный момент времени для PostgreSQL >= 13.

Улучшения набора тестов:

  • Модульный тест config/load теперь можно запускать без установленной libssh2. (Авторы: Reid Thompson. Рецензирование: David Steele. Предложили: Wu Ning.)

Примечания к выпуску v2.48

Метки объектов хранилища репозитория

Выпущен 25 сентября 2023

Исправления ошибок:

  • Исправлена проблема восстановления инкрементных копий на уровне блоков без списка блоков. (Рецензирование: Stephen Frost, Burak Yurdakul. Сообщили: Burak Yurdakul.)

Новые возможности:

  • Добавлен параметр --repo-storage-tag для создания меток объектов. (Рецензирование: Stephen Frost, Stefan Fercot, Timothée Peignier.)
  • В драйвер хранилища SFTP добавлена проверка известных серверов. (Авторы: Reid Thompson. Рецензирование: Stephen Frost, David Steele.)
  • Поддержка соединений с двойным стеком протоколов. (Рецензирование: Stephen Frost.)
  • В вывод JSON команды info добавлены обработанный и полный размеры резервной копии. (Авторы: Stefan Fercot. Рецензирование: David Steele.)

Улучшения:

  • Команда check теперь поддерживает несколько stanza. (Рецензирование: Stephen Frost.)
  • Чтение pg_control повторяется до получения верной контрольной суммы. (Рецензирование: Stefan Fercot, Stephen Frost.)
  • Оптимизирована проверка сегментов WAL после успешного резервного копирования. (Рецензирование: Stephen Frost.)
  • Улучшена производительность операций с передачей данных частями в GCS. (Рецензирование: Reid Thompson.)
  • Команду archive-get теперь можно запускать для остановленной stanza. (Рецензирование: Tom Swartz, David Christensen, Reid Thompson.)
  • В начале путей к открытому и закрытому ключам SFTP теперь допускается тильда. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Учётные данные GCS перечитываются перед обновлением токена аутентификации. (Рецензирование: Stephen Frost. Предложили: Daniel Farina.)

Исправления ошибок в документации:

  • Исправлен пример параметра tls-server-address в справочнике конфигурации. (Исправление: Hartmut Goebel. Рецензирование: David Steele.)
  • Исправлен пример параметра filter в справочнике команд.

Улучшения набора тестов:

  • Модульный тест storage/sftp теперь можно запускать без установленной libssh2. (Авторы: Reid Thompson. Рецензирование: David Steele. Предложили: Wu Ning.)

Примечания к выпуску v2.47

Улучшения производительности и исправления ошибок

Выпущен 24 июля 2023

Исправления ошибок:

  • При дельта-копировании в манифесте сохраняются сведения об инкрементном копировании на уровне блоков. (Рецензирование: Stephen Frost. Сообщили: Francisco Miguel Biete Banon.)
  • Исправлены имена файлов инкрементного копирования на уровне блоков в команде verify. (Рецензирование: Reid Thompson. Сообщили: Francisco Miguel Biete Banon.)
  • Исправлено необоснованное автоматическое включение дельта-копирования при копировании с резервного сервера. (Рецензирование: Stephen Frost. Сообщили: krmozejko, Don Seiler.)
  • При восстановлении с type=none для PostgreSQL >= 12 пропускается recovery.signal. (Рецензирование: Stefan Fercot. Сообщили: T.Anastacio.)
  • Исправлено создание уникальной метки дифференциальной или инкрементной резервной копии. (Исправление: Andrey Sokolov. Рецензирование: David Steele.)
  • Исправлено удаление архива по времени, когда резервные копии не удаляются. (Рецензирование: Stefan Fercot.)

Улучшения:

  • Улучшена производительность драйвера хранилища SFTP. (Авторы: Stephen Frost, Reid Thompson. Рецензирование: David Steele.)
  • В вывод даты и времени команды info добавлено смещение часового пояса. (Рецензирование: Stefan Fercot, Philip Hurst. Предложили: Philip Hurst.)
  • Централизована обработка ошибок неподдерживаемых возможностей. (Рецензирование: Stefan Fercot.)

Улучшения документации:

  • В руководстве пользователя уточнена предпочтительность установки из пакетов. (Рецензирование: Stefan Fercot. Предложили: dr-kd.)

Примечания к выпуску v2.46

Инкрементное копирование на уровне блоков и хранилище SFTP

Выпущен 22 мая 2023

Новые возможности:

  • Инкрементное резервное копирование на уровне блоков. (Рецензирование: John Morris, Stephen Frost, Stefan Fercot.)
  • Поддержка SFTP для хранилища репозитория. (Авторы: Reid Thompson. Рецензирование: Stephen Frost, David Steele.)
  • Поддержка PostgreSQL 16. (Рецензирование: Stefan Fercot.)

Улучшения:

  • Добавлена возможность пропуска проверок заголовков страниц. (Рецензирование: David Christensen. Предложили: David Christensen.)
  • При восстановлении больше не вызывается chown() для файлов восстановления. (Рецензирование: Stefan Fercot, Marcelo Henrique Neppel. Предложили: Marcelo Henrique Neppel.)
  • Добавлена подробная информация о повторных попытках после ошибок HTTP.

Улучшения документации:

  • Добавлено предупреждение об использовании восстановления с type=none. (Рецензирование: Stefan Fercot.)
  • Добавлено примечание о запуске stanza-create для уже созданных репозиториев.

Примечания к выпуску v2.45

Инкрементное резервное копирование на уровне блоков (BETA)

Выпущен 20 марта 2023

Исправления ошибок:

  • При восстановлении резервных копий остановленного кластера запись recovery.signal по умолчанию пропускается. (Рецензирование: Stefan Fercot. Сообщили: Marcel Borger.)

Новые возможности:

  • Инкрементное резервное копирование на уровне блоков (BETA). (Рецензирование: John Morris, Stephen Frost, Stefan Fercot.)

Улучшения:

  • Сохраняется только один индекс группы со всеми значениями по умолчанию. (Рецензирование: Stefan Fercot.)

Улучшения документации:

  • Добавлены явные инструкции по обновлению между версиями 2.x. (Авторы: Christophe Courtois. Рецензирование: David Steele.)
  • Удалены упоминания SSH, утратившие актуальность после появления TLS.

Примечания к выпуску v2.44

Удаление поддержки PostgreSQL 9.0/9.1/9.2

Выпущен 30 января 2023

Улучшения:

  • Удалена поддержка PostgreSQL 9.0/9.1/9.2. (Рецензирование: Stefan Fercot.)
  • Восстановление теперь выдаёт ошибку, если ни одна резервная копия не соответствует текущей версии PostgreSQL. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Soulou.)
  • Добавлена проверка диапазона compress-level для каждого compress-type. (Рецензирование: Stefan Fercot. Предложили: gkleen, ViperRu.)

Улучшения документации:

  • Добавлено предупреждение о включении «иерархического пространства имён» в хранилище Azure. (Рецензирование: Stefan Fercot. Предложили: Vojtech Galda, Pluggi, asjonos.)
  • В пример мониторинга добавлена замена переводов строк. (Рецензирование: Stefan Fercot. Предложили: rudonx, gmustdie, Ivan Shelestov.)
  • Уточнено поведение target-action в различных версиях PostgreSQL. (Авторы: Chris Bandy. Рецензирование: David Steele, Anton Kurochkin, Stefan Fercot. Предложили: Anton Kurochkin, Chris Bandy.)
  • Обновлена и уточнена главная страница. (Рецензирование: Stefan Fercot.)
  • На сайт добавлена тёмная тема. (Предложили: Stephen Frost.)

Примечания к выпуску v2.43

Исправление ошибки

Выпущен 28 ноября 2022

Исправления ошибок:

  • Исправлено отсутствие ссылки на предыдущую копию в дифференциальной или инкрементной резервной копии. (Рецензирование: Stefan Fercot. Сообщили: Marcel Borger, ulfedf, jaymefSO.)

Улучшения:

  • Добавлена подсказка при задании параметра без индекса. (Рецензирование: Stefan Fercot.)

Примечания к выпуску v2.42

Исправления ошибок

Выпущен 22 ноября 2022

Исправления ошибок:

  • Исправлена утечка памяти при backup/restore с пакетированием файлов. (Рецензирование: John Morris, Oscar. Сообщили: Oscar.)
  • Исправлена ошибка протокола при неполном чтении удалённого файла. (Рецензирование: Stephen Frost.)

Улучшения:

  • При пакетировании больше не сохраняются ссылки для файлов нулевой длины. (Рецензирование: Stefan Fercot.)
  • Для pg_start_backup()/pg_stop_backup() используются более общие описания. (Рецензирование: Greg Sabino Mullane, David Christensen. Предложили: Greg Sabino Mullane.)

Улучшения набора тестов:

  • Параметр --psql-bin в test.pl приведён в соответствие со справкой командной строки. (Авторы: Koshi Shibagaki. Рецензирование: David Steele.)

Примечания к выпуску v2.41

Аннотации резервных копий

Выпущен 19 сентября 2022

Исправления ошибок:

  • Исправлен неверный срок удаления, применявшийся к репозиториям, отличным от выбранного по умолчанию. (Рецензирование: Stefan Fercot. Сообщили: Adam Brusselback.)
  • Исправлена проблема рекурсивного получения списка каталогов с фильтром. (Рецензирование: Stephen Frost. Сообщили: Efremov Egor.)

Новые возможности:

  • Аннотации резервных копий в виде пар «ключ — значение». (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Adam Berlin.)

Улучшения:

  • Добавлена поддержка --set в выводе JSON команды info. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Anton Kurochkin.)
  • Добавлена возможность настройки размера загружаемых частей для объектных хранилищ. (Рецензирование: Stefan Fercot. Предложили: Anton Glushakov.)
  • Временные метки archive.info обновляются после успешного резервного копирования. (Рецензирование: Stefan Fercot. Предложили: Alex Richman.)
  • Проверка временной шкалы резервного сервера перенесена на этап после контрольной точки. (Рецензирование: Stefan Fercot, Keith Fiske. Предложили: Keith Fiske.)
  • Улучшено предупреждение при возобновлении резервного копирования. (Предложили: Cynthia Shang.)

Улучшения документации:

  • В pgbackrest.service добавлен абсолютный путь к kill. (Предложили: Don Seiler.)

Примечания к выпуску v2.40

Поддержка OpenSSL 3

Выпущен 18 июля 2022

ПРИМЕЧАНИЕ ДЛЯ СОПРОВОЖДАЮЩИХ ПАКЕТОВ: Добавлена экспериментальная сборка с помощью meson, но сопровождающим пакетов в обозримом будущем следует продолжать использовать autoconf/make.

Улучшения:

  • Поддержка OpenSSL 3. (Рецензирование: Stephen Frost.)
  • При получении списка содержимого каталога создаётся снимок. (Рецензирование: John Morris, Stephen Frost.)
  • При восстановлении с type=immediate принудительно задаётся target-timeline=current. (Рецензирование: Stephen Frost.)
  • При дельта-восстановлении restore файлы усекаются, если их размер превышает ожидаемый. (Рецензирование: Stephen Frost.)
  • При resume=n отключено промежуточное сохранение манифеста. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Перед началом копирования процент выполнения резервного копирования устанавливается в ноль. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Для определения продолжения списка S3 используется флаг IsTruncated. (Рецензирование: John Morris, Soulou. Предложили: Christian Montagne.)

Исправления ошибок в документации:

  • В справочнике конфигурации пропускаются внутренние параметры. (Сообщили: Francisco Miguel Biete Banon.)

Улучшения документации:

  • В раздел о сервере репозитория добавлена ссылка на конфигурацию PostgreSQL. (Рецензирование: Stefan Fercot. Предложили: Julien Cigar.)

Улучшения набора тестов:

  • Добавлена экспериментальная сборка Meson. (Рецензирование: Eli Schwartz, Sam Bassaly.)
  • В параметр --test-path теперь можно передать любой путь. (Авторы: Andrey Sokolov. Рецензирование: David Steele.)
  • Исправлена ошибка компиляции, когда DEBUG_EXEC_TIME определён без DEBUG. (Авторы: Andrey Sokolov. Рецензирование: David Steele.)

Примечания к выпуску v2.39

Проверка и пакетирование файлов

Выпущен 16 мая 2022

Исправления ошибок:

  • Исправлен бесконечный цикл при выдаче ошибки из FINALLY(). (Рецензирование: Stephen Frost.)
  • При любых сбоях блокировки, кроме удержания блокировки другим процессом, теперь выдаётся ошибка. (Рецензирование: Reid Thompson, Geir Råness. Сообщили: Geir Råness.)

Новые возможности:

  • Добавлено пакетирование файлов резервной копии для улучшения работы с небольшими файлами. (Рецензирование: Reid Thompson, Stefan Fercot, Chris Bandy.)
  • Добавлена команда verify для проверки содержимого репозитория. (Авторы: Cynthia Shang, Reid Thompson. Рецензирование: David Steele, Stefan Fercot.)
  • Поддержка PostgreSQL 15. (Рецензирование: Stefan Fercot.)
  • В выводе info отображается процент выполнения резервного копирования. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Добавлен автоматический выбор резервной копии для команды restore с --type=lsn. (Авторы: Reid Thompson. Рецензирование: Stefan Fercot, David Steele.)
  • При отключённом archive-mode-check подавляется предупреждение о существующем WAL. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Добавлена поддержка AWS IMDSv2. (Авторы: Nuno Pires. Рецензирование: David Steele.)

Улучшения:

  • Параметр repo-hardlink теперь можно изменять после полного резервного копирования. (Рецензирование: Reid Thompson.)
  • Повышена точность записи процента выполнения в журнал для backup и restore. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Улучшена проверка путей для команд repo-*. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Команда stop улучшена для учёта параметра stanza. (Авторы: Reid Thompson. Рецензирование: David Steele. Предложили: ragaoua.)
  • Улучшено сообщение об ошибке для неверного repo-azure-key. (Авторы: Reid Thompson. Рецензирование: David Steele. Предложили: Seth Daniel.)
  • При асинхронной ошибке archive-get/archive-push добавлена подсказка о проверке журнала. (Рецензирование: Reid Thompson.)
  • Добавлена ошибка ClockError при неожиданном расхождении часов и изменении часового пояса. (Рецензирование: Greg Sabino Mullane, Stefan Fercot. Предложили: Greg Sabino Mullane.)
  • Перед выводом в сообщении об ошибке из имени исторического манифеста удаляются расширения. (Рецензирование: Stefan Fercot.)
  • В ошибку прав доступа к блокировке добавлены пользователь и группа в формате user:group. (Рецензирование: Reid Thompson.)

Исправления ошибок в документации:

  • В руководстве пользователя исправлено неверное упоминание stanza-update. (Исправление: Abubakar Mohammed. Рецензирование: David Steele.)
  • Исправлен пример параметра repo-gcs-key-type в справочнике конфигурации. (Рецензирование: Reid Thompson.)
  • Исправлен пример tls-server-auth и добавлены пояснения. (Рецензирование: Reid Thompson.)

Улучшения документации:

  • Упрощены формулировки о поддерживаемых версиях в документации. (Рецензирование: Stefan Fercot, Reid Thompson, Greg Sabino Mullane.)
  • Добавлены описания типов параметров. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • В раздел вопросов и ответов добавлен вопрос о типах резервных копий и скорости восстановления. (Авторы: David Christensen. Рецензирование: Reid Thompson.)
  • Документирована требуемая базовая ветка для запросов на включение изменений. (Авторы: David Christensen. Рецензирование: Reid Thompson.)

Примечания к выпуску v2.38

Небольшие исправления ошибок и улучшения

Выпущен 6 марта 2022

ВАЖНОЕ ПРИМЕЧАНИЕ: Размер репозитория, сообщаемый командой info, теперь полностью основан на объёме данных, записанных pgBackRest в хранилище. Ранее в некоторых случаях pgBackRest мог определить, применялось ли хранилищем дополнительное сжатие, но теперь это больше не поддерживается.

Исправления ошибок:

  • При ошибках пакетного удаления файлов S3 добавлены повторные попытки. (Рецензирование: Reid Thompson. Сообщили: Alex Richman.)
  • Добавлено сопоставление значений заголовка HTTP connection без учёта регистра. (Рецензирование: Reid Thompson. Сообщили: Rémi Vidier.)

Новые возможности:

  • Добавлена поддержка шифрования на стороне сервера AWS S3 с использованием KMS. (Авторы: Christoph Berg. Рецензирование: David Steele, Tharindu Amila.)
  • Добавлен параметр archive-missing-retry. (Рецензирование: Stefan Fercot.)
  • В команду info добавлен фильтр по типу резервной копии. (Авторы: Stefan Fercot. Рецензирование: David Steele.)

Улучшения:

  • При сбое проверки страницы во время backup добавлена повторная попытка. (Рецензирование: Stephen Frost, David Christensen.)
  • Добавлена обработка серверов TLS, некорректно закрывающих соединения. (Рецензирование: Rémi Vidier, David Christensen, Stephen Frost.)
  • В вывод команды info добавлены LSN резервных копий. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Завершающие косые черты автоматически удаляются из путей repo-ls. (Авторы: David Christensen. Рецензирование: David Steele.)
  • После фатальных ошибок повторные попытки больше не выполняются. (Рецензирование: Reid Thompson.)
  • Удалена поддержка PostgreSQL 8.3/8.4. (Рецензирование: Reid Thompson, Stefan Fercot.)
  • Удалена логика определения дополнительного сжатия файловой системой. (Рецензирование: Reid Thompson, Stefan Fercot.)

Исправления ошибок в документации:

  • В документации TLS параметры repo перенесены в секцию global. (Сообщили: Anton Kurochkin.)
  • Неиспользуемый параметр backup-standby удалён из команд stanza. (Сообщили: Stefan Fercot.)
  • Исправлены опечатки в справке и примечаниях к выпускам. (Исправление: Daniel Gustafsson. Рецензирование: David Steele.)

Улучшения документации:

  • В конфигурацию службы systemd добавлена проверка активности. (Предложили: Yogesh Sharma.)
  • В раздел вопросов и ответов добавлено объяснение суффикса архива WAL. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Добавлено примечание о том, что слоты репликации не восстанавливаются. (Авторы: Reid Thompson. Рецензирование: David Steele, Stefan Fercot. Предложили: Christophe Courtois.)

Примечания к выпуску v2.37

Сервер TLS

Выпущен 3 января 2022

ВАЖНОЕ ПРИМЕЧАНИЕ: Если команда restore не может найти резервную копию, соответствующую указанному целевому времени, теперь выдаётся ошибка; ранее в журнал записывалось предупреждение.

Исправления ошибок:

  • Исправлено переназначение ссылок при дельта-восстановлении restore, когда каталог или файл уже существует. (Рецензирование: Reid Thompson. Сообщили: Younes Alhroub.)
  • Исправлена утечка сокетов при повторных попытках соединения. (Рецензирование: Reid Thompson. Сообщили: James Coleman.)

Новые возможности:

  • Добавлен сервер TLS. (Рецензирование: Stephen Frost, Reid Thompson, Andrew L’Ecuyer.)
  • Добавлен параметр --cmd. (Авторы: Reid Thompson. Рецензирование: Stefan Fercot, David Steele. Предложили: Virgile CREVON.)

Улучшения:

  • Архив теперь проверяется сразу после начала резервного копирования. (Рецензирование: Reid Thompson, David Christensen.)
  • В резервное копирование добавлены проверки временной шкалы и контрольной точки. (Рецензирование: Stefan Fercot, Reid Thompson.)
  • Во время резервного копирования проверяются доступность и корректность конфигурации кластеров. (Рецензирование: Stefan Fercot.)
  • Если restore не может найти резервную копию, соответствующую целевому времени, выдаётся ошибка. (Рецензирование: Reid Thompson, Douglas J Hunley. Предложили: Douglas J Hunley.)
  • Добавлен разбор протокола и порта в конечных точках S3/Azure. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Добавлено предупреждение, если checkpoint_timeout превышает db-timeout. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • В вывод ошибок HTTP добавлен метод запроса. (Авторы: Christoph Berg. Рецензирование: David Steele.)
  • Для логических параметров командной строки теперь допускаются аргументы y/n. (Авторы: Reid Thompson. Рецензирование: David Steele.)
  • Размер резервной копии в журнале теперь в точности совпадает с выводом команды info. (Авторы: Reid Thompson. Рецензирование: David Steele. Предложили: Mahomed Hussein.)

Улучшения документации:

  • Значения по умолчанию и допустимые значения параметров размера отображаются с соответствующими единицами. (Рецензирование: Reid Thompson.)
  • Исправлены опечатки и улучшена документация параметра tablespace-map-all. (Рецензирование: Reid Thompson. Предложили: Reid Thompson.)
  • Удалено устаревшее утверждение о будущей поддержке нескольких репозиториев. (Предложили: David Christensen.)

Примечания к выпуску v2.36

Небольшие исправления ошибок и улучшения

Выпущен 1 ноября 2021

Исправления ошибок:

  • В качестве префикса stanza разрешён “global”. (Рецензирование: Stefan Fercot. Сообщили: Younes Alhroub.)
  • Исправлено нарушение сегментации при неверном файле ключа GCS. (Рецензирование: Stephen Frost. Сообщили: Henrik Feldt.)

Улучшения:

  • Параметр link-map теперь позволяет создавать новые ссылки. (Рецензирование: Don Seiler, Stefan Fercot, Chris Bandy. Предложили: Don Seiler.)
  • Максимально допустимый индекс параметров pg/repo увеличен до 256. (Рецензирование: Cynthia Shang.)
  • Добавлена аутентификация WebIdentity для AWS S3. (Рецензирование: James Callahan, Reid Thompson, Benjamin Blattberg, Andrew L’Ecuyer.)
  • Ошибки проверки файлов резервной копии теперь отражаются в backup.info. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • В журнал восстановления резервной копии работающего кластера добавлено время начала восстановления. (Рецензирование: Tom Swartz, Stefan Fercot. Предложили: Tom Swartz.)
  • При сбое локальной задачи сообщаются исходная ошибка и повторные попытки. (Рецензирование: Stefan Fercot.)
  • В текстовом выводе info ошибка контрольной суммы страницы переименована в список ошибок. (Рецензирование: Stefan Fercot.)
  • В сообщение о тайм-ауте воспроизведения на резервном сервере добавлены подсказки. (Рецензирование: Cynthia Shang, Stefan Fercot. Предложили: Leigh Downs.)

Примечания к выпуску v2.35

Двоичный протокол

Выпущен 23 августа 2021

ВАЖНОЕ ПРИМЕЧАНИЕ: Уровень записи в журнал сведений о скопированных файлах в командах backup/restore изменён на detail. Это сокращает объём сообщений на уровне info; если эти сообщения нужны, следует установить для команд backup/restore уровень журнала detail

Исправления ошибок:

  • Добавлено обнаружение ошибок при завершении загрузки частями в S3. (Рецензирование: Cynthia Shang, Marco Montagna. Сообщили: Marco Montagna, Lev Kokotov, Anderson A. Mallmann.)
  • Исправлено обнаружение циклических символических ссылок. (Рецензирование: Stefan Fercot. Сообщили: Rohit Raveendran.)
  • Удалённому процессу передаются только выбранные параметры repo. (Рецензирование: David Christensen, Cynthia Shang. Сообщили: Greg Sabino Mullane, David Christensen.)

Улучшения:

  • Двоичный протокол. (Рецензирование: Cynthia Shang.)
  • При restore автоматически создаётся каталог данных. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Chris Bandy.)
  • Добавлена поддержка restore с --type=lsn. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang. Предложили: James Coleman.)
  • Уровень записи сведений о скопированных файлах backup/restore изменён на detail. (Рецензирование: Stefan Fercot. Предложили: Jens Wilke.)
  • Добавлен цикл ожидания, пока LSN контрольной точки не достигнет LSN воспроизведения. (Авторы: Stefan Fercot. Рецензирование: David Steele. Предложили: Fatih Mencutekin.)
  • В журнал записываются общее число файлов для backup, а также общий размер и число файлов для restore. (Рецензирование: Cynthia Shang.)

Исправления ошибок в документации:

  • В руководстве пользователя исправлены неверные имена серверов. (Рецензирование: Stefan Fercot. Сообщили: Greg Sabino Mullane.)

Улучшения документации:

  • Обновлена документация для участников разработки и добавлен шаблон запроса на включение изменений. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Изменён порядок изложения резервного копирования в руководстве пользователя. (Рецензирование: Cynthia Shang.)
  • В справочнике команд уточнено поведение restore с --type. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Исправлены опечатки в документации и комментариях. (Авторы: Eric Radman. Рецензирование: David Steele.)

Улучшения набора тестов:

  • Добавлена проверка расположения тестового каталога внутри каталога репозитория. (Рецензирование: Greg Sabino Mullane. Предложили: Greg Sabino Mullane.)
  • Добавлен статический анализ кода CodeQL. (Рецензирование: Cynthia Shang.)
  • Тесты обновлены для использования стандартных шаблонов. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.34

Поддержка PostgreSQL 14

Выпущен 7 июня 2021

Исправления ошибок:

  • Исправлены проблемы с файлами очереди, оставшимися от предыдущего restore. (Рецензирование: Cynthia Shang, Stefan Fercot, Floris van Nee. Сообщили: Floris van Nee.)
  • Исправлена проблема проверки ссылок при большом числе табличных пространств. (Рецензирование: Cynthia Shang, Avinash Vallarapu. Сообщили: Avinash Vallarapu.)
  • Удалённые процессы, которые больше не нужны, освобождаются, чтобы избежать их тайм-аутов во время restore. (Рецензирование: Cynthia Shang. Сообщили: Francisco Miguel Biete Banon.)
  • Исправлена команда help для случая, когда существующий параметр недопустим для указанной команды. (Рецензирование: Stefan Fercot. Сообщили: Cynthia Shang.)

Новые возможности:

  • Добавлена поддержка PostgreSQL 14. (Рецензирование: Cynthia Shang.)
  • Добавлена автоматическая аутентификация GCS для экземпляров GCE. (Рецензирование: Jan Wieck, Daniel Farina.)
  • Добавлен параметр repo-retention-history для удаления истории резервного копирования по сроку хранения. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang, David Steele.)
  • Добавлен параметр db-exclude. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang.)

Улучшения:

  • Уровень записи удаления архива в журнал изменён с detail на info. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • При restore удаляется каталог очереди архива stanza. (Рецензирование: Cynthia Shang, Stefan Fercot.)
  • При копировании в ходе backup больше не выполняются атомарная запись файлов и синхронизация каталогов. (Рецензирование: Stephen Frost, Stefan Fercot, Cynthia Shang.)

Улучшения документации:

  • Обновлена документация для участников разработки. (Авторы: Cynthia Shang. Рецензирование: David Steele, Stefan Fercot.)
  • Руководство пользователя RHEL/CentOS объединено в один документ. (Рецензирование: Cynthia Shang.)
  • Уточнено, что repo-s3-role не является ARN. (Авторы: Isaac Yuen. Рецензирование: David Steele.)

Примечания к выпуску v2.33

Поддержка нескольких репозиториев и GCS

Выпущен 5 апреля 2021

Исправления ошибок:

  • Исправлены предупреждения о параметрах, нарушавшие работу асинхронных archive-get/archive-push. (Рецензирование: Cynthia Shang. Сообщили: Lev Kokotov.)
  • Исправлена утечка памяти при копировании архива во время резервного копирования. (Рецензирование: Cynthia Shang. Сообщили: Christian ROUX, Efremov Egor.)
  • Исправлено переполнение стека при генерации парольной фразы шифрования. (Рецензирование: Cynthia Shang. Сообщили: bsiara.)
  • Исправлена работа repo-ls с / в репозиториях S3. (Рецензирование: Cynthia Shang. Сообщили: Lesovsky Alexey.)

Новые возможности:

  • Поддержка нескольких репозиториев. (Авторы: Cynthia Shang, David Steele. Рецензирование: Stefan Fercot, Stephen Frost.)
  • Поддержка GCS для хранилища репозитория. (Рецензирование: Cynthia Shang, Daniel Farina.)
  • Добавлен параметр archive-header-check. (Рецензирование: Stephen Frost, Cynthia Shang. Предложили: Hans-Jürgen Schönig.)

Улучшения:

  • При выборочном восстановлении включаются повторно созданные системные базы данных. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang.)
  • content-length исключён из подписываемых заголовков S3. (Рецензирование: Cynthia Shang. Предложили: Brian P Bockelman.)
  • Объединены редко используемые параметры хранилища репозитория. (Рецензирование: Cynthia Shang.)
  • Добавлена возможность задать собственное значение по умолчанию config-path через ./configure --with-configdir. (Авторы: Michael Schout. Рецензирование: David Steele.)
  • При backup копирование архива записывается в журнал. (Рецензирование: Cynthia Shang, Stefan Fercot.)

Улучшения документации:

  • В справочник добавлены ссылки на примеры из руководства пользователя. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • В документацию выборочного восстановления добавлены предостережения. (Рецензирование: Cynthia Shang, Stefan Fercot.)
  • В документацию archive-copy добавлено пояснение о compress-type. (Рецензирование: Cynthia Shang, Stefan Fercot.)
  • Добавлены значения по умолчанию compress-level для каждого значения compress-type. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлено примечание о том, что необходимые настройки NFS совпадают с настройками для PostgreSQL. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.32

Команды работы с репозиторием

Выпущен 8 февраля 2021

Исправления ошибок:

  • Исправлено возобновление после частичного удаления резервной копии предыдущей попыткой возобновления. (Рецензирование: Cynthia Shang. Сообщили: Tom Swartz.)

Новые возможности:

  • Добавлена команда repo-ls. (Рецензирование: Cynthia Shang, Stefan Fercot.)
  • Добавлена команда repo-get. (Авторы: Stefan Fercot, David Steele. Рецензирование: Cynthia Shang.)
  • Добавлен параметр archive-mode-check. (Авторы: Stefan Fercot. Рецензирование: David Steele, Michael Banck.)

Улучшения:

  • Улучшена производительность archive-get. (Рецензирование: Cynthia Shang.)

Улучшения документации:

  • Улучшена документация команды expire. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.31

Небольшие исправления ошибок и улучшения

Выпущен 7 декабря 2020

Исправления ошибок:

  • В начале имён баз данных теперь допускаются [, # и пробел (space). (Рецензирование: Stefan Fercot, Cynthia Shang. Сообщили: Jefferson Alexandre.)
  • standby.signal теперь создаётся только в PostgreSQL 12 при типе restore, равном standby. (Исправление: Stefan Fercot. Рецензирование: David Steele. Сообщили: Keith Fiske.)

Новые возможности:

  • Добавлено удаление файлов истории по сроку хранения. (Авторы: Stefan Fercot. Рецензирование: David Steele.)
  • Ошибки контрольных сумм страниц отражаются в выводе text команды info. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang.)
  • Добавлен параметр repo-azure-endpoint. (Рецензирование: Cynthia Shang, Brian Peterson. Предложили: Brian Peterson.)
  • Добавлен параметр pg-database. (Рецензирование: Cynthia Shang.)

Улучшения:

  • Улучшен вывод команды info, когда stanza указана, но отсутствует. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang, David Steele. Предложили: uspen.)
  • Улучшена производительность обработки больших списков файлов в командах backup/restore. (Рецензирование: Cynthia Shang, Oscar.)
  • Добавлены повторные попытки ожидания PostgreSQL при начале резервного копирования. (Рецензирование: Cynthia Shang. Предложили: Vitaliy Kukharik.)

Улучшения документации:

  • Документация RHEL/CentOS 6 заменена документацией RHEL/CentOS 8.

Примечания к выпуску v2.30

Поддержка PostgreSQL 13

Выпущен 5 октября 2020

Исправления ошибок:

  • Если пользователь резервного копирования не может читать pg_settings, выдаётся ошибка с подсказками. (Рецензирование: Stefan Fercot, Cynthia Shang. Сообщили: Mohamed Insaf K.)

Новые возможности:

  • Поддержка PostgreSQL 13. (Рецензирование: Cynthia Shang.)

Улучшения:

  • Улучшено определение версии PostgreSQL. (Рецензирование: Cynthia Shang, Stephen Frost.)
  • Улучшено сообщение об ошибке рабочего каталога. (Рецензирование: Stefan Fercot.)
  • При отсутствии сегмента WAL добавлена подсказка о запуске stanza. (Авторы: David Christensen. Рецензирование: David Steele.)
  • Добавлена подсказка при несовпадении версий протокола. (Рецензирование: Cynthia Shang. Предложили: loop-evgeny.)

Улучшения документации:

  • Добавлено примечание о том, что при удалённой работе версии pgBackRest должны совпадать. (Рецензирование: Cynthia Shang. Предложили: loop-evgeny.)
  • Текст о команде info перенесён в справочник с добавлением ссылки на руководство пользователя. (Рецензирование: Cynthia Shang. Предложили: Christophe Courtois.)
  • Обновлён путь к репозиторию yum в руководстве пользователя CentOS/RHEL. (Авторы: Heath Lord. Рецензирование: David Steele.)

Примечания к выпуску v2.29

Автоматическое получение учётных данных S3 в AWS

Выпущен 31 августа 2020

Исправления ошибок:

  • Подавлены ошибки при закрытии процессов local/remote. Поскольку команда уже завершена, выдача ошибки нецелесообразна, но предупреждение сохраняется, чтобы указать на необычную ситуацию. (Рецензирование: Cynthia Shang. Сообщили: argdenis.)
  • Исправлена проблема с символом = в именах файлов или баз данных. (Рецензирование: Bastian Wegge, Cynthia Shang. Сообщили: Brad Nicholson, Bastian Wegge.)

Новые возможности:

  • Добавлено автоматическое получение временных учётных данных S3 на экземплярах AWS. (Авторы: David Steele, Stephen Frost. Рецензирование: Cynthia Shang, David Youatt, Aleš Zelený, Jeanette Bromage.)
  • Добавлен параметр archive-mode для отключения архивирования при восстановлении. (Рецензирование: Stephen Frost. Предложили: Stephen Frost.)

Улучшения:

  • Поддержка PostgreSQL 13 beta3. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.
  • Асинхронные операции list/remove для хранилищ S3/Azure. (Рецензирование: Cynthia Shang, Stephen Frost.)
  • Улучшено использование памяти при обнаружении нежурналируемых отношений во время построения манифеста. (Рецензирование: Cynthia Shang, Stephen Frost, Brad Nicholson, Oscar. Предложили: Oscar, Brad Nicholson.)
  • После создания асинхронного процесса через fork файловые дескрипторы закрываются заблаговременно. (Рецензирование: Stephen Frost, Cynthia Shang.)
  • Закрытие удалённого соединения резервного копирования отложено до завершения проверки архива. (Авторы: Floris van Nee. Рецензирование: David Steele.)
  • Улучшен подробный вывод ошибок. (Рецензирование: Cynthia Shang.)
  • Улучшены сообщения об ошибках TLS. (Рецензирование: Cynthia Shang, Stephen Frost.)

Исправления ошибок в документации:

  • В описание параметра compress-type добавлено значение none и исправлен пример. (Сообщили: Ugo Bellavance, Don Seiler.)
  • В описание параметра repo-type добавлен отсутствовавший тип azure. (Исправление: Don Seiler. Рецензирование: David Steele.)
  • Исправлена опечатка в описании параметра repo-cipher-type. (Исправление: Don Seiler. Рецензирование: David Steele.)

Улучшения документации:

  • Уточнено, что при отключённом expire-auto команду expire необходимо запускать регулярно. (Рецензирование: Douglas J Hunley. Предложили: Douglas J Hunley.)

Примечания к выпуску v2.28

Хранилище репозитория Azure

Выпущен 20 июля 2020

Исправления ошибок:

  • Исправлено поведение restore с --force, соответствовавшее --force --delta. Из-за этого restore заменяла файлы на основе временной метки и размера вместо безусловной перезаписи, поэтому некоторые файлы, требовавшие обновления, оставались неизменными. Обычная restore и restore с --delta этой проблемой не затрагивались. (Рецензирование: Cynthia Shang.)

Новые возможности:

  • Поддержка Azure для хранилища репозитория. (Рецензирование: Cynthia Shang, Don Seiler.)
  • Добавлен параметр expire-auto, позволяющий отключить автоматическое удаление по сроку хранения после успешного резервного копирования. (Авторы: Stefan Fercot. Рецензирование: Cynthia Shang, David Steele.)

Улучшения:

  • Асинхронная загрузка частями в S3. (Рецензирование: Stephen Frost.)
  • Автоматические повторные попытки для backup, restore, archive-get и archive-push. (Рецензирование: Cynthia Shang.)
  • Отключено параллельное выполнение запросов в сеансах PostgreSQL, используемых для управления резервным копированием. (Рецензирование: Stefan Fercot.)
  • Поддержка PostgreSQL 13 beta2. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.
  • Улучшена обработка неверного статуса ответа HTTP. (Рецензирование: Cynthia Shang.)
  • Улучшено сообщение об ошибке при отсутствии параметра pg1-path для команды archive-get. (Рецензирование: Cynthia Shang.)
  • Добавлена подсказка при включении дельта-копирования по контрольным суммам после переключения временной шкалы. (Рецензирование: Matt Bunter, Cynthia Shang.)
  • Там, где это уместно, вместо postmaster используется PostgreSQL. (Рецензирование: Cynthia Shang.)

Исправления ошибок в документации:

  • Исправлен неверный пример параметра repo-retention-full-type. (Сообщили: Höseyin Sönmez.)
  • Из справочников команд HTML и man удалены внутренние команды. (Сообщили: Cynthia Shang.)

Улучшения документации:

  • Обновлены версии PostgreSQL, используемые для сборки руководств пользователя. Также добавлены диапазоны версий, указывающие, что руководство применимо к диапазону версий PostgreSQL, даже если оно собрано для одной конкретной версии. (Рецензирование: Stephen Frost.)
  • Обновлён ответ на вопрос об удалении конкретного набора резервной копии. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • В разделе вопросов и ответов уточнено поведение PITR по умолчанию. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.27

Улучшения удаления по сроку хранения и драйверы сжатия

Выпущен 26 мая 2020

Исправления ошибок:

  • Исправлена проверка вложенности ссылок на файлы в ссылки на каталоги. (Рецензирование: Cynthia Shang. Сообщили: Christophe Cavallié.)
  • Для синхронной команды archive-push параметр pg-path1 стал необязательным. (Рецензирование: Cynthia Shang. Сообщили: Jerome Peng.)
  • Команда expire теперь проверяет наличие файла остановки. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлена обработка отсутствующего пояснения статуса в ответе HTTP. (Рецензирование: Cynthia Shang. Сообщили: Tenuun.)
  • Увеличен размер буфера для сброса данных сжатия lz4. (Рецензирование: Cynthia Shang. Сообщили: Eric Radman.)
  • Для команды remote игнорируются параметры pg-host* и repo-host*. (Рецензирование: Cynthia Shang. Сообщили: Pavel Suderevsky.)
  • Исправлено возможное отсутствие параметров pg1-* для команды remote. (Рецензирование: Cynthia Shang. Сообщили: Andrew L’Ecuyer.)

Новые возможности:

  • Хранение полных резервных копий по времени. Параметр --repo-retention-full-type позволяет хранить полные резервные копии в течение периода, заданного в днях. (Авторы: Cynthia Shang, Pierre Ducroquet. Рецензирование: David Steele.)
  • Удаление выбранной резервной копии. Пользователь может удалить указанную резервную копию независимо от настроек срока хранения. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Поддержка сжатия Zstandard. Значение compress-type=zst делает новые резервные копии и архив несовместимыми с предыдущими версиями pgBackRest: восстановление с их помощью будет невозможно. (Рецензирование: Cynthia Shang.)
  • Поддержка сжатия bzip2. Значение compress-type=bz2 делает новые резервные копии и архив несовместимыми с предыдущими версиями pgBackRest: восстановление с их помощью будет невозможно. (Авторы: Stephen Frost. Рецензирование: David Steele, Cynthia Shang.)
  • В команду info добавлено состояние выполнения backup/expire. (Авторы: Stefan Fercot. Рецензирование: David Steele.)

Улучшения:

  • Архив WAL удаляется только при достижении порога repo-retention-archive. Ранее WAL, предшествующий первой полной резервной копии, удалялся после её создания. Теперь он сохраняется в соответствии с настройками срока хранения. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлена локальная реализация MD5, чтобы S3 работал при включённом FIPS. (Рецензирование: Cynthia Shang, Stephen Frost. Предложили: Brian Almeida, John Kelly.)
  • Поддержка PostgreSQL 13 beta1. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения. (Рецензирование: Cynthia Shang.)
  • Значение по умолчанию buffer-size уменьшено до 1MiB. (Рецензирование: Stephen Frost.)
  • Если expire запущена не на сервере репозитория, выдаётся понятное пользователю сообщение об ошибке. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.26

Неблокирующий TLS

Выпущен 20 апреля 2020

Исправления ошибок:

  • Из регулярного выражения манифеста удалено пустое подвыражение. Оно вызывало проблемы в MacOS, хотя на других платформах всё, по-видимому, работало нормально. (Исправление: David Raftis. Рецензирование: David Steele.)

Улучшения:

  • Неблокирующая реализация TLS. (Рецензирование: Slava Moudry, Cynthia Shang, Stephen Frost.)
  • Размер копируемых данных резервной копии ограничивается только для файлов, журналируемых в WAL. Предыдущее поведение могло привести к усечению postgresql.conf или postgresql.auto.conf в резервной копии. (Рецензирование: Cynthia Shang.)
  • Параметры TCP keep-alive теперь настраиваются. (Предложили: Marc Cousin.)
  • Добавлен параметр io-timeout. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v2.25

Поддержка сжатия LZ4

Выпущен 26 марта 2020

Новые возможности:

  • Добавлена поддержка сжатия lz4. Значение compress-type=lz4 делает новые резервные копии и архив несовместимыми с предыдущими версиями pgBackRest: восстановление с их помощью будет невозможно. (Рецензирование: Cynthia Shang.)
  • В команду expire добавлен параметр --dry-run. Пробный запуск позволяет увидеть, какие резервные копии и архивы удалила бы команда expire, ничего фактически не удаляя. (Авторы: Cynthia Shang, Luca Ferrari. Рецензирование: David Steele. Предложили: Marc Cousin.)

Улучшения:

  • Улучшена производительность удалённого построения манифеста. (Предложили: Jens Wilke.)
  • Исправлено обнаружение параметров keepalive в Linux. (Авторы: Marc Cousin. Рецензирование: David Steele.)
  • В configure добавлено определение платформы для корректного задания флагов стандартов. (Авторы: Marc Cousin. Рецензирование: David Steele.)
  • Параметры compress/compress-level удалены из команд, где они не используются. Эти команды (например, restore, archive-get) никогда не использовали параметры сжатия, но допускали их передачу в командной строке. Теперь при передаче этих параметров в командной строке выдаётся ошибка. Если возникают такие ошибки, следует удалить неиспользуемые параметры. (Рецензирование: Cynthia Shang.)
  • Размер копируемой части файла ограничен размером, определённым при начале резервного копирования. Если файл увеличивается во время копирования, он будет воссоздан при воспроизведении WAL во время восстановления, поэтому копировать дополнительные данные не требуется. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v2.24

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

Выпущен 25 февраля 2020

Исправления ошибок:

  • Предотвращено появление зомби-процессов в асинхронных командах архивирования. (Рецензирование: Stephen Frost. Сообщили: Adam Brusselback, ejberdecia.)
  • При запуске archive-get/archive-push/restore не на сервере PostgreSQL выдаётся ошибка. (Рецензирование: Stephen Frost. Сообщили: Jesper St John.)
  • Если размер или кодирование не указаны, содержимое HTTP читается до конца файла. (Рецензирование: Cynthia Shang. Сообщили: Christian ROUX.)
  • Исправлено возобновление резервной копии, созданной Perl-реализацией. Такую копию следует игнорировать, но код на C не мог загрузить частичный манифест, записанный Perl, из-за небольшого различия форматов. Добавлены проверки для выявления этого случая и корректного продолжения работы. (Сообщили: Kacey Holston.)

Новые возможности:

  • При восстановлении с указанным целевым временем набор резервной копии выбирается автоматически. Автоматический выбор выполняется только при отсутствии --set. Если набор резервной копии для заданного времени не найден, используется последний набор, выбираемый по умолчанию. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения:

  • При резервном копировании пропускается временный файл pg_internal.init. (Рецензирование: Cynthia Shang. Предложили: Michael Paquier.)
  • В backup добавлены дополнительные проверки манифеста. (Рецензирование: Cynthia Shang.)

Улучшения документации:

  • Боту lock-bot запрещено добавлять комментарии к заблокированным обращениям. (Предложили: Christoph Berg.)

Примечания к выпуску v2.23

Исправление ошибки

Выпущен 27 января 2020

Исправления ошибок:

  • Исправлено повреждение манифеста из-за отсутствующих файлов. Если PostgreSQL удалял файл во время резервного копирования (или файл отсутствовал на резервном сервере), следующий файл мог не копироваться, а его запись в манифесте — не обновляться. В таком случае восстановление резервной копии завершалось ошибкой. (Рецензирование: Cynthia Shang. Сообщили: Vitaliy Kukharik.)

Улучшения:

  • Для параметров сборки libxml2 вместо xml2-config используется pkg-config. (Авторы: David Steele, Adrian Vondendriesch.)
  • В backup/restore проверяется наличие контрольных сумм в манифесте. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v2.22

Исправление ошибки

Выпущен 21 января 2020

Исправления ошибок:

  • Исправлена ошибка преобразования временной шкалы. Она нужна для проверки сегментов WAL в архиве после резервного копирования. Преобразование выполнялось по основанию 10 вместо 16, что приводило к ошибкам при временной шкале ≥ 0xA. (Сообщили: Lukas Ertl, Eric Veldhuyzen.)

Примечания к выпуску v2.21

Перенос на C завершён

Выпущен 15 января 2020

Исправления ошибок:

  • Исправлено игнорирование параметров асинхронными командами. Асинхронные процессы archive-get/archive-push не загружали параметры, заданные в секциях конфигурации команд, например [global:archive-get]. (Рецензирование: Cynthia Shang. Сообщили: Urs Kramer.)
  • Исправлена обработка \ в именах файлов. Символ \ неверно экранировался при вычислении контрольной суммы манифеста, из-за чего манифест не загружался. Поскольку \ в именах файлов кластера должен встречаться крайне редко или не встречаться вовсе, серьёзные проблемы на практике маловероятны.

Новые возможности:

  • Теперь pgBackRest полностью написан на C.
  • Добавлен параметр pg-user. Он задаёт имя пользователя базы данных при подключении к PostgreSQL. Если он не указан, pgBackRest подключается от имени локального пользователя ОС или PGUSER, как и раньше. (Авторы: Mike Palmiotto. Рецензирование: David Steele.)
  • В драйвере S3 разрешены URI с адресацией через путь.

Улучшения:

  • Команда backup полностью реализована на C. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v2.20

Исправления ошибок

Выпущен 12 декабря 2019

Исправления ошибок:

  • Исправлены archive-push/archive-get при символической ссылке PGDATA. Эти команды пытались использовать cwd() в качестве PGDATA, но при символической ссылке PGDATA полученный путь не совпадал с путём в конфигурации pgBackRest. Если cwd() не совпадает с путём pgBackRest, выполняется chdir() в этот каталог и проверяется совпадение следующего cwd() с результатом первого вызова. (Сообщили: Stephen Frost, Milosz Suchy.)
  • Исправлен список ссылок при воссоздании backup.info командой expire. Поскольку команда backup всё ещё использует Perl-реализацию воссоздания, проблема проявляется только если 1) резервная копия отсутствует в backup.info и 2) команда expire запускается напрямую, а не после backup, как обычно. Такое сочетание маловероятно, поэтому на практике проблема, скорее всего, не возникает.
  • Исправлено нарушение сегментации при неожиданном EOF во время распаковки gzip. (Сообщили: Stephen Frost.)

Примечания к выпуску v2.19

Перенос на C и исправления ошибок

Выпущен 12 ноября 2019

Исправления ошибок:

  • Исправлен тайм-аут удалённого процесса при дельта-восстановлении. При дельта-восстановлении в основном неизменившегося кластера удалённый процесс мог завершиться по тайм-ауту, если за время protocol-timeout из репозитория не запрашивались файлы. Для предотвращения тайм-аута добавлены сообщения keep-alive. (Сообщили: James Sewell, Jens Wilke.)
  • Исправлена обработка повторяющихся заголовков HTTP. Повторяющиеся заголовки следует считать эквивалентом одного заголовка со значениями через запятую, а не вызывать ошибку, как это происходило раньше. (Сообщили: donicrosby.)

Улучшения:

  • Вывод JSON команды info больше не форматируется для чтения человеком. Системам мониторинга проще обрабатывать JSON без переводов строк. При необходимости для форматирования можно использовать внешние инструменты, например jq. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Команда check полностью реализована на C. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения документации:

  • Документирован порядок участия в разработке pgBackRest. (Авторы: Cynthia Shang, David Steele.)
  • Документирована максимальная версия для параметра auto-stop. (Авторы: Brad Nicholson. Рецензирование: David Steele.)

Улучшения набора тестов:

  • Исправлено использование тестового пути контейнера при --vm=none. (Предложили: Stephen Frost.)
  • Исправлено несовпадение часового пояса в тесте expect. (Предложили: Stephen Frost.)
  • По умолчанию больше не генерируется встроенный код libc. (Предложили: Stephen Frost.)

Примечания к выпуску v2.18

Поддержка PostgreSQL 12

Выпущен 1 октября 2019

Новые возможности:

  • Поддержка PostgreSQL 12.
  • В команду info добавлен параметр set для подробного текстового вывода. Дополнительные сведения включают базы данных, доступные для выборочного восстановления, и список табличных пространств и символических ссылок с их целевыми путями по умолчанию. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Stephen Frost, ejberdecia.)
  • Добавлен тип восстановления standby. Для PostgreSQL < 12 он автоматически добавляет standby_mode=on в recovery.conf, а для PostgreSQL ≥ 12 создаёт standby.signal, обеспечивая единый интерфейс для разных версий PostgreSQL. (Рецензирование: Cynthia Shang.)

Улучшения:

  • Команда restore полностью реализована на C. (Рецензирование: Cynthia Shang.)

Улучшения документации:

  • Документирована связь между db-timeout и protocol-timeout. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: James Chanco Jr.)
  • В документацию добавлены пояснения о репозиториях резервных серверов. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • В раздел вопросов и ответов добавлен вопрос о восстановлении на заданный момент времени. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v2.17

Перенос на C и исправления ошибок

Выпущен 3 сентября 2019

Исправления ошибок:

  • Ускорено построение манифеста при очень большом числе таблиц и сегментов. (Сообщили: Jens Wilke.)
  • Исправлены исключения для специальных файлов. (Сообщили: CluelessTechnologist, Janis Puris, Rachid Broum.)

Улучшения:

  • Команды stanza-create/update/delete полностью реализованы на C. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Команды start/stop полностью реализованы на C. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Каталоги и файлы журналов создаются с правами 0750/0640. (Предложили: Damiano Albani.)

Исправления ошибок в документации:

  • Исправлена установка пакета yum.p.o, когда указан собственный пакет. (Сообщили: Joe Ayers, John Harvey.)

Улучшения документации:

  • Сборка pgBackRest выполняется от имени непривилегированного пользователя. (Предложили: Laurenz Albe.)

Примечания к выпуску v2.16

Перенос на C и исправления ошибок

Выпущен 5 августа 2019

Исправления ошибок:

  • При ошибках S3 RequestTimeTooSkewed выполняются повторные попытки вместо немедленного завершения. (Сообщили: sean0101n, Tim Garton, Jesper St John, Aleš Zelený.)
  • Исправлена неверная обработка transfer-encoding в ответе на запрос HEAD. (Сообщили: Pavel Suderevsky.)
  • Исправлены нарушения областей видимости, выявленные оптимизациями gcc 9. (Сообщили: Christian Lange, Ned T. Crigler.)

Новые возможности:

  • Добавлен параметр repo-s3-port для задания нестандартного порта службы S3.

Улучшения:

  • Команда local для backup полностью реализована на C. (Авторы: David Steele, Cynthia Shang.)
  • Команда check частично реализована на C. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v2.15

Реализация expire на C

Выпущен 25 июня 2019

Исправления ошибок:

  • Исправлено чрезмерно агрессивное удаление архива по сроку хранения. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Mohamad El-Rifai.)

Улучшения:

  • Команда expire полностью реализована на C. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Команда local для восстановления полностью реализована на C.
  • Удалено жёстко заданное имя пользователя PostgreSQL, чтобы работал $PGUSER. (Предложили: Julian Zhang, Janis Puris.)
  • Теперь учитывается параметр --prefix команды configure. (Предложили: Daniel Westermann.)
  • Параметр repo-s3-verify-ssl переименован в repo-s3-verify-tls. Новое имя предпочтительнее, поскольку pgBackRest не поддерживает ни одну версию протокола SSL: все они считаются небезопасными. Старое имя продолжит приниматься.

Улучшения документации:

  • В документацию добавлен раздел вопросов и ответов. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • В документации для PostgreSQL ≥ 9.6 используется wal_level=replica. (Предложили: Patrick McLaughlin.)

Примечания к выпуску v2.14

Исправление ошибки и улучшения

Выпущен 20 мая 2019

Исправления ошибок:

  • Исправлено нарушение сегментации при process-max > 8 для archive-push/archive-get. (Сообщили: Jens Wilke.)

Улучшения:

  • При запуске stanza-delete с force проверки базы данных пропускаются. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: hatifnatt.)
  • Добавлен скрипт configure для улучшения поддержки нескольких платформ.

Дополнения к документации:

  • Добавлены руководства пользователя для CentOS/RHEL 6/7.

Примечания к выпуску v2.13

Исправления ошибок

Выпущен 18 апреля 2019

Исправления ошибок:

  • Исправлены операции чтения нулевой длины, вызывавшие проблемы у не ожидавших их фильтров ввода-вывода. (Сообщили: brunre01, Jens Wilke, Tomasz Kontusz, guruguruguru.)
  • Исправлена ненадёжная передача сообщений об ошибках из процессов local/remote.
  • Исправлены сообщения об ошибках Posix/CIFS, содержавшие неверное имя файла при записи, синхронизации или закрытии.

Примечания к выпуску v2.12

Реализация archive-push на C

Выпущен 11 апреля 2019

ВАЖНОЕ ПРИМЕЧАНИЕ: Новая реализация TLS/SSL запрещает точки в именах бакетов S3 согласно RFC-2818. Это исправление безопасности необходимо для проверки имён серверов в соответствии со стандартом.

Исправления ошибок:

  • Исправлены проблемы с параметром пути, оканчивающимся на /. (Сообщили: Marc Cousin.)
  • Исправлены проблемы при log-level-file=off для команды archive-get. (Сообщили: Brad Nicholson.)
  • Код на C исправлен для распознавания формата параметров host:port, как в Perl. (Сообщили: Kyle Nevins.)
  • Исправлены проблемы с параметрами журналирования команд remote/local.

Улучшения:

  • Команда archive-push полностью реализована на C.
  • Предельное значение process-max увеличено до 999. (Предложили: Rakshitha-BR.)
  • Улучшено сообщение об ошибке, когда имя бакета S3 содержит точки.

Улучшения документации:

  • Уточнена поддержка S3-совместимых объектных хранилищ. (Предложили: Magnus Hagander.)

Примечания к выпуску v2.11

Реализация archive-get на C

Выпущен 11 марта 2019

Исправления ошибок:

  • Исправлено возможное усечение сегментов WAL при ошибке в процессе записи. (Сообщили: blogh.)
  • Исправлено отсутствие минимального и максимального WAL в команде info при указанной stanza. (Исправление: Stefan Fercot. Рецензирование: David Steele.)
  • Исправлен некорректный JSON для параметров, передаваемых из C в Perl. (Сообщили: Leo Khomenko.)

Улучшения:

  • Команда archive-get полностью реализована на C.
  • В старых версиях Perl включён keep-alive сокетов. (Авторы: Marc Cousin. Рецензирование: David Steele.)
  • При передаче параметров команде, которая их не принимает, выдаётся ошибка. (Предложили: Jason O’Donnell.)
  • Добавлены подсказки при невозможности найти сегмент WAL в архиве. (Предложили: Hans-Jürgen Schönig.)
  • Улучшено сообщение об ошибке, когда имя сервера не найдено в сертификате. (Предложили: James Badger.)
  • В backup.manifest добавлены дополнительные параметры для отладки. (Авторы: blogh. Рецензирование: David Steele.)

Улучшения документации:

  • Версией PostgreSQL по умолчанию в документации стала PostgreSQL 10.

Примечания к выпуску v2.10

Исправления ошибок

Выпущен 9 февраля 2019

Исправления ошибок:

  • Добавлен нереализованный ранее метод драйвера S3, необходимый для archive-get. (Сообщили: mibiio.)
  • Исправлена проверка неверной настройки pg-path. (Сообщили: James Chanco Jr.)

Примечания к выпуску v2.09

Небольшие улучшения и исправления ошибок

Выпущен 30 января 2019

Исправления ошибок:

  • Исправлена проблема с несколькими файлами асинхронного состояния, вызывавшая критическую ошибку. (Сообщили: Vidhya Gurumoorthi, Joe Ayers, Douglas J Hunley.)

Улучшения:

  • Команда info полностью реализована на C. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Упрощено текстовое сообщение команды info при отсутствии stanza. Путь репозитория заменён строкой “the repository”.
  • В Makefile добавлен флаг _DARWIN_C_SOURCE для сборок MacOS. (Авторы: Douglas J Hunley. Рецензирование: David Steele.)
  • Поиск адресов в клиенте TLS на C обновлён для использования современных методов. (Предложили: Bruno Friedmann.)
  • Подключён совместимый с Posix заголовок для strcasecmp() и fd_set. (Предложили: ucando.)

Исправления ошибок в документации:

  • Исправлен жёстко заданный путь репозитория. (Сообщили: Heath Lord.)

Улучшения документации:

  • Уточнено, что шифрование всегда выполняется на стороне клиента. (Предложили: Bruce Burdick.)
  • Добавлены примеры настройки сервера документации.
  • В переменных, списках и элементах списков манифеста разрешён if.

Примечания к выпуску v2.08

Небольшие улучшения и исправления ошибок

Выпущен 2 января 2019

Исправления ошибок:

  • Удалён запрос информации об объекте S3 сразу после его размещения. (Сообщили: Matt Kunkel.)
  • Тип archive-get-queue-max исправлен на size. (Сообщили: Ronan Dunklau.)
  • Добавлено сообщение об ошибке, когда uid/gid текущего пользователя не сопоставляются с именем. (Сообщили: Camilo Aguilar.)
  • При задании --target-action=shutdown для PostgreSQL < 9.5 выдаётся ошибка.

Улучшения:

  • Для соединений S3 включены TCP keepalive. (Предложили: Ronan Dunklau.)
  • Текстовый вывод команды info переупорядочен, чтобы последняя резервная копия выводилась в конце. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Ryan Lambert.)
  • Владелец файла изменяется только при необходимости.
  • При выдаче ошибок S3 содержимое заголовка authentication скрывается. (Предложили: Brad Nicholson.)

Улучшения документации:

  • Уточнено, когда действует target-action, и описана поддержка версий PostgreSQL. (Предложили: Keith Fiske.)
  • Уточнено, что для бакета необходимо корректно настроить регион и конечную точку. (Предложили: Pritam Barhate.)
  • Добавлена документация по сборке документации.

Примечания к выпуску v2.07

Автоматическое дельта-копирование по контрольным суммам

Выпущен 16 ноября 2018

Исправления ошибок:

  • Исправлено игнорирование archive-push-queue-max при ошибке соединения. (Сообщили: Lardière Sébastien.)
  • Исправлено использование постоянного размера сегмента WAL при определении превышения archive-push-queue-max.
  • Исправлена ошибка после неудачного открытия файла журнала, когда обработка должна продолжаться. (Сообщили: vthriller.)

Новые возможности:

  • Дельта-копирование по контрольным суммам автоматически включается при обнаружении аномалий, например переключения временной шкалы. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения:

  • Повторные попытки выполняются для всех ошибок S3 5xx, а не только для внутренних ошибок 500. (Предложили: Craig A. James.)

Примечания к выпуску v2.06

Дельта-копирование по контрольным суммам и поддержка PostgreSQL 11

Выпущен 15 октября 2018

Исправления ошибок:

  • Исправлено отсутствие кодирования URI в драйвере S3. (Сообщили: Dan Farrell.)
  • Исправлено неверное сообщение об ошибке дублирующихся параметров в файлах конфигурации. (Сообщили: Jesper St John.)
  • Исправлено ошибочное сообщение о возврате ошибки на уровне журнала info. Код возврата 1 команды archive-get записывался как сообщение об ошибке на уровне info, хотя в остальном работа была корректной.

Новые возможности:

  • Добавлено дельта-копирование по контрольным суммам для инкрементных резервных копий. Оно использует контрольные суммы вместо временных меток для определения изменений файлов. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Поддержка PostgreSQL 11, включая настраиваемый размер сегмента WAL.

Улучшения:

  • В каталоге табличного пространства, на который указывает ссылка, игнорируются все файлы, кроме подкаталога текущей версии PostgreSQL. Ранее наличие других файлов, не принадлежащих пользователю PostgreSQL, приводило к ошибке.
  • Команда info улучшена для отображения типа шифрования stanza. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Douglas J Hunley.)
  • Улучшена поддержка специальных символов в именах файлов.
  • Параметр delta теперь можно задавать в файле конфигурации pgBackRest. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения документации:

  • Для повышения безопасности SSH используется command в authorized_hosts. (Предложили: Stephen Frost, Magnus Hagander.)
  • В справочнике конфигурации перечислены допустимые значения параметра buffer-size. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Stéphane Schildknecht.)

Примечания к выпуску v2.05

Параметры в переменных окружения и исключение временных и нежурналируемых отношений

Выпущен 31 августа 2018

Исправления ошибок:

  • Исправлена проблема, при которой относительные ссылки в $PGDATA могли сохраняться в резервной копии с неверным путём. Абсолютные ссылки не затрагивались, а относительные ссылки табличных пространств выявлялись другими проверками. (Сообщили: Cynthia Shang.)
  • Из команды check удалён не полностью реализованный параметр online. Автономная работа противоречит назначению этой команды — проверять корректность архивирования и резервного копирования. (Сообщили: Jason O’Donnell.)
  • Исправлена проблема, при которой ошибки, возникавшие в C при вызове из Perl, не записывались в журнал. pgBackRest корректно завершался с верным кодом ошибки, но сообщение, необходимое для отладки, отсутствовало. (Сообщили: Douglas J Hunley.)
  • Исправлена проблема при повторном задании логического параметра, например delta. (Сообщили: Yogesh Sharma.)

Новые возможности:

  • Любой параметр теперь можно задать через переменную окружения. Это относится и к параметрам, ранее доступным только в командной строке, например stanza, и к секретным параметрам, которые нельзя было задавать в командной строке, например repo1-s3-key-secret.
  • Из резервного копирования исключены файлы временных и нежурналируемых отношений (таблиц и индексов). Использована та же логика, что и в изменениях PostgreSQL, добавляющих эту возможность: 8694cc96 и 920a5e50 . Исключение временных отношений включено для PostgreSQL ≥ 9.0. Исключение нежурналируемых отношений включено для PostgreSQL ≥ 9.1, где эта возможность появилась. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлена возможность исключать из резервной копии произвольные каталоги и/или файлы. Неправильное использование этой возможности может привести к несогласованным резервным копиям, поэтому перед использованием следует внимательно прочитать документацию --exclude. (Рецензирование: Cynthia Shang.)
  • Добавлен параметр log-subprocess, разрешающий запись журналов подпроцессов local и remote в файлы.
  • Поддержка PostgreSQL 11 Beta 3.

Улучшения:

  • Файлы нулевого размера в манифесте резервной копии теперь могут ссылаться на предыдущий манифест независимо от разницы временных меток. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Улучшена производительность асинхронных archive-get/archive-push за счёт прямой проверки файлов состояния. (Авторы: Stephen Frost. Рецензирование: David Steele.)
  • Улучшено сообщение об ошибке при отсутствии у команды параметра stanza. (Предложили: Sarah Conway.)

Исправления ошибок в документации:

  • Исправлен неверный уровень журнала в описании параметра log-path. (Сообщили: Camilo Aguilar.)

Улучшения документации:

  • Прекращены попытки упорядочивать участников в release.xml по фамилии и имени. В примечаниях к выпускам имена участников всегда приводились точно в указанном ими виде, но внутренние идентификаторы пытались назначать по фамилии и имени, которые бывает трудно определить, и в итоге это не имело смысла. Изменение вдохновлено докладом Christophe на PostgresOpen 2017 «У людей нет первичного ключа». (Предложили: Christophe Pettus.)

Улучшения набора тестов:

  • При сборке LibC вне тестовой среды выдаётся ошибка. LibC больше не требуется для производственных сборок.

Примечания к выпуску v2.04

Исправление критической ошибки возобновления резервного копирования

Выпущен 5 июля 2018

ВАЖНОЕ ПРИМЕЧАНИЕ: В этом выпуске исправлена критическая ошибка возобновления резервного копирования. Все возобновлённые резервные копии, созданные до этого выпуска, следует считать несогласованными. После сбоя предыдущего резервного копирования оно возобновляется, если не задано resume=n. Возобновлённую копию можно определить по сообщению в журнале резервного копирования: “aborted backup of same type exists, will be cleaned to remove invalid files and resumed”. Если такое сообщение есть, нельзя использовать эту копию или любую копию из того же набора для восстановления; следует проверить журналы восстановления и выяснить, восстанавливалась ли возобновлённая копия. Если да, в кластере могут быть несогласованные данные.

Исправления ошибок:

  • Исправлена критическая ошибка возобновления, приводившая к несогласованным резервным копиям. Регрессия в v0.82 убрала сравнение временных меток при выборе файлов прерванной копии, которые следует сохранить при возобновлении. Подробности см. в примечании выше. (Сообщили: David Youatt, Yogesh Sharma, Stephen Frost.)
  • Исправлена ошибка выборочного восстановления, когда в кластере существует только одна пользовательская база данных. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Nj Baliyan.)
  • Исправлен не соответствовавший ISO-8601 формат временной метки в заголовках авторизации S3. AWS и некоторые шлюзы допускали дополнение часов пробелами вместо нулей, а другие — нет. (Исправление: Andrew Schwartz. Рецензирование: David Steele.)

Новые возможности:

  • Поддержка PostgreSQL 11 Beta 2.

Улучшения:

  • Клиент HTTP улучшен: если сервер не задаёт content-length, устанавливается значение 0. S3 и шлюзы всегда задают content-length или transfer-encoding, но HTTP 1.1 этого не требует, и прокси, например HAProxy, могут не включать ни один из этих заголовков. (Предложили: Adam K. Sumner.)
  • Для соединений PostgreSQL задаётся search_path = 'pg_catalog'. (Предложили: Stephen Frost.)

Улучшения документации:

  • Создан новый раздел о сборке pgBackRest; сборка выполняется на отдельном сервере.
  • Добавлен пример политики S3 для ограничения прав доступа к бакету. (Предложили: Douglas J Hunley, Jason O’Donnell.)

Примечания к выпуску v2.03

Единственный исполняемый файл для развёртывания

Выпущен 22 мая 2018

Исправления ошибок:

  • Исправлено возможное переполнение буфера при обработке сообщений об ошибках. (Сообщили: Lætitia.)
  • Исправлено получение блокировки записи архива синхронной командой archive-get. (Сообщили: uspen.)

Улучшения:

  • Экспортируемые функции C и модули Perl встроены непосредственно в исполняемый файл pgBackRest.
  • Для лучшей переносимости вместо __time_t используется time_t. (Предложили: Nick Floersch.)
  • В конце команды выводится общее время выполнения в миллисекундах.

Примечания к выпуску v2.02

Параллельное асинхронное получение из архива и подключаемые файлы конфигурации

Выпущен 6 мая 2018

Исправления ошибок:

  • Исправлена рекурсивная синхронизация каталогов там, где должен синхронизироваться только указанный каталог. (Сообщили: Craig A. James.)
  • Исправлена ошибка “path not found” команды archive-copy для инкрементных и дифференциальных копий. (Сообщили: yummyliu, Vitaliy Kukharik.)
  • Исправлен сбой построения манифеста, когда два или более файла в PGDATA являются ссылками на один каталог. (Сообщили: Vitaliy Kukharik.)
  • Исправлен сбой дельта-восстановления при отсутствии файла, на который указывает ссылка.
  • Исправлено отображение параметров типа «ключ — значение» и списков в справке. (Сообщили: Clinton Adams.)

Новые возможности:

  • Добавлена асинхронная параллельная команда archive-get. Она поддерживает очередь сегментов WAL, снижая задержку, когда PostgreSQL запрашивает сегмент WAL через restore_command.
  • Добавлена поддержка дополнительных файлов конфигурации pgBackRest. Каталог задаётся параметром --config-include-path. Добавлен параметр --config-path для переопределения базового пути по умолчанию параметров --config и --config-include-path. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлен параметр repo-s3-token для настройки токенов временных учётных данных. В настоящее время pgBackRest не может запрашивать новые учётные данные, поэтому вся команда, например backup или restore, должна завершиться до истечения срока их действия. (Авторы: Yogesh Sharma. Рецензирование: David Steele.)

Улучшения:

  • Параметры archive-push-queue-max, manifest-save-threshold и buffer-size обновлены для приёма значений в KB, MB, GB, TB или PB, где множителем служит степень 1024. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Повышена эффективность синхронизации каталогов при резервном копировании и восстановлении. При большом числе небольших таблиц обход всего каталога может быть очень затратным. Манифест резервной копии содержит список путей, который теперь используется для синхронизации вместо обхода каталога резервного копирования или восстановления.
  • В начальном сообщении журнала info отображаются аргументы команды наряду с её параметрами.
  • Параметр archive-queue-max переименован в archive-push-queue-max для согласованности с новым параметром archive-get-queue-max. Старое имя параметра продолжит приниматься.

Исправления ошибок в документации:

  • В документацию добавлены сведения о поддержке 32-битных систем и предостережения. Поддержка 32-битных систем появилась в v1.26. (Сообщили: Viorel Tabara.)

Улучшения документации:

  • Добавлены примеры мониторинга с использованием PostgreSQL и jq. (Предложили: Stephen Frost, Brian Faherty.)
  • В конфигурацию архивирования добавлен пример использования секции команды. (Предложили: Christophe Courtois.)
  • Из документации удалено описание info --output=json как экспериментальной возможности.
  • Обновлено устаревшее описание параметра spool-path.

Новые возможности набора тестов:

  • Для отчётов о покрытии модульными тестами C используется lcov вместо Devel::Cover, который не показывал покрытие ветвей в отчётах, преобразованных из gcov. Неполное покрытие ветвей модуля теперь вызывает ошибку. Покрытие самих модульных тестов не отображается в отчёте, кроме случаев неполного покрытия операторов или ветвей.

Примечания к выпуску v2.01

Небольшие исправления ошибок и улучшения

Выпущен 19 марта 2018

Исправления ошибок:

  • Исправлено ошибочное признание параметров --target-action и --recovery-option недопустимыми при восстановлении с --type=immediate. (Сообщили: Brad Nicholson.)
  • При передаче секретного параметра, например repo1-s3-key, в командной строке теперь немедленно выдаётся ошибка. Поскольку pgBackRest не передавал секретные параметры подпроцессам, раньше возникала малопонятная ошибка. Новая ошибка намного яснее и содержит подсказки по устранению проблемы. Документация команд обновлена: из неё исключены секретные параметры, которые нельзя задавать в командной строке. (Сообщили: Brad Nicholson.)
  • Исправлена передача --no-config встроенному Perl. (Сообщили: Ibrahim Edib Kokdemir.)
  • Исправлена проблема, при которой log-level-stderr > warn приводил к ошибке при выходе процесса local/remote из-за неожиданного вывода в stderr. Максимальное значение для процессов local/remote теперь равно error, поскольку этим процессам незачем выдавать предупреждения. (Сообщили: Clinton Adams.)
  • Исправлен тест манифеста в команде check при наличии табличных пространств. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Thomas Flatley.)

Улучшения:

  • Если в файле конфигурации для параметра, не принимающего несколько аргументов, задано несколько аргументов, выдаётся ошибка. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Из src/Makefile удалены лишние команды sudo. (Авторы: Adrian Vondendriesch. Рецензирование: David Steele.)

Улучшения документации:

  • В примерах индексируемых параметров, то есть repo-* и pg-*, показывается индекс. (Предложили: Stephen Frost.)
  • Оглавление страницы команд упрощено: перечисляются только команды. (Предложили: Stephen Frost.)
  • Удалены упоминания необязательности библиотеки C.

Новые возможности набора тестов:

  • Добавлены сборки пакетов CentOS/RHEL.
  • Для статического анализа кода используется clang. Первоначально ничего не обнаружено, кроме нескольких функций, которые следовало пометить как __noreturn__.

Примечания к выпуску v2.00

Улучшение производительности archive-push

Выпущен 23 февраля 2018

Новые возможности:

  • Команда archive-push теперь частично написана на C, что значительно ускоряет PostgreSQL archive_command при обработке сообщений состояния от асинхронного процесса архивирования. (Рецензирование: Cynthia Shang.)

Улучшения:

  • Команда check улучшена для проверки возможности построения манифеста резервной копии. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Улучшена производительность клиента HTTPS. При буферизации теперь учитываются байты pending в сокете, если они есть, вместо полной зависимости от select(). В некоторых случаях последние байты не сбрасывались до закрытия соединения.
  • Улучшена производительность удаления S3. Константа S3_BATCH_MAX была заменена жёстко заданным значением 2, вероятно во время тестирования.
  • Любой параметр, заданный вне командной строки, теперь можно сбросить к значению по умолчанию через командную строку. Это позволяет сбрасывать параметры из pgbackrest.conf, уменьшая необходимость создания новых файлов конфигурации для отдельных задач.
  • Библиотека C теперь обязательна. Это устраняет условную загрузку и упрощает разработку новых возможностей библиотеки.
  • Исполняемый файл pgbackrest теперь является скомпилированной программой на C вместо программы на Perl. Это ускоряет некоторые чувствительные ко времени команды, например асинхронную archive-push.
  • Параметры db-* переименованы в pg-*, а backup-* — в repo-* для большей согласованности. Параметры repo-* теперь индексируются, хотя пока допускается только один индекс.

Дополнения к документации:

  • Все кластеры в документации инициализируются с контрольными суммами.

Улучшения документации:

  • В документации и справке командной строки перечисляются устаревшие имена параметров.
  • Уточнено, что бакеты S3 должен создавать пользователь. (Предложили: David Youatt.)

Примечания к выпуску v1.29

Исправление критической ошибки возобновления резервного копирования

Выпущен 5 июля 2018

ВАЖНОЕ ПРИМЕЧАНИЕ: В этом выпуске исправлена критическая ошибка возобновления резервного копирования. Все возобновлённые резервные копии, созданные до этого выпуска, следует считать несогласованными. После сбоя предыдущего резервного копирования оно возобновляется, если не задано resume=n. Возобновлённую копию можно определить по сообщению в журнале резервного копирования: “aborted backup of same type exists, will be cleaned to remove invalid files and resumed”. Если такое сообщение есть, нельзя использовать эту копию или любую копию из того же набора для восстановления; следует проверить журналы восстановления и выяснить, восстанавливалась ли возобновлённая копия. Если да, в кластере могут быть несогласованные данные.

Исправления ошибок:

  • Исправлена критическая ошибка возобновления, приводившая к несогласованным резервным копиям. Регрессия в v0.82 убрала сравнение временных меток при выборе файлов прерванной копии, которые следует сохранить при возобновлении. Подробности см. в примечании выше. (Сообщили: David Youatt, Yogesh Sharma, Stephen Frost.)
  • Исправлен не соответствовавший ISO-8601 формат временной метки в заголовках авторизации S3. AWS и некоторые шлюзы допускали дополнение часов пробелами вместо нулей, а другие — нет. (Исправление: Andrew Schwartz. Рецензирование: David Steele.)
  • Исправлена рекурсивная синхронизация каталогов там, где должен синхронизироваться только указанный каталог. (Сообщили: Craig A. James.)
  • Исправлено ошибочное признание параметров --target-action и --recovery-option недопустимыми при восстановлении с --type=immediate. (Сообщили: Brad Nicholson.)
  • Исправлена ошибка “path not found” команды archive-copy для инкрементных и дифференциальных копий. (Сообщили: yummyliu, Vitaliy Kukharik.)
  • Исправлен сбой построения манифеста, когда два или более файла в PGDATA являются ссылками на один каталог. (Сообщили: Vitaliy Kukharik.)
  • Исправлен сбой дельта-восстановления при отсутствии файла, на который указывает ссылка.
  • Исправлена ошибка выборочного восстановления, когда в кластере существует только одна пользовательская база данных. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Nj Baliyan.)

Улучшения:

  • Клиент HTTP улучшен: если сервер не задаёт content-length, устанавливается значение 0. S3 и шлюзы всегда задают content-length или transfer-encoding, но HTTP 1.1 этого не требует, и прокси, например HAProxy, могут не включать ни один из этих заголовков. (Предложили: Adam K. Sumner.)
  • Улучшена производительность клиента HTTPS. При буферизации теперь учитываются байты pending в сокете, если они есть, вместо полной зависимости от select(). В некоторых случаях последние байты не сбрасывались до закрытия соединения.
  • Улучшена производительность удаления S3. Константа S3_BATCH_MAX была заменена жёстко заданным значением 2, вероятно во время тестирования.
  • Повышена эффективность синхронизации каталогов при резервном копировании и восстановлении. При большом числе небольших таблиц обход всего каталога может быть очень затратным. Манифест резервной копии содержит список путей, который теперь используется для синхронизации вместо обхода каталога резервного копирования или восстановления. Неиспользуемая функция рекурсивной синхронизации каталогов удалена.

Исправления ошибок в документации:

  • В документацию добавлены сведения о поддержке 32-битных систем и предостережения. Поддержка 32-битных систем появилась в v1.26. (Сообщили: Viorel Tabara.)

Улучшения документации:

  • Уточнено, что бакеты S3 должен создавать пользователь. (Предложили: David Youatt.)
  • Обновлено устаревшее описание параметра spool-path.

Примечания к выпуску v1.28

Удаление stanza

Выпущен 1 февраля 2018

Исправления ошибок:

  • Исправлена невозможность восстановления одной базы данных в табличном пространстве с помощью –db-include. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Chiranjeevi Ravilla.)
  • При сопоставлении archive.info с backup.info теперь выбирается последний db-id. Это обеспечивает корректное сопоставление при дублировании system-id и db-version, например после отмены pg_upgrade. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Adam K. Sumner.)
  • Исправлено чрезмерно многословное сообщение об ошибке недопустимой команды. (Сообщили: Jason O’Donnell.)

Новые возможности:

  • Добавлена команда stanza-delete для удаления неиспользуемых stanza. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Magnus Hagander.)

Улучшения:

  • Команда stanza-create улучшена: она больше не выдаёт ошибку, если stanza уже существует. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения документации:

  • В документации stanza-create --force усилено предостережение об осторожности при использовании. (Предложили: Jason O’Donnell.)

Примечания к выпуску v1.27

Исправления ошибок и документация

Выпущен 19 декабря 2017

Исправления ошибок:

  • Исправлено подавление ошибок места выполнения backup и restore. Если задан сервер резервного копирования, резервное копирование следует разрешать только на нём, а восстановление — только на сервере базы данных, если не создана альтернативная конфигурация, игнорирующая удалённый сервер. (Сообщили: Lardière Sébastien.)
  • Исправлено отсутствие удаления WAL по сроку хранения в PostgreSQL 10. Причиной было неверное регулярное выражение, ожидавшее формат X.X для всех основных версий PostgreSQL. (Сообщили: Adam Brusselback.)
  • Исправлена передача параметра --no-config дочерним процессам. Без него дочерние процессы всё равно читали локальный файл конфигурации, что могло вызывать неожиданное поведение.
  • Команда info исправлена: вывод "db (prior)" исключён, если для предыдущей версии кластера нет резервных копий или архивов. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Stephen Frost.)

Дополнения к документации:

  • Документирована связь между параметрами archive-copy и archive-check. (Предложили: Markus Nullmeier.)
  • Улучшена справочная документация archive-copy.

Примечания к выпуску v1.26

Шифрование репозитория

Выпущен 21 ноября 2017

Исправления ошибок:

  • Исправлена проблема, из-за которой копирование больших манифестов при восстановлении могло завершаться сбоем. (Сообщили: Craig A. James.)
  • Исправлено неверное смещение WAL для 32-битных архитектур. (Исправление: Javier Wilson. Рецензирование: David Steele.)
  • Исправлено получение WAL для старых версий базы данных. После stanza-upgrade должна сохраняться возможность восстановления резервных копий предыдущей версии и восстановления с помощью archive-get. Однако archive-get проверяла только последние версию и идентификатор базы данных и завершалась сбоем. Также исправлены проблемы многократного появления одной и той же пары версии и идентификатора базы данных в истории. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Clinton Adams.)
  • Исправлена проблема корректного назначения при восстановлении групп резервной копии, не сопоставленных с именем. Если при копировании невозможно сопоставить группу с именем, она сохраняется в манифесте как false; затем при восстановлении используется группа владельца $PGDATA, а если это невозможно — группа текущего пользователя. Эта логика работала неверно: выбранная группа перезаписывала пользователя, оставляя группу неопределённой, а пользователя — ошибочно равным группе. (Сообщили: Jeff McCormick.)
  • Исправлена передача параметров удалённым процессам. Если задавалось несколько баз данных, передавались путь, порт и путь сокета db1 независимо от того, к какой базе шло обращение. (Сообщили: uspen.)

Новые возможности:

  • Поддержка шифрования репозитория. (Авторы: Cynthia Shang, David Steele.)

Улучшения:

  • При --compress-level-network=0 фильтр gzip отключается. Ранее фильтр использовался с уровнем сжатия 0, создавая накладные расходы без какой-либо пользы.
  • Улучшена производительность распаковки фильтра gzip.

Дополнения к документации:

  • Добавлен шаблон для улучшения начального сбора информации при подаче обращений. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения документации:

  • Уточнено использование параметра archive-timeout и описано его отличие от настройки PostgreSQL archive_timeout. (Авторы: Cynthia Shang. Рецензирование: David Steele. Предложили: Keith Fiske.)

Новые возможности набора тестов:

  • Автоматизированные тесты для 32-битной архитектуры i386/i686.

Примечания к выпуску v1.25

Улучшения производительности S3

Выпущен 24 октября 2017

Исправления ошибок:

  • Исправлено игнорирование пользовательских значений параметра compress-level. (Сообщили: Jens Wilke.)
  • Удалена ошибка при обнаружении пересекающихся временных шкал. Такие шкалы допустимы во многих сценариях восстановления на заданный момент времени (PITR). (Сообщили: blogh.)
  • Исправлены случаи, когда database-id выводился не как целое число в выводе JSON команды info. (Исправление: Cynthia Shang. Рецензирование: David Steele. Сообщили: Jason O’Donnell.)

Новые возможности:

  • Улучшена производительность запросов списка в S3. Начальная буквальная часть выражения фильтра используется для создания поискового префикса, что часто позволяет сохранить достаточно малый объём запроса и избежать ограничения частоты запросов. (Предложили: Mihail Shvein.)

Новые возможности набора тестов:

  • Добавлены тесты производительности ввода-вывода.

Примечания к выпуску v1.24

Новые исключения из резервного копирования

Выпущен 28 сентября 2017

Исправления ошибок:

  • Исправлена выдача предупреждений вместо сообщений журнала меньшего приоритета при инициализации резервного копирования с резервного сервера. (Сообщили: uspen.)
  • Исправлена передача некоторых параметров db-*, например db-port, удалённым процессам. (Сообщили: uspen.)

Новые возможности:

  • Из резервного копирования исключено содержимое pg_snapshots, pg_serial, pg_notify и pg_dynshmem, поскольку оно воссоздаётся при запуске.
  • Из резервного копирования исключены файлы pg_internal.init, поскольку они воссоздаются при запуске.

Улучшения:

  • Файл журнала открывается после полного отделения асинхронного процесса от основного, чтобы основной процесс тоже не писал в этот файл. (Предложили: Jens Wilke.)

Дополнения к документации:

  • Добавлена настройка SSH без пароля.

Улучшения документации:

  • В документации master переименован в primary в соответствии с терминологией PostgreSQL.

Примечания к выпуску v1.23

Несколько резервных серверов и поддержка PostgreSQL 10

Выпущен 3 сентября 2017

Исправления ошибок:

  • Исправлена проблема, из-за которой сжатие растущих файлов могло прерываться. (Сообщили: Jesper St John, Aleksandr Rogozin.)
  • Исправлена отправка сообщений keep-alive из локального процесса удалённому. (Сообщили: William Cox.)

Новые возможности:

  • Для резервного копирования с резервного сервера можно настроить до семи резервных серверов. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Поддержка PostgreSQL 10.
  • При чтении данных XML разрешён content-length наряду с передачей по частям для улучшения совместимости со сторонними шлюзами S3. (Предложили: Victor Gdalevich.)

Улучшения:

  • Увеличен тайм-аут HTTP для S3.
  • Добавлены повторные попытки HTTP для устойчивости к временным сетевым ошибкам S3.

Исправления ошибок в документации:

  • Исправлена генерация документации: на странице конфигурации теперь включаются краткие описания разделов. (Исправление: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.22

Исправление повторных попыток S3

Выпущен 9 августа 2017

Исправления ошибок:

  • Исправлена проблема аутентификации при повторной попытке S3.

Примечания к выпуску v1.21

Улучшенный вывод info и параметр порта SSH

Выпущен 8 августа 2017

Исправления ошибок:

  • Каталог archive_status теперь воссоздаётся при восстановлении для поддержки PostgreSQL 8.3, который не делает этого автоматически, в отличие от более новых версий. (Сообщили: Stephen Frost.)
  • Исправлена проблема, из-за которой после stanza-upgrade мог оставаться пустой каталог архива старой версии PostgreSQL. (Исправление: Cynthia Shang. Рецензирование: David Steele.)

Новые возможности:

  • Команда info изменена: в текстовом выводе и JSON отображаются идентификатор архива и минимальный/максимальный WAL, находящиеся в архиве для текущей и предыдущей, если она есть, версии кластера базы данных. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлены параметры --backup-ssh-port и --db-ssh-port для поддержки нестандартных портов SSH. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения:

  • При внутренней ошибке S3 (500) выполняется повторная попытка.

Исправления ошибок в документации:

  • Описание --online исправлено с учётом контекста команды.

Дополнения к документации:

  • В инструкции по ручной установке добавлено создание /etc/pgbackrest.conf.

Улучшения документации:

  • Параметры репозитория перенесены в отдельный раздел справки по командам и командной строке. (Предложили: Stephen Frost.)

Примечания к выпуску v1.20

Исправление критической ошибки 8.3/8.4

Выпущен 27 июня 2017

ВАЖНОЕ ПРИМЕЧАНИЕ: Для установок PostgreSQL 8.3 и 8.4, использующих табличные пространства, следует немедленно обновиться с любого выпуска v1 и выполнить полное резервное копирование. Ошибка препятствовала резервному копированию табличных пространств только в этих версиях. PostgreSQL ≥ 9.0 не затронуты этой ошибкой.

Исправления ошибок:

  • Исправлена проблема, препятствовавшая резервному копированию табличных пространств в PostgreSQL ≤ 8.4.
  • Исправлено отсутствие флага при сборке библиотеки C, приводившее к несовместимому двоичному файлу на 32-битных системах. (Сообщили: Adrian Vondendriesch.)

Новые возможности:

  • Добавлены параметры s3-repo-ca-path и s3-repo-ca-file для систем, где IO::Socket::SSL не находит центры сертификации автоматически, например RHEL7, или для загрузки собственных центров сертификации. (Предложили: Scott Frazer.)

Новые возможности набора тестов:

  • В CI добавлена сборка документации.

Примечания к выпуску v1.19

Поддержка S3

Выпущен 12 июня 2017

Исправления ошибок:

  • Команда info исправлена: минимальный и максимальный WAL архива отображаются для текущей версии базы данных. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Команда backup исправлена: если резервный сервер не настроен и/или недоступен, параметр backup-standby сбрасывается, а копирование продолжается с первичного сервера. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Исправлены предупреждения конфигурации удалённого процесса, вызывавшие ошибки в основном процессе. (Исправление: Cynthia Shang. Рецензирование: David Steele.)

Новые возможности:

  • Поддержка репозитория Amazon S3. (Рецензирование: Cynthia Shang.)

Исправления ошибок в документации:

  • Неверный параметр max-archive-mb в справочнике конфигурации заменён на archive-queue-max.
  • Добавлен отсутствовавший sudo в разделе установки. (Исправление: Lætitia. Рецензирование: David Steele.)

Примечания к выпуску v1.18

Обновление stanza, рефакторинг и улучшения блокировок

Выпущен 12 апреля 2017

Исправления ошибок:

  • Исправлена проблема, при которой операции только для чтения с локальными рабочими процессами, например restore, создавали блокировки записи, способные мешать параллельной archive-push. (Сообщили: Jens Wilke.)

Новые возможности:

  • Добавлена команда stanza-upgrade для обновления stanza после перехода на новую основную версию PostgreSQL. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлена проверка pgbackrest.conf, выдающая предупреждения о недопустимых параметрах или их размещении в неверной секции. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения:

  • Упрощена схема блокировок. Теперь блокировки записи для команд archive-push и backup удерживает только основной процесс, а не все локальные и удалённые рабочие процессы, как раньше.
  • Временные метки файлов в каталогах резервных копий больше не приводятся к значениям в каталоге кластера. Первоначально это требовалось для возобновления резервного копирования, но теперь возобновление реализовано с помощью контрольных сумм.
  • Улучшено сообщение об ошибке, когда команда restore обнаруживает postmaster.pid. (Предложили: Yogesh Sharma.)
  • Коды возврата перенумерованы в диапазоне от 25 до 125, чтобы PostgreSQL не интерпретировал некоторые из них как исключения фатальных сигналов. (Предложили: Yogesh Sharma.)

Примечания к выпуску v1.17

Исправление ошибки контрольных сумм страниц

Выпущен 13 марта 2017

Исправления ошибок:

  • Исправлена проблема, при которой недавно инициализированные, но не использованные страницы вызывали предупреждения о контрольных суммах страниц. (Сообщили: Stephen Frost.)

Примечания к выпуску v1.16

Улучшения контрольных сумм страниц, CI и тестирование пакетов

Выпущен 2 марта 2017

Исправления ошибок:

  • Исправлены предупреждения о контрольных суммах страниц после первого сегмента для таблиц размером более 1GB. (Сообщили: Stephen Frost.)
  • Исправлены ложные предупреждения о невыровненных по страницам файлах pg_filenode.map и pg_internal.init для баз данных, созданных с табличным пространством, отличным от выбранного по умолчанию. (Сообщили: blogh.)

Новые возможности набора тестов:

  • Непрерывная интеграция с помощью travis-ci.
  • Автоматизированная сборка пакетов Debian для всех поддерживаемых дистрибутивов.

Примечания к выпуску v1.15

Рефакторинг и исправления ошибок

Выпущен 13 февраля 2017

Исправления ошибок:

  • Исправлена регрессия, появившаяся в v1.13, которая могла вызывать сбой резервного копирования при удалении файлов, например таблиц, во время построения манифеста. (Сообщили: Navid Golpayegani.)

Примечания к выпуску v1.14

Рефакторинг и исправления ошибок

Выпущен 13 февраля 2017

Исправления ошибок:

  • Исправлена проблема, при которой после ошибки archive-push повторная попытка не выполнялась, а PostgreSQL бесконечно получал ошибки, пока файл .error не удаляли вручную. (Сообщили: Jens Wilke.)
  • Исправлено состояние гонки при параллельном архивировании, когда одновременные попытки нескольких процессов создать новые каталоги вызывали ошибку. (Сообщили: Jens Wilke.)

Улучшения:

  • Улучшена производительность получения wal archive min/max командой info. (Предложили: Jens Wilke.)

Дополнения к документации:

  • Документация асинхронного архивирования обновлена для более точного описания работы нового метода и его отличий от старого. (Предложили: Jens Wilke.)

Примечания к выпуску v1.13

Параллельное архивирование, создание stanza, улучшенные info и check

Выпущен 5 февраля 2017

ВАЖНОЕ ПРИМЕЧАНИЕ: Новая реализация асинхронного архивирования больше не копирует WAL в отдельную очередь. WAL, оставшийся в старой очереди после обновления до 1.13, останется необработанным и не будет отправлен в репозиторий. Чтобы этого избежать, остановите архивирование, задав archive_command = false. Затем опустошите асинхронную очередь, выполнив pgbackrest --stanza=[stanza-name] archive-push, и дождитесь завершения процесса. Проверьте, что очередь в [spool-path]/archive/[stanza-name]/out пуста. Наконец, установите 1.13 и восстановите исходное значение archive_command. ВАЖНОЕ ПРИМЕЧАНИЕ: Команда stanza-create больше не является необязательной: её необходимо выполнить, прежде чем резервное копирование или архивирование станет возможным для новой stanza. Для уже существующих stanza выполнять stanza-create не требуется.

Исправления ошибок:

  • Исправлено присваивание const, вызывавшее предупреждение компилятора в библиотеке C. (Исправление: Adrian Vondendriesch. Рецензирование: David Steele.)
  • Исправлены несколько пропущенных синхронизаций каталогов для параметра --repo-sync.
  • Исправлена проблема, при которой отсутствие пользователя или группы при восстановлении могло вызывать ошибку “uninitialized value” в File->owner(). (Сообщили: Leonardo GG Avellar.)
  • Исправлено отсутствие ожидаемого значения в ошибках несовпадения протокола.
  • Исправлено необоснованное сообщение журнала archive-get, указывавшее, что код выхода 1 означает аварийное завершение.

Новые возможности:

  • Улучшена многопроцессная реализация асинхронного архивирования.
  • Команда stanza-create улучшена: теперь она восстанавливает повреждённые репозитории в большинстве случаев и достаточно надёжна, чтобы стать обязательной. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Команда check улучшена для запуска на резервном сервере, хотя выполняются только основные проверки, поскольку pg_switch_xlog() нельзя вызвать на реплике. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • В команду info добавлены диапазоны WAL архива и резервных копий.
  • Добавлено предупреждение о необходимости обновить pg_tablespace.spclocation при переназначении табличных пространств в PostgreSQL < 9.2. (Авторы: blogh. Рецензирование: David Steele.)
  • Для команд archive-get, restore, info и check отменена необходимость удалённой блокировки, поскольку эти операции выполняют только чтение. (Предложили: Michael Vitale.)

Улучшения:

  • Заголовок файла журнала не выводится до записи первого сообщения. (Предложили: Jens Wilke.)
  • Снижена вероятность ложных ошибок контрольных сумм из-за частично записанных страниц путём фильтрации по LSN начала резервного копирования.
  • Из флагов сборки библиотеки C удалена оптимизация, специфичная для Intel. (Авторы: Adrian Vondendriesch. Рецензирование: David Steele.)
  • Удалён параметр --lock. Он появился до того, как каталог блокировок стало можно размещать вне репозитория, и теперь устарел.
  • Добавлен параметр --log-timestamp, позволяющий отключить временные метки в журнале. Прежде всего он используется, чтобы обходиться без фильтров при автоматическом создании документации.
  • При невозможности преобразовать относительный путь в абсолютный возвращается корректный код ошибки. (Предложили: Yogesh Sharma.)

Дополнения к документации:

  • В руководство пользователя добавлена документация параметра process-max. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.12

Контрольные суммы страниц, конфигурация и исправления ошибок

Выпущен 12 декабря 2016

ВАЖНОЕ ПРИМЕЧАНИЕ: В предыдущих выпусках можно было без ошибки задать в командной строке параметры, недопустимые для текущей команды. Теперь недопустимые параметры вызывают ошибку, поэтому во избежание нарушений работы необходимо внимательно проверить параметры командной строки в используемой среде.

Исправления ошибок:

  • Исправлена проблема, при которой недопустимые для указанной команды параметры можно было передать в командной строке без ошибки. Они игнорировались и не меняли поведение, но это вызывало путаницу. Теперь недопустимые параметры вызывают ошибку. (Сообщили: Nikhilchandra Kulkarni.)
  • Исправлено отсутствие внутренних символических ссылок для табличных пространств в репозитории. Проблема проявлялась только при попытке вручную запустить кластеры на месте с помощью снимков файловой системы и не затрагивала обычное резервное копирование и восстановление.
  • Исправлена невозможность вывода ошибок в консоль до инициализации системы журналирования, например при разборе параметров. Коды ошибок возвращались корректно, поэтому неуспешный процесс не мог выглядеть успешно завершённым. (Сообщили: Adrian Vondendriesch.)
  • Исправлена некорректная передача удалённому процессу параметра db-port, заданного на сервере резервного копирования, если он относился не к первой настроенной базе данных. (Сообщили: Michael Vitale.)

Новые возможности:

  • Добавлен параметр --checksum-page, позволяющий pgBackRest проверять контрольные суммы страниц в файлах данных, если контрольные суммы включены в PostgreSQL >= 9.3. Эта возможность требует библиотеки C, которая поначалу может отсутствовать в пакетах ОС. Параметр включается автоматически, когда библиотека присутствует и в кластере включены контрольные суммы. (Предложили: Stephen Frost.)
  • Добавлен параметр --repo-link, позволяющий отключить внутренние символические ссылки, если репозиторий находится в файловой системе без их поддержки. Это не влияет на возможности pgBackRest, однако вспомогательная ссылка latest и внутренние ссылки табличных пространств не создаются, что влияет на возможность ручного запуска кластеров на месте с помощью снимков файловой системы.
  • Добавлен параметр --repo-sync для отключения синхронизации каталогов репозитория в файловых системах, которые её не поддерживают, например NTFS.
  • Добавлена предсказуемая запись журнала, указывающая на успешное завершение команды. Например, успешное резервное копирование завершается сообщением: INFO: backup command end: completed successfully. (Предложили: Jens Wilke.)

Улучшения:

  • Для простоты файл pg_control теперь копируется вместе с остальными файлами, а не отдельно в конце процесса. Команде backup это поведение не требуется, а restore копирует его во временный файл, который переименовывается в конце восстановления.

Исправления ошибок в документации:

  • Исправлено подавление исключений при сборке PDF.
  • Исправлена регрессия ссылок на разделы, появившаяся в v1.10.

Дополнения к документации:

  • В раздел быстрого начала работы добавлены сведения о сроках хранения.

Примечания к выпуску v1.11

Исправление эффективности асинхронного архивирования

Выпущен 17 ноября 2016

Исправления ошибок:

  • Исправлена проблема, при которой асинхронное архивирование передавало по одному файлу за запуск вместо пакетной передачи. Эта регрессия появилась в v1.09 и влияла только на эффективность: все сегменты WAL корректно архивировались в асинхронном режиме. (Сообщили: Stephen Frost.)

Примечания к выпуску v1.10

Создание stanza и небольшие исправления ошибок

Выпущен 8 ноября 2016

Исправления ошибок:

  • Исправлена проблема, при которой резервное копирование могло завершаться ошибкой, если между копированиями база данных не изменялась и менялся только pg_control.
  • Исправлена ошибка недопустимой ссылки при одинаковом префиксе путей табличных пространств. (Сообщили: Nikhilchandra Kulkarni.)

Новые возможности:

  • Добавлена команда stanza-create, формализующая создание stanza в репозитории. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения:

  • Из модулей Perl удалены лишние директивы use lib. (Предложили: Devrim Gündüz.)

Примечания к выпуску v1.09

Поддержка 9.6, настраиваемость и исправления ошибок

Выпущен 10 октября 2016

Исправления ошибок:

  • Команда check исправлена: сообщение об ошибке не записывается в журнал, если каталог резервных копий не существует. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Сообщение об ошибке исправлено для корректного отображения команды архивирования при обнаружении недопустимой команды. (Сообщили: Jason O’Donnell.)
  • Исправлена проблема, при которой асинхронный архиватор не запускался, если команде archive-push не хватало места для постановки нового сегмента WAL в очередь. В результате очередь никогда не очищалась без ручного вмешательства, например прямого вызова archive-push. Теперь при нехватке места для новых сегментов WAL PostgreSQL получает ошибки, но асинхронный процесс всё равно запускается, чтобы место в конечном счёте освободилось. (Сообщили: Jens Wilke.)
  • Исправлен тайм-аут удалённого процесса, возникавший, когда локальный процесс вычислял контрольные суммы при возобновлении или восстановлении, но не копировал файлы, оставляя удалённый процесс без работы. (Сообщили: Jens Wilke.)

Новые возможности:

  • В PostgreSQL 9.6 автоматически используется неэксклюзивное резервное копирование.
  • Добавлен параметр cmd-ssh для указания клиента ssh. (Предложили: Jens Wilke.)
  • Добавлен параметр log-level-stderr, определяющий, отправляются ли консольные сообщения журнала в stderr или stdout. По умолчанию он равен warn; это меняет поведение по сравнению с предыдущими версиями, хотя и может быть более интуитивным. Значение log-level-stderr=off сохраняет прежнее поведение. (Предложили: Sascha Biberhofer.)
  • Для соединений с базой данных application_name задаётся равным "pgBackRest [command]". (Предложили: Jens Wilke.)
  • При включённом параметре archive-check проверяется, что archive_mode включён.

Улучшения:

  • Уточнено сообщение о невозможности получить рекомендательную блокировку pgBackRest, чтобы было ясно, что это не блокировка резервного копирования PostgreSQL. (Предложили: Jens Wilke.)
  • В сообщение журнала INFO о начале команды включён номер версии pgBackRest.
  • В сообщения журнала INFO о запуске и остановке локального процесса добавлен идентификатор процесса.

Дополнения к документации:

  • В руководство пользователя добавлена документация параметра archive-timeout. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.08

Исправления ошибок и улучшения журналирования

Выпущен 14 сентября 2016

Исправления ошибок:

  • Исправлена проблема, при которой локальные процессы не отключались после завершения и позднее могли завершиться по тайм-ауту. (Сообщили: Todd Vernick.)
  • Исправлен возможный тайм-аут уровня протокола при ожидании появления сегментов WAL в архиве. (Сообщили: Todd Vernick.)

Улучшения:

  • Вывод в файл журнала кэшируется до его создания, чтобы журнал был полнее.

Примечания к выпуску v1.07

Переход от потоков к процессам и исправления ошибок

Выпущен 7 сентября 2016

Исправления ошибок:

  • Исправлено копирование табличных пространств с первичного сервера при резервном копировании с резервного сервера.
  • Команда check исправлена: сведения о резервных копиях проверяются удалённо, а не только локально. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Исправлена проблема, при которой retention-archive не задавался автоматически при retention-archive-type=diff, из-за чего архив удалялся менее агрессивно, чем предполагалось. (Исправление: Cynthia Shang. Рецензирование: David Steele.)

Новые возможности:

  • Потоки Perl заменены процессами для улучшения совместимости и производительности.
  • Исключено содержимое каталога $PGDATA/pg_replslot, чтобы слоты репликации первичного сервера не попадали в резервную копию.
  • Значения archive-start и archive-stop теперь заполняются в backup.manifest даже при archive-check=n. (Предложили: Jens Wilke.)
  • Добавлены предупреждения, если настройки хранения архива могут не дать предполагаемого результата или допускают бессрочное хранение. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Экспериментальная поддержка неэксклюзивного резервного копирования в PostgreSQL 9.6 rc1. Изменения версий control/catalog/WAL в последующих кандидатах на выпуск могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.

Исправления ошибок в документации:

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

Дополнения к документации:

  • Документация по срокам хранения архива. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.06

Резервное копирование с резервного сервера и исправления ошибок

Выпущен 25 августа 2016

Исправления ошибок:

  • Исправлена проблема, при которой ссылка табличного пространства, указывающая на другую ссылку, не вызывала ошибку, а приводила к полному пропуску табличного пространства. (Сообщили: Michael Vitale.)
  • Исправлена проблема, при которой параметры, не допускающие нескольких значений, можно было без ошибки задавать в pgbackrest.conf несколько раз. (Сообщили: Michael Vitale.)
  • Исправлено отсутствие автоматического увеличения protocol-timeout при увеличении db-timeout. (Сообщили: Todd Vernick.)

Новые возможности:

  • Резервное копирование с резервного кластера. Соединение с первичным кластером по-прежнему требуется для начала и завершения резервного копирования и копирования нереплицируемых файлов, однако подавляющее большинство файлов копируется с резервного сервера для снижения нагрузки на первичный.
  • Более гибкая конфигурация баз данных. На сервере резервного копирования можно настроить и первичный, и резервный серверы; pgBackRest автоматически определит, какой из них первичный. Поэтому при использовании отдельного сервера резервного копирования после переключения при отказе с первичного сервера на резервный изменять конфигурацию копирования не требуется.
  • При резервном копировании исключаются каталоги, которые PostgreSQL очищает, воссоздаёт или обнуляет при запуске, в том числе pgsql_tmp и pg_stat_tmp. Помимо уже исключавшихся файлов backup_label.old, postmaster.opts, postmaster.pid, recovery.conf, recovery.done, теперь исключается и postgresql.auto.conf.tmp.
  • Экспериментальная поддержка неэксклюзивного резервного копирования в PostgreSQL 9.6 beta4. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.

Улучшения:

  • Улучшено сообщение об ошибке для ссылок на другие ссылки при построении манифеста.
  • В сообщение об ошибке обнаружения относительных путей в archive-push или archive-get добавлены подсказки.
  • Сообщения журнала резервного копирования улучшены: они указывают сервер, с которого копируются файлы.

Примечания к выпуску v1.05

Исправление проверки ссылок табличных пространств

Выпущен 9 августа 2016

Исправления ошибок:

  • Исправлена проблема, при которой пути табличных пространств, содержащие $PGDATA как подстроку, ошибочно считались подкаталогами $PGDATA. Также несколько усилена проверка относительных путей. (Сообщили: Chris Fort.)

Дополнения к документации:

  • Добавлена документация по планированию резервного копирования с помощью cron. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Улучшения документации:

  • Список запланированных задач перенесён с сайта pgBackRest в вики репозитория GitHub. (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.04

Различные исправления ошибок

Выпущен 30 июля 2016

Исправления ошибок:

  • Исправлено создание лишнего удалённого процесса, из-за которого многопоточное резервное копирование или восстановление могло завершаться по тайм-ауту и/или вызывать конфликт блокировок. (Сообщили: Michael Vitale.)
  • Исправлена необязательность db-path для команды check, из-за которой при его отсутствии срабатывало утверждение assert вместо понятного сообщения об ошибке. (Сообщили: Michael Vitale.)
  • Команда check исправлена для выдачи ошибки при несовпадении версии или идентификатора базы данных с архивом. (Исправление: Cynthia Shang. Рецензирование: David Steele.)
  • Исправлена проблема, при которой удалённый процесс мог пытаться запустить собственный удалённый процесс, если на сервере базы данных в pgbackrest.conf отсутствовал параметр backup-host. (Сообщили: Lardière Sébastien.)
  • Исправлено включение содержимого pg_xlog в резервную копию, если каталог был символической ссылкой. Это не вызывало проблем при восстановлении, но расходовало место.
  • Исправлен неверный вызов log() в функциях блокировок.

Новые возможности:

  • Экспериментальная поддержка неэксклюзивного резервного копирования в PostgreSQL 9.6 beta3. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.

Улучшения:

  • Подавлен вывод приветствий в соединениях протокола SSH.
  • Сообщения об удалённых ошибках улучшены и указывают сервер, на котором возникла ошибка.
  • Все типы удалённых процессов теперь получают блокировки. Исключения остались со времён, когда тестовая среда и pgBackRest работали в одной виртуальной машине, и больше не применимы.

Дополнения к документации:

  • Добавлено пояснение, почему значение по умолчанию параметра backrest-user — backrest. (Предложили: Michael Vitale.)
  • Обновлены сведения о доступности пакетов на поддерживаемых платформах. (Предложили: Michael Vitale.)

Примечания к выпуску v1.03

Команда check и исправления ошибок

Выпущен 2 июля 2016

Исправления ошибок:

  • Исправлена проблема, при которой обработка множества небольших файлов при многопоточном backup могла вытеснять отправку keep-alives. Они также полностью отсутствовали при возобновлении одно- и многопоточного backup и вычислении контрольных сумм в restore. (Сообщили: Janice Parkinson, Chris Barber.)
  • Исправлен отказ команды expire запускаться при явном вызове из командной строки, если задан параметр db-host. При автоматическом запуске expire после backup проблемы не было (Сообщили: Chris Barber.)
  • Исправлено выполнение проверки archive_command даже при отключённом параметре archive-check.

Новые возможности:

  • Добавлена команда check для проверки корректной настройки pgBackRest для архивирования и резервного копирования. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлен параметр protocol-timeout. Ранее protocol-timeout задавался как db-timeout + 30 секунд.
  • Невозможность завершить удалённые процессы в конце резервного копирования больше не вызывает исключение. Вместо этого выдаётся предупреждение с рекомендацией увеличить protocol-timeout.
  • Экспериментальная поддержка неэксклюзивного резервного копирования в PostgreSQL 9.6 beta2. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения.

Улучшения:

  • Улучшена обработка пользователей и групп, записанных при резервном копировании, но отсутствующих на сервере восстановления. Также явно обработан случай, когда пользователь или группа не сопоставлены с именем.
  • Обработка параметров стала значительно строже. Ранее команда могла использовать параметр, не назначенный ей явно. Особенно это относилось к backup-host и db-host, определяющим место выполнения.

Улучшения документации:

  • Добавлена возможность использовать фиксированную дату в документации для воспроизводимых сборок. (Предложили: Adrian Vondendriesch.)
  • В руководство пользователя добавлена документация асинхронного архивирования. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Рекомендуемый каталог установки модулей pgBackRest теперь — /usr/share/perl5, поскольку в новых версиях Perl /usr/lib/perl5 удалён из пути поиска.
  • Добавлены инструкции по удалению предыдущих версий pgBackRest.

Примечания к выпуску v1.02

Исправление ошибки для Perl 5.22

Выпущен 2 июня 2016

Исправления ошибок:

  • Исправлено использование sprintf() в связи с новыми ограничениями Perl 5.22. Параметры, не указанные в строке формата, больше не допускаются. (Исправление: Adrian Vondendriesch. Рецензирование: David Steele.)

Исправления ошибок в документации:

  • Исправлен синтаксис, несовместимый с Perl 5.2X. (Исправление: Christoph Berg, Adrian Vondendriesch. Рецензирование: David Steele.)
  • Исправлены абсолютные пути, использовавшиеся для логотипа PDF. (Сообщили: Adrian Vondendriesch.)

Дополнения к документации:

  • Примечания к выпускам теперь разбиты на разделы, чётко отделяющие ошибки, новые возможности и рефакторинг. Добавлен раздел «Дополнительные примечания» для изменений документации и набора тестов, не затрагивающих основной код.
  • Добавлена генерация страниц man. (Авторы: Adrian Vondendriesch, David Steele.)
  • Журнал изменений оставался последней частью документации, представленной только в Markdown. Написан преобразователь, позволяющий выводить документ стандартными средствами рендеринга. Теперь журнал изменений размещается на сайте и переименован в «Выпуски». (Авторы: Cynthia Shang. Рецензирование: David Steele.)

Примечания к выпуску v1.01

Расширенный вывод info, выборочное восстановление и поддержка 9.6

Выпущен 17 мая 2016

Новые возможности:

  • Текстовый вывод команды info расширен: добавлены временные метки, размеры и список зависимостей для всех резервных копий. (Авторы: Cynthia Shang. Рецензирование: David Steele.)
  • Добавлено выборочное восстановление баз данных из резервной копии кластера. Оно может значительно экономить место и время, если восстанавливаются только отдельные базы данных. Невосстановленные базы данных недоступны, но их необходимо удалить вручную, чтобы они были исключены из общего системного каталога. (Рецензирование: Cynthia Shang, Greg Smith, Stephen Frost. Предложили: Stephen Frost.)
  • Экспериментальная поддержка неэксклюзивного резервного копирования в PostgreSQL 9.6 beta1. Изменения версий control/catalog/WAL в последующих бета-версиях могут нарушить совместимость, но pgBackRest будет обновляться с каждым выпуском для её сохранения. (Рецензирование: Cynthia Shang.)

Примечания к выпуску v1.00

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

Выпущен 14 апреля 2016

ВАЖНОЕ ПРИМЕЧАНИЕ: Этот выпуск с обязательным одновременным переходом нарушает совместимость со старыми версиями pgBackRest. Изменены формат манифеста, структура на диске, схема конфигурации, имена исполняемых файлов и пути. Необходимо создать новый репозиторий для резервных копий этой версии pgBackRest и некоторое время сохранять старый репозиторий на случай восстановления. Для восстановления из прежнего репозитория потребуется прежняя версия pgBackRest, но благодаря изменению имён можно одновременно установить 1.00 и предыдущую версию pgBackRest. Подробности изменений приведены ниже.

Новые возможности:

  • Реализована новая схема конфигурации, которая должна быть значительно проще в использовании. Подробности приведены в руководстве пользователя и справочнике конфигурации; в простой конфигурации все параметры теперь можно разместить в секции stanza. Общие для нескольких stanza параметры можно разместить в секции [global]. В более сложных конфигурациях по-прежнему можно использовать секции команд, хотя необходимость в этом должна возникать редко. (Предложили: Michael Renner.)
  • Параметр repo-path теперь всегда указывает на репозиторий с резервными копиями и архивом, локальный или удалённый, поэтому параметр repo-remote-path удалён. Новый параметр spool-path задаёт расположение очереди сегментов WAL при асинхронном архивировании. Локальный репозиторий больше не требуется.
  • Имя файла конфигурации по умолчанию изменено с pg_backrest.conf на pgbackrest.conf. Это обеспечивает согласованность с другими переименованиями и предотвращает случайную загрузку старой конфигурации при переходе на 1.00. (Предложили: Michael Renner, Stephen Frost.)
  • Каталог репозитория по умолчанию изменён с /var/lib/backup на /var/lib/pgbackrest. (Предложили: Michael Renner, Stephen Frost.)
  • Файлы блокировок теперь по умолчанию хранятся в /tmp/pgbackrest. В настоящее время предпочтителен /run/pgbackrest, но для него потребовались бы скрипты инициализации, не входящие в этот выпуск. Каталог блокировок можно настроить параметром lock-path.
  • Файлы журналов теперь по умолчанию хранятся в /var/log/pgbackrest, а дата больше не добавляется к имени, что позволяет управлять ими через logrotate. Каталог журналов можно настроить параметром log-path. (Предложили: Stephen Frost.)
  • Имя исполняемого файла изменено с pg_backrest на pgbackrest. (Предложили: Michael Renner, Stephen Frost.)
  • Все файлы и каталоги, на которые ведут ссылки из PGDATA, теперь включаются в резервную копию. По умолчанию ссылки восстанавливаются непосредственно в PGDATA как файлы или каталоги. Параметр --link-all позволяет восстановить все ссылки в исходные расположения. Параметр --link-map позволяет переназначить ссылку на новый путь.
  • Параметр --tablespace удалён и заменён на --tablespace-map-all, имя которого должно яснее отражать его назначение.
  • Добавлен уровень журнала detail, выводящий больше информации, чем info, но менее подробный, чем debug.

Выпуски до стабильной версии

Примечания к выпуску v0.92

Исправление пути репозитория в командной строке

Выпущен 6 апреля 2016

Исправления ошибок:

  • Исправлена проблема, при которой основной процесс передавал удалённому --repo-remote-path вместо --repo-path, из-за чего файлы блокировок создавались в каталоге репозитория по умолчанию (/var/lib/backup), обычно с последующим сбоем. Проблема возникала только при задании --repo-remote-path в командной строке, а не в pg_backrest.conf. (Сообщили: Jan Wieck.)

Примечания к выпуску v0.91

Исправление ошибки табличных пространств и небольшие улучшения

Выпущен 22 марта 2016

ВАЖНОЕ ИСПРАВЛЕНИЕ ДЛЯ ТАБЛИЧНЫХ ПРОСТРАНСТВ: В версии 0.90 случайно изменился формат репозитория, из-за чего резервная копия на диске перестала быть корректным кластером PostgreSQL, если содержала табличные пространства. Это затрагивало только тех, кто восстанавливал кластеры PostgreSQL прямым копированием резервных копий вместо команды restore. Однако исправление нарушает совместимость со старыми копиями, содержащими табличные пространства, независимо от способа восстановления: pgBackRest выдаст ошибки и откажется восстанавливать их. Сразу после установки версии 0.91 следует создать новые полные резервные копии всех кластеров с табличными пространствами. Для восстановления старых копий следует использовать версию pgBackRest, соответствующую версии копии.

Исправления ошибок:

  • Исправлена несовместимость репозитория, появившаяся в pgBackRest 0.90. (Сообщили: Evan Benoit.)

Новые возможности:

  • При резервном копировании global/pg_control копируется последним.
  • Файлы .info и .manifest сначала записываются во временное расположение, затем перемещаются в конечное и синхронизируются с помощью fsync.
  • Параметр --no-start-stop переименован в --no-online.

Новые возможности набора тестов:

  • Статический анализ исходного кода с помощью Perl-Critic; в настоящее время проверка проходит на уровне gentle.

Примечания к выпуску v0.90

Поддержка 9.5, различные улучшения и небольшие исправления ошибок

Выпущен 7 февраля 2016

Исправления ошибок:

  • Исправлена ошибка конфигурации при задании --no-archive-check. (Сообщили: Jason O’Donnell.)
  • Исправлен возможный сбой следующего archive-push из-за временного файла WAL, оставшегося после сбоя системы в определённый момент.
  • Параметр retention-archive теперь можно безопасно задать меньшим, чем срок хранения резервных копий (retention-full или retention-diff), без дополнительного archive-copy=n. WAL, необходимый для согласованности резервных копий вне срока хранения архива, будет сохранён в архиве. Однако для таких резервных копий PITR в этом случае невозможно.

Новые возможности:

  • При резервном копировании и восстановлении табличных пространств pgBackRest работает только с подкаталогом используемой версии PostgreSQL. Поскольку в табличном пространстве могут сосуществовать несколько версий, особенно при двоичном обновлении, это предотвращает копирование лишних файлов и возможное удаление других версий при восстановлении. Это относится только к PostgreSQL >= 9.0: более ранние версии PostgreSQL не могли совместно использовать каталог табличного пространства.
  • Если archive-check=y, но archive_command не выполняет pg_backrest, выдаётся ошибка. (Авторы: Jason O’Donnell. Рецензирование: David Steele.)
  • Улучшено сообщение об ошибке, когда repo-path или repo-remote-path не существует.
  • Добавлены проверки параметров восстановления --delta и --force, подтверждающие, что целевой каталог является корректным $PGDATA. pgBackRest проверяет наличие PG_VERSION или backup.manifest, оставшегося от прерванного восстановления. Если ни один файл не найден, --delta и --force отключаются, но восстановление продолжается, если каталог $PGDATA и каталоги табличных пространств пусты; при наличии в них файлов операция прерывается.
  • При восстановлении с --set=latest (значение по умолчанию) в журнал выводится фактически восстанавливаемая резервная копия.
  • Поддержка частичных сегментов WAL PostgreSQL 9.5 и параметра recovery_target_action. Значение archive_mode = 'always' пока не поддерживается.
  • Поддержка настройки восстановления recovery_target = 'immediate', появившейся в PostgreSQL 9.4.
  • Добавлены проверки табличных пространств: каталоги или файлы в pg_tblspc, относительные ссылки в pg_tblspc и табличные пространства в $PGDATA. Все три случая вызывают ошибки.

Примечания к выпуску v0.89

Исправление тайм-аута и восстановление из репозиториев только для чтения

Выпущен 24 декабря 2015

Исправления ошибок:

  • Исправлены тайм-ауты длительного удалённого многопоточного резервного копирования и восстановления. Теперь используются сообщения keepalive, чтобы удалённый процесс основного процесса не завершался по тайм-ауту, пока удалённые процессы потоков выполняют работу. Сообщение о тайм-ауте также улучшено для упрощения отладки. (Сообщили: Stephen Frost.)

Новые возможности:

  • Добавлено восстановление из репозитория только для чтения с помощью --no-lock и --log-level-file=off. Параметр --no-lock можно использовать только для восстановления.

Примечания к выпуску v0.88

Документация и небольшие исправления ошибок

Выпущен 22 ноября 2015

Исправления ошибок:

  • Исправлена обязательность параметра --config для команд start/stop. (Сообщили: Dmitry Didovicher.)
  • Исправлена перезапись файлов журналов вместо дополнения. (Сообщили: Stephen Frost, Dmitry Didovicher.)
  • Исправлена обязательность backup-user.

Новые возможности:

  • В каталогах резервных копий репозитория больше не создаются символические ссылки. Они могли указывать практически куда угодно и представлять опасность. При восстановлении символические ссылки по-прежнему воссоздаются. (Предложили: Stephen Frost.)
  • Улучшены сообщения об удалении резервных копий по сроку хранения. Удаление полных и дифференциальных копий записывается одной строкой вместе со списком всех удалённых зависимых копий.
  • Если срок хранения архива не задан явно, он автоматически устанавливается равным сроку хранения полных резервных копий.

Дополнения к документации:

  • В руководство пользователя добавлена документация по дельта-восстановлению, удалению по сроку хранения, выделенным серверам резервного копирования, запуску и остановке pgBackRest и репликации.

Примечания к выпуску v0.87

Сайт и руководство пользователя

Выпущен 28 октября 2015

Новые возможности:

  • Файлы backup_label.old и recovery.done теперь исключаются из резервных копий.

Дополнения к документации:

  • Добавлено новое руководство пользователя, охватывающее основы pgBackRest и некоторые сложные темы, включая PITR. Предстоит добавить ещё многое, но начало положено. (Авторы: David Steele, Stephen Frost. Рецензирование: Michael Renner, Cynthia Shang, Eric Radman, Dmitry Didovicher.)

Примечания к выпуску v0.85

Команды start/stop и небольшие исправления ошибок

Выпущен 8 октября 2015

Исправления ошибок:

  • Исправлен возможный возврат ошибки после успешного завершения резервного копирования или восстановления.
  • Исправлен сбой возобновления, если после неудачного копирования в корневом каталоге резервной копии оставались временные файлы. Такой сценарий был вероятен при прерывании процесса копирования на этапе переноса файлов.

Новые возможности:

  • Добавлены команды stop и start, предотвращающие запуск процессов pgBackRest в системе, где PostgreSQL остановлен или требуется приостановить работу по иной причине.
  • Экспериментальная поддержка PostgreSQL 9.5 beta1. Совместимость может нарушиться при изменении версии control или сигнатуры WAL в будущих версиях, но будет поддерживаться обновлениями каждого выпуска pgBackRest. Все регрессионные тесты проходят, кроме тестов --target-resume, поскольку эта возможность изменилась в 9.5; сегменты WAL .partial пока не тестируются.

Примечания к выпуску v0.82

Рефакторинг, справка командной строки и небольшие исправления ошибок

Выпущен 14 сентября 2015

Исправления ошибок:

  • Исправлена проблема, при которой возобновлённые сжатые резервные копии не сохраняли существующие файлы.
  • Исправлено отсутствие проверки совпадения настроек сжатия и жёстких ссылок с предыдущей копией при возобновлении и инкрементном или дифференциальном копировании.
  • Исправлена возможность начать холодное резервное копирование с --no-start-stop на работающем кластере PostgreSQL без --force.
  • Исправлена возможность запуска потока, даже когда ни одного потока не запрашивалось.
  • Исправлено отсутствие обновления номера версии pgBackRest в backup.info и archive.info после повышения или понижения версии.
  • Исправлено исключение команды info, когда репозиторий не содержал stanza. (Сообщили: Stephen Frost.)
  • Исправлен вывод уведомлений NOTICE PostgreSQL pg_stop_backup() в stderr. (Сообщили: Stephen Frost.)

Новые возможности:

  • Экспериментальная поддержка PostgreSQL 9.5 alpha2. Совместимость может нарушиться при изменении версии control или сигнатуры WAL в будущих версиях, но будет поддерживаться обновлениями каждого выпуска pgBackRest. Все регрессионные тесты проходят, кроме тестов --target-resume, поскольку эта возможность изменилась в 9.5; сегменты WAL .partial пока не тестируются.

Улучшения:

  • Параметр и секция recovery-setting переименованы в recovery-option для большей согласованности с правилами именования pgBackRest.
  • Добавлена динамическая загрузка модулей для ускорения команд, особенно асинхронного архивирования.

Дополнения к документации:

  • Справка командной строки теперь извлекается из того же исходного XML, что и остальная документация, и содержит гораздо больше подробностей.

Примечания к выпуску v0.80

Поддержка DBI, стабильность и удобство работы

Выпущен 9 августа 2015

Исправления ошибок:

  • Исправлена проблема, при которой команда info выводила текущее время вместо отформатированных временных меток самой старой и самой новой резервных копий. Затрагивался только вывод text; в json значения времени от начала эпохи были корректны. (Сообщили: Michael Renner.)
  • Исправлена проблема протокола, препятствовавшая записи ошибок ssh в журнал, особенно при подключении.

Новые возможности:

  • Репозиторий теперь создаётся и обновляется с единообразными правами доступа к каталогам и файлам. По умолчанию umask задаётся равным 0000, но это можно отключить настройкой neutral-umask. (Предложили: Cynthia Shang.)
  • Добавлен параметр stop-auto, позволяющий автоматически останавливать неудавшееся резервное копирование при начале нового.
  • Добавлен параметр db-timeout, ограничивающий время ожидания pgBackRest возврата из pg_start_backup() и pg_stop_backup().
  • Файл pg_control удаляется в начале восстановления и копируется обратно в самом конце. Это предотвращает запуск PostgreSQL на частично восстановленном кластере.
  • Добавлены проверки согласованности db-path с db-port: значение data_directory, сообщаемое кластером, сравнивается с db-path, а версия, сообщаемая кластером, — со значением из pg_control. Для db-socket-path проверяется, что путь абсолютный.
  • Экспериментальная поддержка PostgreSQL 9.5 alpha1. Совместимость может нарушиться при изменении версии control или сигнатуры WAL в будущих версиях, но будет поддерживаться обновлениями каждого выпуска pgBackRest. Все регрессионные тесты проходят, кроме тестов --target-resume, поскольку эта возможность изменилась в 9.5; сегменты WAL .partial пока не тестируются.

Улучшения:

  • Для соединений с PostgreSQL теперь используются Perl DBI и DBD::Pg вместо psql. Настройки cmd-psql и cmd-psql-option удалены и заменены на db-port и db-socket-path. Для установки DBD::Pg в используемой операционной системе следует выполнить инструкции руководства по установке.

Новые возможности набора тестов:

  • Добавлены тестовые конфигурации vagrant для Ubuntu 14.04 и CentOS 7.

Примечания к выпуску v0.78

Удаление зависимостей CPAN и улучшения стабильности

Выпущен 13 июля 2015

Улучшения:

  • Удалена зависимость от пакетов CPAN для многопоточной работы. Хотя обновить пакеты threads и Thread::Queue может быть полезно, это больше не обязательно.
  • Увеличение интервала ожидания переведено с геометрической прогрессии на последовательность Фибоначчи. Это замедляет рост времени ожидания, сохраняя разумные значения.

Новые возможности набора тестов:

  • Добавлены тестовые конфигурации vagrant для Ubuntu 12.04 и CentOS 6.

Примечания к выпуску v0.77

Поддержка CentOS/RHEL 6 и улучшения протокола

Выпущен 30 июня 2015

Новые возможности:

  • В объект File добавлена синхронизация файлов и каталогов для дополнительной надёжности резервного копирования, восстановления и архивирования. (Предложили: Andres Freund.)
  • Добавлена поддержка Perl 5.10.1 и OpenSSH 5.3, используемых по умолчанию в CentOS/RHEL 6. (Предложили: Eric Radman.)
  • Улучшено сообщение об ошибке при запуске резервного копирования без заданного archive_command и без --no-archive-check. (Предложили: Eric Radman.)

Примечания к выпуску v0.75

Новый формат репозитория, команда info и экспериментальная поддержка 9.5

Выпущен 14 июня 2015

ВАЖНОЕ ПРИМЕЧАНИЕ: Этот выпуск с обязательным одновременным переходом нарушает совместимость со старыми версиями pgBackRest. Изменены формат манифеста, структура на диске и имена исполняемых файлов. Необходимо создать новый репозиторий для резервных копий этой версии pgBackRest и некоторое время сохранять старый репозиторий на случай восстановления. Файл pg_backrest.conf не изменился, но все упоминания pg_backrest.pl в cron или других местах необходимо заменить на pg_backrest без расширения .pl.

Новые возможности:

  • Добавлена команда info.
  • Журналирование теперь использует небуферизованный вывод. Это должно уменьшить беспорядок в файлах журналов, в которые пишут несколько потоков. (Предложили: Michael Renner.)
  • Экспериментальная поддержка PostgreSQL 9.5. Она может нарушиться при изменении версии control или сигнатуры WAL, но будет обновляться с каждым выпуском.

Улучшения:

  • Более эффективный порядок файлов для backup. Они копируются по убыванию размера, чтобы в конце не оставался один поток с большим файлом. Для restore это уже было реализовано.

Примечания к выпуску v0.70

Повышение стабильности архивирования, улучшения журналирования и справки

Выпущен 1 июня 2015

Исправления ошибок:

  • Исправлен сбой archive-copy для инкрементной или дифференциальной резервной копии при hardlink=n. В этом случае каталог pg_xlog ещё не существует и должен быть создан. (Сообщили: Michael Renner.)
  • Исправлена проблема асинхронного архивирования, при которой archive-push некорректно возвращала не 0 при достижении archive-max-mb; асинхронная проверка перенесена после передачи, чтобы не удалять файл остановки дважды. Также добавлены модульные тесты для этого случая и улучшены сообщения об ошибках, поясняющие пользователю причину сбоя. (Сообщили: Michael Renner.)
  • Исправлена проблема блокировок, допускавшая несколько операций одного типа для одной stanza. По-видимому, целостность данных не страдала, но при архивировании возникали ложные ошибки, а при резервном копировании и восстановлении также могли возникнуть ошибки. (Сообщили: Michael Renner.)

Новые возможности:

  • Разрешено архивирование дублирующихся сегментов WAL при совпадении контрольной суммы. Это необходимо для некоторых сценариев восстановления.
  • В pg_backrest.conf разрешены комментарии и отключение строк с помощью символа #. Учитывается только # в первой позиции строки. (Предложили: Michael Renner.)
  • Улучшено журналирование перед pg_start_backup(), чтобы было ясно, когда резервное копирование ожидает контрольную точку. (Предложили: Michael Renner.)
  • Различные исправления поведения команд и журналирования. (Рецензирование: Michael Renner. Предложили: Michael Renner.)

Улучшения:

  • Модуль JSON заменён на JSON::PP, входящий в стандартную поставку Perl.

Исправления ошибок в документации:

  • Различные исправления справки. (Рецензирование: Michael Renner. Сообщили: Michael Renner.)

Примечания к выпуску v0.65

Улучшения возобновления и журналирования восстановления, компактное восстановление

Выпущен 11 мая 2015

Исправления ошибок:

  • Исправлена проблема, при которой абсолютный путь не записывался в recovery.conf при запуске восстановления с относительным путём.

Новые возможности:

  • Улучшена поддержка возобновления. Возобновляемые файлы проверяются на отсутствие изменений, а манифест сохраняется чаще, чтобы сохранять контрольные суммы по мере копирования. Добавлены модульные тесты для каждого случая возобновления.
  • Возобновление теперь необязательно. Для отключения используется настройка resume или --no-resume в командной строке.
  • При восстановлении выводится больше сообщений info. Ранее большинство сообщений имело уровень debug, поэтому в журнал попадало мало информации.
  • Добавлена настройка tablespace, позволяющая восстанавливать табличные пространства в каталог pg_tblspc. Получается компактное восстановление, удобное для разработки, предварительного тестирования и других задач. Сейчас нельзя создавать резервные копии таких восстановленных кластеров, поскольку pgBackRest ожидает в pg_tblspc только ссылки.

Примечания к выпуску v0.61

Исправление ошибки удалённого хранилища без сжатия

Выпущен 21 апреля 2015

Исправления ошибок:

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

Примечания к выпуску v0.60

Улучшение поддержки версий и работы с WAL

Выпущен 19 апреля 2015

Исправления ошибок:

  • Отправка дублирующегося WAL теперь вызывает ошибку. Ранее это работало только при отключённых контрольных суммах.

Новые возможности:

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

Новые возможности набора тестов:

  • Регрессионные тесты работают вплоть до PostgreSQL 8.3.

Примечания к выпуску v0.50

Восстановление и многое другое

Выпущен 25 марта 2015

Исправления ошибок:

  • Исправлены контрольные суммы: теперь они работают для обычных и возобновлённых резервных копий. Стало ясно, что контрольные суммы и дельта-копирование по ним следует функционально разделить, и это многое упростило. Для дельта-копирования по контрольным суммам создано обращение #28.
  • Исправлена возможность возобновления из прерванной резервной копии, у которой не совпадали тип или предшествующая резервная копия.

Новые возможности:

  • Добавлена возможность восстановления.
  • Все параметры теперь можно задавать в командной строке, поэтому pg_backrest.conf стал необязательным.
  • Сжатие и распаковка теперь выполняются без потоков, а контрольная сумма и размер вычисляются в потоке данных. Поэтому контрольные суммы файлов больше не являются необязательными.
  • Добавлен параметр --no-start-stop, позволяющий выполнять резервное копирование при остановленном Postgres. Если присутствует postmaster.pid, для запуска копирования требуется --force, хотя при работающем Postgres, вероятно, получится несогласованная копия. Параметр добавлен прежде всего для модульного тестирования, но может иметь и практические применения.
  • Добавлена контрольная сумма backup.manifest для обнаружения повреждения или изменения манифеста.
  • Ссылка latest всегда указывает на последнюю резервную копию. Она добавлена для удобства и упрощения восстановления.

Новые возможности набора тестов:

  • Более полные модульные тесты во всех областях.

Примечания к выпуску v0.30

Перестройка ядра и модульные тесты

Выпущен 5 октября 2014

Дополнения к документации:

  • Добавлена необходимая документация

Новые возможности набора тестов:

  • Достаточно полные модульные тесты всех основных операций. Работы здесь, конечно, ещё много, но с модульными тестами так бывает всегда.

Примечания к выпуску v0.19

Улучшенная обработка ошибок и сообщения о них

Выпущен 13 мая 2014

Исправления ошибок:

  • Найдена и устранена неприятная ошибка: file_copy() по умолчанию игнорировала ошибки. Также проблема в file_exists() приводила к отрицательному результату проверки, когда файл на самом деле существовал. Вместе они могли дать повреждённую резервную копию без сообщений об ошибках, хотя это крайне маловероятно.

Примечания к выпуску v0.18

Возврат некритической ошибки при отсутствии архива

Выпущен 13 апреля 2014

Исправления ошибок:

  • Команда archive-get теперь возвращает 1 при отсутствии файла архива, чтобы отличать это от критических ошибок: сбоя соединения ssh, ошибки копирования файла и т. п. Это сообщает PostgreSQL, что поток архива завершился нормально. Однако возможные пропуски в потоке архива при этом не учитываются. (Сообщили: Stephen Frost.)

Примечания к выпуску v0.17

Предупреждение при невозможности удалить каталоги архива

Выпущен 3 апреля 2014

Исправления ошибок:

  • Если каталог архива, который должен быть пустым, не удавалось удалить, backrest выдавал ошибку. Полноценное исправление ещё готовится, а пока ошибка заменена предупреждением, чтобы обработка могла продолжаться. Это влияло на резервное копирование: иногда последний файл архива не отправлялся, если первый файл находился в другом каталоге и обстоятельства складывались неудачно.

Примечания к выпуску v0.16

RequestTTY=yes для сеансов SSH

Выпущен 1 апреля 2014

Исправления ошибок:

  • В сеансы ssh добавлено RequestTTY=yes. Ожидается, что это предотвратит случайные зависания.

Примечания к выпуску v0.15

Добавлена archive-get

Выпущен 29 марта 2014

Новые возможности:

  • Добавлена возможность archive-get для помощи при восстановлении.
  • Добавлен параметр принудительной контрольной точки при начале резервного копирования: start-fast=y.

Примечания к выпуску v0.11

Небольшие исправления

Выпущен 26 марта 2014

Исправления ошибок:

  • Из соединений SSH с базой данных удалён параметр master_stderr_discard. Наблюдались редкие зависания, которые могли быть связаны с проблемами, ранее замеченными в коде работы с файлами. (Сообщили: Stephen Frost.)
  • Конфликты файлов блокировок команд backup и expire переведены на уровень ERROR. Из-за копирования кода блокировок архива они имели уровень DEBUG.

Примечания к выпуску v0.10

Резервное копирование и архивирование работают

Выпущен 5 марта 2014

Новые возможности:

  • Восстановление пока не реализовано, но каталоги резервных копий являются согласованными каталогами данных PostgreSQL. Необходимо либо распаковать файлы, либо отключить сжатие при копировании. Несжатые копии в ZFS или аналогичной файловой системе — хороший вариант, поскольку их можно локально восстановить через снимок для создания логических копий или выборочного восстановления данных.
  • Архивирование однопоточное. Для наших многотерабайтных баз данных с интенсивной записью это не создавало проблем. Рекомендуется большой том для WAL либо асинхронный режим с большим томом рядом.
  • Резервное копирование многопоточное, но библиотека Net::OpenSSH, по-видимому, не на 100% потокобезопасна, поэтому изредка один из потоков зависает. Общий тайм-аут процесса решает проблему его принудительным завершением. Да, решение весьма неудачное.
  • При любом возобновлении резервного копирования контрольные суммы теряются. При нескольких возобновлениях их запишет только последняя резервная копия. Контрольные суммы предыдущих копий записываются корректно, а полное резервное копирование всё сбрасывает.
  • backup.manifest записывается в формате Storable, поскольку Config::IniFile, по-видимому, плохо работает с большими файлами. Хотелось бы сохранять манифесты как читаемый человеком текст.

Дополнения к документации:

  • Документации вне кода нет совсем. Если не считать этих примечаний к выпускам.

7 - Часто задаваемые вопросы

Часто задаваемые вопросы о резервном копировании, восстановлении, настройке и устранении неполадок pgBackRest.

Введение

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


Что делать при ошибке «could not find WAL segment»?

У этой ошибки может быть множество причин, в том числе:

  • неверно настроенная команда archive_command
  • ошибки в файлах конфигурации pgBackRest
  • проблемы с сетью или правами доступа
  • ошибки в настройке стороннего продукта (например, S3, Swift или Minio)
  • большая очередь WAL, ожидающих архивирования

Рекомендуется:

  • проверить archive_command в PostgreSQL
  • проверить настройки pgBackRest на каждом сервере (например, параметры pg* задаются на сервере репозитория, а параметры repo* — на сервере PostgreSQL)
  • выполнить команду check, задав для --archive-timeout значение больше указанного в файле конфигурации pgBackRest (или значения по умолчанию), чтобы проверить, не требуется ли больше времени для обработки очереди WAL. Если система генерирует большой объём WAL, стоит настроить асинхронное архивирование

Как вручную удалить набор резервной копии?

Полный набор резервной копии можно удалить с помощью параметра --set, как описано в разделе Справочник команд: Expire .


Как задать отдельные настройки для каждой команды?

pgBackRest позволяет задавать параметры в файле конфигурации отдельно для каждой команды. Эта возможность и приоритет параметров описаны в разделе Настройка stanza кластера .

Например, параметр process-max можно настроить для каждой команды:

[global]
# used where not overridden
process-max=2

[global:backup]
# more cores for backup
process-max=4

[global:restore]
# all the cores for restore
process-max=8

[global:archive-push]
# more cores for archive-push
process-max=3

[global:archive-get]
# fewer cores for archive-get
process-max=1

Можно ли использовать точки в имени бакета S3?

RFC-2818 не допускает, чтобы подстановочные знаки соответствовали точке (.), поэтому имена бакетов S3 не должны содержать точек. Если в имени бакета S3 есть точки, возникает ошибка вида «unable to find hostname ‘my.backup.bucket.s3.amazonaws.com’ in certificate common name or subject alternative names».

Исключение — repo-s3-uri-style=path: при такой настройке имя бакета добавляется в начало URI, а не имени узла. Поскольку бакет не является частью имени узла, сертификат проверяется только по имени конечной точки, и точки в имени бакета не создают проблем. Следует учитывать, что не все объектные хранилища, совместимые с S3, поддерживают URI в стиле path.


Где найти пакеты старых версий pgBackRest?

Репозиторий apt.postgresql.org содержит архив старых версий . Debian также хранит снимки всех тестовых сборок.


Почему резервное копирование завершается ошибкой, если задано backup-standby=y, а резервная база данных недоступна?

Резервное копирование с резервного сервера обычно настраивают для снижения нагрузки на первичный сервер, поэтому перенос копирования на первичный сервер при недоступности резервного часто противоречит этой цели. Увеличивать нагрузку на первичный сервер, когда в системе уже есть сбои, не рекомендуется. Если уже имеется достаточно свежая резервная копия, создание новой не критично: главное — своевременно архивировать WAL. После стабилизации системы времени для создания резервной копии будет достаточно.

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


Следует ли размещать репозиторий на резервном сервере?

Нет. Если настроены первичная и резервная базы данных, файлы конфигурации pgBackRest следует сделать симметричными, чтобы переключение при отказе происходило беспрепятственно. В противном случае при переключении придётся изменять конфигурацию, иначе могут возникнуть дополнительные проблемы.

Подробности приведены в разделе Выделенный сервер репозитория руководства пользователя.


Почему не работает восстановление на заданный момент времени?

Самая распространённая ошибка при восстановлении на заданный момент времени — выбор резервной копии, завершённой после целевого времени. При --type=time, если параметр --set не указан, pgBackRest ищет в настроенных репозиториях копию, завершённую до времени, заданного через --target=. Если подходящая копия не найдена, pgBackRest выдаёт ошибку, а не восстанавливает последнюю резервную копию. Копия, завершённая после целевого времени, не позволяет вернуться к этому более раннему моменту путём воспроизведения WAL.

Чтобы воспользоваться параметром --set, выполните команду info и выберите набор резервной копии, время завершения которой предшествует целевому времени. Затем при восстановлении укажите --set=BACKUP_LABEL, где BACKUP_LABEL — выбранный набор резервной копии.

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


Что означает суффикс файла в архиве WAL?

Суффикс — это контрольная сумма SHA1, используемая для проверки целостности файла. Убрать её нельзя.


Занимает ли восстановление отдельных типов резервных копий (полных, дифференциальных, инкрементных) больше времени?

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


Как экспортировать резервную копию для использования в среде, изолированной от сети?

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

Однако есть обходной способ, если нужно получить самодостаточную копию базы данных для переноса, например, на USB-накопителе. Можно создать резервную копию с включённым параметром --archive-copy , чтобы необходимые сегменты WAL сохранялись вместе с ней. Затем следует восстановить её с параметрами --type=none --pg1-path=/your/target/path. В результате получится восстановленный каталог данных PostgreSQL со всеми необходимыми файлами WAL уже в pg_wal, аналогичный создаваемому командой pg_basebackup.

Этот каталог затем можно скопировать в другую систему; ожидается, что PostgreSQL сможет восстановиться из него без доступа к репозиторию pgBackRest.

Следует учитывать, что восстановление этой копии не приведёт к переключению временной шкалы, поэтому такому кластеру не следует отправлять WAL в исходный репозиторий, из которого он был экспортирован. В среде, изолированной от сети, это не должно создавать проблем.

8 - Метрики проекта

Метрики покрытия кода тестами и показатели качества проекта pgBackRest.

Покрытие кода тестами

pgBackRest стремится обеспечить полное покрытие тестами функций, ветвей и строк основного кода на C в /src.

Функции и строки покрыты полностью, без исключений.

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

Каталог Функции Ветви Строки
build/common 32/32 (100.00%) 72/72 (100.00%) 268/268 (100.00%)
build/config 39/39 (100.00%) 564/564 (100.00%) 1142/1142 (100.00%)
build/error 6/6 (100.00%) 22/22 (100.00%) 71/71 (100.00%)
build/help 13/13 (100.00%) 138/138 (100.00%) 265/265 (100.00%)
build/postgres 8/8 (100.00%) 58/58 (100.00%) 149/149 (100.00%)
command 17/17 (100.00%) 104/104 (100.00%) 210/210 (100.00%)
command/annotate 1/1 (100.00%) 12/12 (100.00%) 31/31 (100.00%)
command/archive 14/14 (100.00%) 98/98 (100.00%) 189/189 (100.00%)
command/archive/get 10/10 (100.00%) 208/208 (100.00%) 447/447 (100.00%)
command/archive/push 12/12 (100.00%) 148/148 (100.00%) 365/365 (100.00%)
command/backup 50/50 (100.00%) 790/790 (100.00%) 1641/1641 (100.00%)
command/check 13/13 (100.00%) 106/106 (100.00%) 214/214 (100.00%)
command/control 4/4 (100.00%) 34/34 (100.00%) 48/48 (100.00%)
command/expire 11/11 (100.00%) 274/274 (100.00%) 392/392 (100.00%)
command/help 8/8 (100.00%) 178/178 (100.00%) 283/283 (100.00%)
command/info 16/16 (100.00%) 430/430 (100.00%) 748/748 (100.00%)
command/local 1/1 (100.00%) — 4/4 (100.00%)
command/remote 1/1 (100.00%) 6/6 (100.00%) 18/18 (100.00%)
command/repo 9/9 (100.00%) 110/110 (100.00%) 195/195 (100.00%)
command/restore 37/37 (100.00%) 726/726 (100.00%) 1350/1350 (100.00%)
command/server 6/6 (100.00%) 24/24 (100.00%) 81/81 (100.00%)
command/stanza 5/5 (100.00%) 106/106 (100.00%) 125/125 (100.00%)
command/verify 22/22 (100.00%) 366/366 (100.00%) 733/733 (100.00%)
common 146/146 (100.00%) 624/624 (100.00%) 1350/1350 (100.00%)
common/compress 12/12 (100.00%) 24/24 (100.00%) 80/80 (100.00%)
common/compress/bz2 13/13 (100.00%) 20/20 (100.00%) 123/123 (100.00%)
common/compress/gz 13/13 (100.00%) 26/26 (100.00%) 118/118 (100.00%)
common/compress/lz4 15/15 (100.00%) 24/24 (100.00%) 116/116 (100.00%)
common/compress/zst 13/13 (100.00%) 12/12 (100.00%) 96/96 (100.00%)
common/crypto 32/32 (100.00%) 88/88 (100.00%) 424/424 (100.00%)
common/error 33/33 (100.00%) 66/66 (100.00%) 179/179 (100.00%)
common/io 61/61 (100.00%) 182/182 (100.00%) 523/523 (100.00%)
common/io/filter 31/31 (100.00%) 92/92 (100.00%) 276/276 (100.00%)
common/io/http 58/58 (100.00%) 292/292 (100.00%) 685/685 (100.00%)
common/io/socket 28/28 (100.00%) 110/110 (100.00%) 339/339 (100.00%)
common/io/tls 37/37 (100.00%) 122/122 (100.00%) 409/409 (100.00%)
common/type 335/335 (100.00%) 922/922 (100.00%) 3123/3123 (100.00%)
config 93/93 (100.00%) 1025/1026 (99.90%) 1649/1649 (100.00%)
db 23/23 (100.00%) 94/94 (100.00%) 301/301 (100.00%)
info 48/48 (100.00%) 240/240 (100.00%) 712/712 (100.00%)
info/manifest 10/10 (100.00%) 132/132 (100.00%) 303/303 (100.00%)
postgres 36/36 (100.00%) 128/128 (100.00%) 333/333 (100.00%)
postgres/interface 4/4 (100.00%) 10/10 (100.00%) 35/35 (100.00%)
protocol 60/60 (100.00%) 266/266 (100.00%) 860/860 (100.00%)
storage 68/68 (100.00%) 304/304 (100.00%) 759/759 (100.00%)
storage/azure 26/26 (100.00%) 162/162 (100.00%) 487/487 (100.00%)
storage/cifs 2/2 (100.00%) — 6/6 (100.00%)
storage/gcs 34/34 (100.00%) 176/176 (100.00%) 574/574 (100.00%)
storage/posix 29/29 (100.00%) 165/166 (99.40%) 328/328 (100.00%)
storage/remote 40/40 (100.00%) 128/128 (100.00%) 568/568 (100.00%)
storage/s3 31/31 (100.00%) 200/200 (100.00%) 661/661 (100.00%)
storage/sftp 39/39 (100.00%) 408/408 (100.00%) 762/762 (100.00%)
ИТОГО 1705/1705 (100.00%) 10616/10618 (99.98%) 25148/25148 (100.00%)

Модули тестов на C в /test/src/module также имеют полное покрытие функций и строк, но в этот отчёт не включены.