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