pg_basebackup#

pg_basebackup

pg_basebackup

pg_basebackup — создание базовой резервной копии кластера Tantor SE

Синтаксис

pg_basebackup [option...]

Описание

pg_basebackup используется для создания базовой резервной копии работающего кластера баз данных Tantor SE. Резервная копия создается без влияния на других клиентов базы данных и может быть использована как для восстановления в определенный момент времени (см. Раздел 25.3), так и в качестве отправной точки для резервного сервера с передачей журналов или потоковой репликации (см. Раздел 26.2).

pg_basebackup создает точную копию файлов кластера базы данных, при этом автоматически переводит сервер в режим резервного копирования и обратно. Резервные копии всегда делаются для всего кластера баз данных; невозможно создать резервную копию отдельных баз данных или объектов базы данных. Для выборочных резервных копий необходимо использовать другой инструмент, такой как pg_dump.

Резервное копирование выполняется через обычное соединение Tantor SE, использующее протокол репликации. Соединение должно быть установлено с пользовательским идентификатором, у которого есть разрешения REPLICATION (см. Раздел 21.2) или является суперпользователем, и pg_hba.conf должен разрешать соединение для репликации. Сервер также должен быть настроен с параметром max_wal_senders, установленным достаточно высоко, чтобы обеспечить хотя бы одного walsender для резервного копирования плюс одного для потоковой передачи WAL (если используется).

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

pg_basebackup может создавать резервную копию базы данных не только с основного сервера, но и с резервного. Чтобы создать резервную копию с резервного сервера, настройте его так, чтобы он мог принимать соединения для репликации (установите параметры max_wal_senders и hot_standby) и настройте файл pg_hba.conf соответствующим образом. Также необходимо включить параметр full_page_writes на основном сервере.

Обратите внимание, что есть некоторые ограничения при создании резервной копии с реплики:

  • История резервного копирования не создается в резервной копии кластера базы данных.

  • pg_basebackup не может заставить резервный сервер переключиться на новый WAL-файл в конце резервного копирования. Если вы используете -X none, и запись на основном сервере низкая, pg_basebackup может потребоваться долгое время ожидания переключения и архивирования последнего необходимого для резервного копирования WAL-файла. В этом случае может быть полезно запустить pg_switch_wal на основном сервере, чтобы вызвать немедленное переключение WAL-файла.

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

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

Всякий раз, когда pg_basebackup выполняет базовое резервное копирование, представление pg_stat_progress_basebackup сервера будет отображать прогресс резервного копирования. См. Раздел 27.4.5 для получения подробной информации.

Опции

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

-D directory
--pgdata=directory

Устанавливает целевой каталог для записи вывода. pg_basebackup создаст этот каталог (и любые отсутствующие родительские каталоги), если он не существует. Если он уже существует, он должен быть пустым.

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

Эта опция обязательна.

-F format
--format=format

Выбирает формат вывода. format можно записать одним из следующих способов:

p
plain

Запишите вывод в виде обычных файлов с тем же форматированием, что и у исходного каталога данных и табличных пространств сервера. Если кластер не содержит дополнительных табличных пространств, весь базовый каталог будет размещен в целевом каталоге. Если кластер содержит дополнительные табличные пространства, основной каталог данных будет размещен в целевом каталоге, но все остальные табличные пространства будут размещены в том же абсолютном пути, что и на исходном сервере. (См. --tablespace-mapping, чтобы изменить это).

Это формат по умолчанию.

t
tar

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

Если целевой каталог указан как - (дефис), содержимое tar будет записано в стандартный вывод, подходящий для передачи (например) в gzip. Это разрешено только в том случае, если кластер не имеет дополнительных таблиц-пространств и не используется потоковая передача WAL.

-R
--write-recovery-conf

Создает standby.signal файл и добавляет настройки подключения в файл postgresql.auto.conf в целевом каталоге (или внутри базового архивного файла при использовании формата tar). Это упрощает настройку резервного сервера с использованием результатов резервного копирования.

Файл postgresql.auto.conf будет записывать настройки соединения и, если указано, слот репликации, который использует pg_basebackup, чтобы потоковая репликация использовала те же настройки позже.

-t target
--target=target

Указывает серверу, куда поместить базовую резервную копию. По умолчанию целью является client, что означает, что резервная копия должна быть отправлена на машину, где запущено pg_basebackup. Если цель установлена на server:/some/path, резервная копия будет сохранена на машине, где запущен сервер, в каталоге /some/path. Для сохранения резервной копии на сервере требуются привилегии суперпользователя или привилегии роли pg_write_server_files. Если цель установлена на blackhole, содержимое будет отброшено и никуда не сохранено. Это следует использовать только для тестирования, так как вы не получите фактическую резервную копию.

Так как передача WAL-журналов осуществляется приложением pg_basebackup, а не сервером, эта опция не может использоваться вместе с -Xstream. Поскольку -Xstream является значением по умолчанию, при указании этой опции вы также должны указать --Xfetch или -Xnone.

-T olddir=newdir
--tablespace-mapping=olddir=newdir

