pg_basebackup
Эта страница переведена при помощи нейросети GigaChat.
pg_basebackup
— создает резервную копию кластера баз данных PostgreSQL.
Синтаксис
pg_basebackup [option...]
Описание
pg_basebackup
— утилита для создания базовой резервной копии кластера баз данных PostgreSQL без влияния на другие клиентские соединения. Используется как для восстановления до заданной точки во времени (подробнее описано в разделе «Непрерывное архивирование и восстановление до заданной точки во времени (PITR)»), так и в качестве отправной точки для резервного сервера с логической передачей или потоковой репликацией (подробнее описано в разделе «Резервные серверы с передачей журналов»).
pg_basebackup
позволяет создать полную или инкрементальную базовую резервную копию базы данных. При создании полной резервной копии делается точная копия файлов кластера базы данных. При создании инкрементальной резервной копии некоторые файлы, которые были бы частью полной резервной копии, могут быть заменены инкрементальными версиями тех же самых файлов, содержащими только те блоки, которые были изменены со времени эталонной резервной копии. Инкрементальная резервная копия не может быть использована напрямую; вместо этого сначала необходимо использовать инструмент pg_combinebackup
для объединения ее с предыдущими резервными копиями, от которых она зависит.
В любом режиме работы pg_basebackup
автоматически включает сервер в режим резервного копирования и выводит его из него. Резервные копии всегда создаются всего кластера базы данных целиком; невозможно выполнить резервное копирование отдельных баз данных или объектов базы данных. Для выборочного резервного копирования следует использовать другой инструмент, например pg_dump
.
Можно запускать несколько утилит pg_basebackup
параллельно, но, с учетом производительности, эффективнее выполнить одну копию, а затем распределить результат.
Состояние процесса резервного копирования отображается в представлении pg_stat_progress_basebackup
.
Резервное копирование с основного сервера
Для корректного выполнения резервного копирования необходимо соблюдение следующих требований:
- Соединение устанавливает пользователь с правом
REPLICATION
(подробнее описано в разделе «Атрибуты ролей») или суперпользователь. - В файле 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
существуют следующие параметры командной строки:
-D directory
--pgdata=directory
- Устанавливает целевой каталог для записи резервной копии. Параметр обязателен.
Для указания целевого каталога необходимо учитывать следующие условия:
- Указанный каталог должен быть пустой.
- Утилита создаст директорию и необходимые родительские каталоги при их отсутствии.
- Файл будет записан в
stdout
, если копия создается в tar-формате (когда в качестве целевого каталога указан-
).
-F format
--format=format
- Выбирает формат вывода.
format
может принимать следующие значения:p
plain
: Стандартные файлы c исходной структурой каталогов данных и табличных пространств. Если в кластере отсутствуют дополнительные табличные пространства, вся база данных будет сохранена в указанный каталог. Иначе основной каталог данных будет помещен в целевой каталог, а остальные табличные пространства сохранятся в тех же абсолютных путях, что и на исходном сервере. Для изменения этих путей используйте параметр--tablespace-mapping
.Формат используется по умолчанию.
t
tar
: Файлы в форматеtar
в целевом каталоге. Основной каталог данных сохраняется в файлеbase.tar
, а каждое дополнительное табличное пространство — в отдельном файле, в названии которого указываетсяOID
соответствующего пространства.Если в качестве имени целевого каталога указано
-
(дефис), содержимое архиваtar
записывается в стандартный вывод, подходящий для передачи (например) вgzip
. Такой вариант возможен только при отсутствии дополнительных табличных пространств и трансляции WAL.
-i old_manifest_file
--incremental=old_manifest_file
- Выполняет создание инкрементальной резервной копии. Необходимо предоставить манифест резервной копии ссылки, который будет загружен на сервер, после чего сервер ответит отправкой запрошенной инкрементальной резервной копии.
-R
--write-recovery-conf
- Создает файл
standby.signal
и добавляет параметры подключения в файлpostgresql.auto.conf
в целевой каталог (архивный файл, если используется форматtar
). Это упрощает настройку резервного сервера с использованием этой копии.Файл
postgresql.auto.conf
будет содержать настройки соединения и, если указано, слот репликации, используемый программойpg_basebackup
, чтобы потоковая репликация и синхронизация логической репликации слотов использовали те же самые настройки позже. Имя базы данных будет сохранено только в том случае, если оно было явно указано в строке соединения или переменной окружения.
-t targ
-target
--target=target
- Указывает серверу место хранения базовой резервной копии.
Возможные значения параметра и их действия:
client
— сохранение копии на той же машине, где используетсяpg_basebackup
, значение по умолчанию.server:/some/path
— сохранение копии на сервере в каталоге/some/path
. Требуются права супервользователя или рольpg_write_server_files
.blackhole
— режим для тестирования, фактическая резервная копия копия не создается.
Режим
-Xstream
несовместим с данным параметром (потоковая передача WAL реализована вpg_basebackup
, а не на сервере). Режим используется по умолчанию, поэтому при указании параметра необходимо задать режим-Xfetch
или-Xnone
.
-T olddir=newdir
--tablespace-mapping=olddir=newdir
- Перемещает табличное пространство из
olddir
вnewdir
в процессе копирования.Путь
olddir
должен точно соответствовать расположению табличного пространства на основном сервере (не является ошибкой, если такого табличного пространства нет в указанном каталоге).Путь
newdir
указывает на каталог в файловой системе резервного сервера (может не существовать, но если он существует, должен быть пустым).olddir
иnewdir
должны иметь абсолютные пути. Если в пути встречается знак=
, необходимо использовать символ «\» для экранирования. Параметр можно использовать несколько раз для разных табличных пространств.При таком перемещении символические ссылки в основном каталоге данных обновляются и указывают на новое расположение, что позволяет новому экземпляру сервера использовать обновленные пути табличных пространств.
Параметр работает только с форматом вывода
plain
(игнорируется при использованииtar
).
--waldir=waldir
- Устанавливает каталог для записи WAL файлов (журнал предзаписи). По умолчанию файлы записываются в подкаталог
pg_wal
целевого каталога.Путь
waldir
должен быть абсолютным, если каталог отсутствует, то он будет создан (если существует — он должен быть пустым).Параметр работает только с форматом вывода
plain
.
-X method
--wal-method=method
- Включает необходимые файлы WAL (журнал предварительной записи) в резервную копию (будут включены все журналы, созданные во время резервного копирования).
Любой метод, кроме
none
, позволяет запустить сервер с восстановленным каталогом без использования архива WAL, что обеспечивает создание независимой резервной копии.Доступны следующие методы сбора журналов предзаписи:
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
, и ко всем именамtar
-файлов автоматически добавляется суффикс.gz
.
-Z level
-Z [{client|server}-]method[:detail]
--compress=level
--compress=[{client|server}-]method[:detail]
- Запрашивает сжатие резервной копии.
Префикс
client
илиserver
указывает, где должно выполняться сжатие:- на сервере уменьшает объем передаваемых данных, но увеличивает нагрузку на процессор сервера;
- на клиенте используется по умолчанию.
Если указан параметр
--target
, резервная копия не передается клиенту, поэтому сжатие выполняется на стороне сервера.В режиме
-Xstream
(используется по умолчанию) сжатие на стороне сервера не применяется к журналу предзаписей (чтобы сжать WAL, необходимо либо применить сжатие на стороне клиента, либо использовать режим-Xfetch
).Метод сжатия может быть задан как
gzip
,lz4
,zstd
,none
для отсутствия сжатия или целое число (без сжатия, если0
,gzip
, если больше0
). Строка детализации сжатия может дополнительно задаваться. Если строка детализации представляет собой целое число, оно определяет уровень сжатия. Иначе она должна представлять собой список элементов, разделенных запятыми, каждый элемент которого имеет видkeyword
илиkeyword=value
. На текущий момент поддерживаемые ключевые слова:level
,long
иworkers
. Строка детализации не может быть использована, если метод сжатия указан просто как целое число.Если уровень сжатия не указан, используется значение по умолчанию. Если указан только уровень без указания метода, применяется метод
gzip
, если уровень больше 0. При уровне 0 сжатие отключается.При использовании формата
tar
с методами сжатияgzip
,lz4
илиzstd
, ко всем именам tar-файлов автоматически добавляется суффикс.gz
,.lz4
или.zst
, соответственно. При использовании форматаplain
сжатие выполняется только на стороне сервера. Сервер сжимает копию для передачи, а клиент распаковывает и извлекает данные из нее.В режиме
-Xstream
pg_wal.tar
будет сжат методомgzip
, если выбрано сжатиеgzip
на стороне клиента, и не будет сжат, если выбран другой метод сжатия или сжатие происходит на стороне сервера.
-c {fast|spread}
--checkpoint={fast|spread}
- Устанавливает режим контрольных точек:
fast
(быстрый);spread
(протяженный, по умолчанию).
-C
--create-slot
- Создает слот репликации до начала резервного копирования. Имя слота репликации берется из параметра
--slot
(выдается ошибка, если такой слот уже существует).
-l label
--label=label
- Задает метку для создания резервной копии. По умолчанию имеет значение
pg_basebackup base backup
.
-n
--no-clean
- Отключает очистку созданных каталогов.
По умолчанию, если утилита
pg_basebackup
завершается ошибкой, она удаляет все созданные каталоги (например, каталог журнала предзаписи). Параметр отключает эту очистку (полезно для отладки). Каталоги табличных пространств не очищаются в любом случае.
-N
--no-sync
- Записывает файлы на диск без ожидания.
По умолчанию
pg_basebackup
ждет, пока все файлы будут надежно записаны на диск. С данным параметром утилита завершается без ожидания, тем самым ускоряет процесс, но, в случае сбоя ОС, резервная копия может оказаться испорченной.Параметр используется при тестировании и не предназначен для производственной среды.
-P
--progress
- Включает приблизительный отчет о ходе выполнения во время резервного копирования. Если в копию включен журнал предзаписей, то отчет может быть неточным, так как сам журнал может меняться в процессе копирования.
-r rate
--max-rate=rate
- Устанавливает максимальную скорость загрузки данных с основного сервера (полезно для ограничения влияния
pg_basebackup
на сервер).Значение задается в килобайтах в секунду, при добавлении суффикса
M
задается значение в мегабайтах (суффиксk
допустим, но не имеет эффекта). Допустимые значения опции в диапазоне от 32 КБ/с до 1024 МБ/с.Параметр оказывает влияние на передачу каталога данных, на передачу файлов журнала предзаписи он влияет, только если выбран метод передачи
fetch
.
-S slotname
--slot=slotname
- Указывает слот репликации для передачи WAL. Применяется только с режимом
-Xstream
.Если базовая копия предназначена для использования на резервном сервере с потоковой репликацией через слот, то это же имя слота должно задаваться на резервном в качестве
primary_slot_name
(тем самым основной сервер не удалит необходимые данные журнала предзаписей после того, как базовая копия будет получена, и до того, как начнется потоковая репликация на резервном сервере).Указанный слот репликации должен существовать, если используется параметр
-C
. Если он отсутствует, требуется, чтобы указанный слот репликации уже существовал. Если же сервер поддерживает временные слоты репликации (версия 10 и выше), то они используются автоматически.
--sync-method=method
- При установке в
fsync
, которая является значением по умолчанию,pg_basebackup
рекурсивно открывает и синхронизирует все файлы в каталоге резервной копии. Когда используется простой формат, поиск файлов будет следовать символическим ссылкам для каталога WAL и каждого настроенного табличного пространства.На Linux вместо
syncfs
можно использоватьpg_basebackup
, чтобы попросить операционную систему синхронизировать всю файловую систему, содержащую каталог резервной копии. Когда используется простой формат, также синхронизирует файловые системы, содержащие файлы WAL и каждое табличное пространство.Этот параметр не имеет эффекта при использовании
--no-sync
.
-v
--verbose
- Включает режим подробного вывода. Выводится некоторая дополнительная шаги при запуске и завершении работы, а также показывать точное имя файла, который в данный момент обрабатывается, если включен отчет о прогрессе.
--manifest-checksums=algorithm
- Задает алгоритм подсчета контрольных сумм. Для всех файлов в манифесте копии, будут подсчитываться контрольные суммы с использованием одного из следующих алгоритмов:
NONE
(без подсчета),CRC32C
,SHA224
,SHA256
,SHA384
иSHA512
. По умолчанию используетсяCRC32C
.Если выбран
NONE
, то в манифесте резервного копирования не будет содержаться никаких контрольных сумм. В противном случае он будет содержать контрольную сумму каждого файла в резервной копии с использованием указанного алгоритма. Кроме того, манифест всегда будет содержать контрольную суммуSHA256
своего собственного содержимого.Алгоритмы
SHA
значительно более требовательны к процессору, чемCRC32C
, поэтому выбор одного из них может увеличить время, необходимое для завершения резервного копирования. Использование функции хешированияSHA
обеспечивает криптографически защищенный дайджест каждого файла для пользователей, которые хотят убедиться, что резервная копия не была повреждена, тогда как алгоритмCRC32C
предоставляет контрольную сумму, которая намного быстрее рассчитывается; она хороша для обнаружения ошибок из-за случайных изменений, но не устойчива к злонамеренным изменениям. Обратите внимание, что для защиты от противника, имеющего доступ к резервной копии, манифест резервного копирования необходимо хранить в надежном месте или иным образом проверять его на предмет отсутствия изменений после создания резервной копии.pg_verifybackup используется для проверки целостности резервной копии относительно манифеста резервного копирования.
--manifest-force-encode
- Принудительно кодирует имена файлов в манифесте. Параметр включает шестнадцатиричное кодирование всех имен файлов в манифесте (если он не указан, то кодируются только не UTF-8 имена файлов). Параметр предназначен главным образом для тестирования того, что инструменты, которые читают файл манифеста резервной копии, правильно обрабатывают этот случай.
--no-estimate-size
- Отключает расчет примерного объема данных для передачи при копировании (столбец
backup_total
в представленииpg_stat_progress_basebackup
будет содержатьNULL
). Если параметр опустить, то процесс копирования начнется с перечисления файлов для подсчета размера базы данных, после чего начнется отправка самих данных. Параметр используется, когда время подсчета объема слишком большое (параметр нельзя использовать совместно с--progress
).
--no-manifest
- Отключает создание манифеста резервной копии. Если этот параметр не указан, сервер создаст и отправит манифест резервного копирования, который можно проверить с помощью pg_verifybackup. Манифест представляет собой список всех файлов, присутствующих в резервной копии, за исключением любых файлов WAL, которые могут быть включены. Он также хранит размер, последнее время изменения и необязательную контрольную сумму для каждого файла.
--no-slot
- Предотвращает создание временного слота репликации для резервного копирования.
По умолчанию, если выбран потоковый журнал, но нет имени слота с параметром
-S
, создается временный слот репликации (если поддерживается исходным сервером).Основная цель этого параметра — разрешить создание базовой резервной копии, когда у сервера нет свободных слотов репликации. Использование слота репликации почти всегда предпочтительнее, потому что это предотвращает удаление необходимых WAL-сервером во время резервного копирования.
--no-verify-checksums
- Отключает проверку контрольных сумм, если они включены на основном сервере.
По умолчанию проверяются контрольные суммы, и ошибки контрольной суммы приведут к ненулевому коду выхода. Однако базовая резервная копия не будет удалена в таком случае, как если бы использовался параметр
--no-clean
. Ошибки проверки контрольных сумм также будут сообщаться в представлении pg_stat_database.
-d connstr
--dbname=connstr
- Задает параметры подключения к серверу. Параметры указываются в виде строки подключения. Они переопределят любые конфликтующие параметры командной строки.
Этот параметр называется
--dbname
ради согласованности с другими клиентскими приложениями, но посколькуpg_basebackup
не подключается ни к какой конкретной базе данных в кластере, любое имя базы данных, включенное в строку соединения, будет проигнорировано сервером. Тем не менее, указанное таким образом имя базы данных заменяет имя базы данных по умолчанию (replication
) при поиске пароля подключения репликации в файле~/.pgpass
. Аналогично, промежуточное ПО или прокси-серверы, используемые для подключения к PostgreSQL, могут использовать это имя для таких целей, как маршрутизация соединений. Имя базы данных может использоваться также для синхронизации логического слота репликации.
-h host
--host=host
- Указывает хост компьютера, на котором запущен сервер. Значение по умолчанию берется из переменной окружения
PGHOST
. Если она не установлена, выполняется подключение к Unix-сокету (каталог 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
автоматически запросит пароль, если сервер требует аутентификацию паролем. Однако утилита потратит попытку подключения, чтобы выяснить, что сервер хочет пароль. В некоторых случаях стоит ввести -W
, чтобы избежать дополнительной попытки подключения.
-V
--version
- Выводит версию
pg_basebackup
и завершается.
-?
--help
- Показывает справку о параметрах командной строки утилиты
pg_basebackup
и завершается.
Переменные окружения
Утилита pg_basebackup
использует переменные окружения, поддерживаемые libpq
.
Переменная окружения PG_COLOR
указывает, использовать ли цвет в диагностических сообщениях. Возможные значения — always
, auto
и never
.
Примечания
В начале резервного копирования необходимо выполнить контрольную точку на основном сервере. Это может занять некоторое время (особенно если не используется параметр --checkpoint=fast
), во время которого pg_basebackup
будет казаться бездействующим.
Резервная копия будет включать все файлы в каталоге данных и табличных пространствах, включая файлы конфигурации и любые дополнительные файлы, помещенные в каталог третьими лицами, за исключением определенных временных файлов, управляемых PostgreSQL. Но копируются только обычные файлы и каталоги, за исключением того, что символические ссылки, используемые для табличных пространств, сохраняются. Символические ссылки, указывающие на определенные каталоги, известные PostgreSQL, копируются как пустые каталоги. Другие символические ссылки и специальные файлы устройств пропускаются. Подробнее об этом можно ознакомится в разделе «Протокол потоковой репликации».
В формате plain
табличные пространства будут резервироваться по тому же пути, что и на основном сервере, если не используется параметр --tablespace-mapping
. Без этого параметра выполнение резервного копирования базы данных в формате plain
на том же хосте, что и сервер, не будет работать, если используются табличные пространства, потому что резервная копия должна быть записана в те же каталоги, что и исходные табличные пространства.
Когда используется формат tar
, пользователь несет ответственность за распаковку каждого файла tar
перед запуском сервера PostgreSQL, который использует эти данные. Если есть дополнительные табличные пространства, файлы tar
для них необходимо распаковать в правильных местах. В этом случае символические ссылки для этих табличных пространств будут созданы сервером в соответствии с содержимым файла tablespace_map
, включенного в файл base.tar
.
pg_basebackup
работает с серверами той же или более старой основной версии, вплоть до 9.1. Однако режим потоковой передачи WAL (-X stream
) работает только с версией сервера 9.3 и выше, а формат tar
(--format=tar
) — только с версией сервера 9.5 и выше. Инкрементальное резервное копирование (--incremental
) поддерживается только с версиями 17 и новее.
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, «Отчет о прогрессе VACUUM»