Перемещает табличного пространства из каталога olddir в newdir во время резервного копирования. Чтобы это сработало, olddir должен точно соответствовать пути, указанному для табличного пространства на исходном сервере. (Однако, если на исходном сервере нет табличного пространства в olddir, это не является ошибкой). В то же время newdir - это каталог в файловой системе принимающего хоста. Как и для основной целевого каталога, newdir не обязательно должен уже существовать, но если он существует, он должен быть пустым. И olddir, и newdir должны быть абсолютными путями. Если в любом из путей нужно использовать знак равенства (=), перед ним следует поставить обратную косую черту. Эту опцию можно указывать несколько раз для нескольких табличных пространств.

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

В настоящее время эта опция работает только с форматом вывода plain; она игнорируется, если выбран формат tar.

--waldir=waldir

Устанавливает каталог для записи файлов журнала предзаписи (журнала предварительной записи). По умолчанию файлы WAL будут размещены в подкаталоге pg_wal целевого каталога, но эту опцию можно использовать для размещения их в другом месте. waldir должен быть абсолютным путем. Как и с основным целевым каталогом, waldir не обязательно должен уже существовать, но если он существует, то он должен быть пустым. Эту опцию можно указать только при резервном копировании в обычном формате.

-X method
--wal-method=method

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

Поддерживаются следующие method сбора журналов предварительной записи:

n
none

Не включайте журналы предварительной записи в резервную копию.

f
fetch

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

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

s
stream

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

Когда используется формат tar, файлы журнала предварительной записи будут записаны в отдельный файл с именем pg_wal.tar (если сервер имеет версию ранее 10, файл будет называться pg_xlog.tar).

Это значение является значением по умолчанию.

-z
--gzip

Включает сжатие gzip для вывода файлов tar с уровнем сжатия по умолчанию. Сжатие доступно только при использовании формата tar, и суффикс .gz будет автоматически добавлен ко всем именам файлов tar.

-Z level
-Z [{client|server}-]method[:detail]
--compress=level
--compress=[{client|server}-]method[:detail]

Сжатие резервной копии. Если включены client или server, указывается, где будет выполняться сжатие. Сжатие на сервере уменьшит пропускную способность передачи, но увеличит использование процессора сервера. По умолчанию используется client, за исключением случаев, когда используется --target. В этом случае резервная копия не отправляется клиенту, поэтому имеет смысл использовать только сжатие на сервере. При использовании -Xstream, который является значением по умолчанию, сжатие на стороне сервера не будет применяться к WAL. Чтобы сжать WAL, используйте сжатие на стороне клиента или указывайте -Xfetch.

Метод сжатия может быть установлен на gzip, lz4, zstd или none для отсутствия сжатия. Можно также указать строку деталей сжатия. Если строка деталей является целым числом, она указывает уровень сжатия. В противном случае, она должна быть списком элементов, разделенных запятыми, каждый из которых имеет форму keyword или keyword=value. В настоящее время поддерживаются ключевые слова level и workers.

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

Когда используется формат gzip, lz4, или zstd, к именам всех файлов tar автоматически добавляется соответствующий суффикс .gz, .lz4, или .zst. При использовании простого формата сжатие на стороне клиента может не указываться, но все равно возможно запросить сжатие на стороне сервера. Если это сделано, сервер сжимает резервную копию для передачи, а клиент разжимает и извлекает ее.

Когда эта опция используется в сочетании с -Xstream, pg_wal.tar будет сжат с использованием gzip, если выбрана клиентская сжатие gzip, но не будет сжат, если выбран любой другой алгоритм сжатия или если выбрана серверная сжатие.

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

-c {fast|spread}
--checkpoint={fast|spread}

Устанавливает режим контрольной точки на быстрый (немедленный) или распределенный (по умолчанию) (см. Раздел 25.3.3).

-C
--create-slot

Указывает, что слот репликации, указанный опцией --slot, должен быть создан перед началом резервного копирования. Если слот уже существует, будет сгенерирована ошибка.

-l label
--label=label

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

-n
--no-clean

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

Обратите внимание, что каталоги табличного пространства не очищаются ни одним из способов.

-N
--no-sync

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

-P
--progress

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

-r rate
--max-rate=rate

Устанавливает максимальную скорость передачи данных с исходного сервера. Это может быть полезно для ограничения влияния pg_basebackup на сервер. Значения указываются в килобайтах в секунду. Для указания мегабайт в секунду используется суффикс M. Суффикс k также принимается, но не оказывает никакого эффекта. Допустимые значения находятся в диапазоне от 32 килобайт в секунду до 1024 мегабайт в секунду.

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

-S slotname
--slot=slotname

Эта опция может использоваться только вместе с -X stream. Она заставляет потоковую передачу WAL использовать указанный слот репликации. Если базовая резервная копия предназначена для использования в качестве резервной копии потоковой репликации с использованием слота репликации, резервная копия должна использовать то же имя слота репликации, что и primary_slot_name. Это гарантирует, что основной сервер не удаляет необходимые данные WAL во время между окончанием базовой резервной копии и началом потоковой репликации на новой резервной копии.

Указанный слот репликации должен существовать, если не используется опция -C.

Если этот параметр не указан и сервер поддерживает временные слоты репликации (версия 10 и выше), то для потоковой передачи WAL автоматически используется временный слот репликации.

-v
--verbose

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

--manifest-checksums=algorithm

Определяет алгоритм контрольной суммы, который должен быть применен к каждому файлу, включенному в резервную копию. В настоящее время доступны следующие алгоритмы: NONE, CRC32C, SHA224, SHA256, SHA384 и SHA512. По умолчанию используется CRC32C.

Если выбрано значение NONE, то в резервной копии не будет содержаться никаких контрольных сумм. В противном случае, она будет содержать контрольную сумму каждого файла в резервной копии с использованием указанного алгоритма. Кроме того, в манифесте всегда будет содержаться контрольная сумма SHA256 его собственного содержимого. Алгоритмы SHA требуют значительно больше вычислительных ресурсов, чем CRC32C, поэтому выбор одного из них может увеличить время, необходимое для завершения резервного копирования.

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

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

--manifest-force-encode

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

--no-estimate-size

Сохраняет сервер от оценки общего объема резервных данных, которые будут передаваться, что приводит к тому, что столбец backup_total в представлении pg_stat_progress_basebackup всегда будет иметь значение NULL.

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

Этот параметр не разрешен при использовании --progress.

--no-manifest

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

--no-slot

Предотвращает создание временного слота репликации для резервной копии.

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

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

--no-verify-checksums

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

По умолчанию, контрольные суммы проверяются и сбои в контрольных суммах приводят к ненулевому коду завершения. Однако, в таком случае резервная копия базы данных не будет удалена, как если бы был использован параметр --no-clean. Сбои при проверке контрольных сумм также будут отображаться в представлении pg_stat_database.

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

-d connstr
--dbname=connstr

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

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

-h host
--host=host

Указывает имя хоста машины, на которой работает сервер. Если значение начинается с косой черты, оно используется в качестве каталога для Unix-сокета. По умолчанию берется значение из переменной среды PGHOST, если она установлена, в противном случае выполняется попытка подключения через Unix-сокет.

-p port
--port=port

Определяет TCP-порт или расширение локального файла сокета Unix, на котором сервер прослушивает соединения. По умолчанию используется переменная окружения PGPORT, если она установлена, или скомпилированное значение по умолчанию.

-s interval
--status-interval=interval

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

-U username
--username=username

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

-w
--no-password

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

-W
--password

Заставляет pg_basebackup запрашивать пароль перед подключением к исходному серверу.

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

Доступны и другие варианты:

-V
--version

Выводит версию pg_basebackup и завершает работу.

-?
--help

Показывает справку о командной строке аргументов для pg_basebackup и выходит.

Окружение

Эта утилита, как и большинство других утилит Tantor SE, использует переменные среды, поддерживаемые libpq (см. Раздел 32.15).

Переменная среды PG_COLOR определяет, следует ли использовать цвет в диагностических сообщениях. Возможные значения: always, auto и never.

Примечания

В начале резервного копирования необходимо выполнить контрольную точку на исходном сервере. Это может занять некоторое время (особенно если не используется опция --checkpoint=fast), во время которого pg_basebackup будет казаться неактивным.

Резервная копия будет включать все файлы в каталоге данных и таблицах, включая файлы конфигурации и любые дополнительные файлы, размещенные в каталоге третьими сторонами, за исключением некоторых временных файлов, управляемых PostgreSQL и файлами операционной системы. Но копируются только обычные файлы и каталоги, за исключением того, что символические ссылки, используемые для таблиц, сохраняются. Символические ссылки, указывающие на определенные каталоги, известные PostgreSQL, копируются как пустые каталоги. Другие символические ссылки и специальные файлы устройств пропускаются. См. Раздел 53.4 для точных деталей.

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

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

pg_basebackup работает с серверами той же или более старой основной версии, начиная с 9.1. Однако режим потоковой передачи WAL (-X stream) работает только с версией сервера 9.3 и выше, а формат tar (--format=tar) работает только с версией сервера 9.5 и выше.

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

Примеры

Для создания базовой резервной копии сервера на mydbserver и сохранения ее в локальном каталоге /usr/local/pgsql/data:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data

Для создания резервной копии локального сервера с одним сжатым tar-файлом для каждого табличного пространства и сохранения его в каталоге backup, отображая отчет о ходе выполнения:

$ pg_basebackup -D backup -Ft -z -P

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

$ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2

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

Для создания резервной копии локальной базы данных, где табличное пространство в /opt/ts перемещается в ./backup/ts:

$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts

Для создания резервной копии локального сервера с одним tar-файлом для каждого табличного пространства, сжатым с помощью gzip на уровне 9, сохраненным в каталоге backup:

$ pg_basebackup -D backup -Ft --compress=gzip:9

См. также

pg_dump, Раздел 27.4.5