pg_basebackup

Название

pg_basebackup -- создать резервную копию кластера PostgreSQL

Синтаксис

pg_basebackup [ параметр ...]

Описание

pg_basebackup предназначен для создания резервных копий работающего кластера баз данных PostgreSQL. Процедура создания копии не влияет на работу других клиентов. Полученные копии могут использоваться для обеих стратегий восстановления — на заданный момент в прошлом (см. Раздел 24.3) и в качестве отправной точки для резервного сервера при реализации трансляции файлов или потоковой репликации (см. Раздел 25.2).

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

Копия создаётся через обычное подключение к PostgreSQL, и при этом используется протокол репликации. Подключение должно осуществляться от лица суперпользователя или пользователя с правом REPLICATION (см. Раздел 20.2), а в pg_hba.conf должно быть прописано подключение для репликации. Значение max_wal_senders на сервере должно быть достаточно большим, чтобы допускать минимум ещё одно подключение для копирования.

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

С помощью pg_basebackup можно получить базовую копию не только на ведущем, но и на резервном сервере. Для этого на резервном сервере необходимо разрешить подключения репликации (параметры max_wal_senders и hot_standby, а также настроить аутентификацию компьютера). При этом на ведущем необходимо включить full_page_writes.

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

Параметры

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

-D каталог
--pgdata=каталог

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

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

Этот флаг является обязательным.

-F format
--format=format

Устанавливает формат вывода. формат может принимать следующие значения:

p
plain

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

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

t
tar

Записывает в целевой каталог файлы в формате tar. Основной каталог хранения данных будет писаться в файл base.tar, а табличные пространства — в файлы, именованные в соответствии с их OID.

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

-r скорость передачи
--max-rate=скорость передачи

Максимальная скорость передачи данных с сервера. Значение задаётся в Кб/с. Для установки значения в мегабайтах, можно использовать суффикс M. Также допустим суффикс k, но он не принципиален. Допустимые значения лежат в рамках между 32 Кб/с и 1024 Мб/с.

Служит для снижения влияния на производительность сервера со стороны работающего pg_basebackup.

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

-R
--write-recovery-conf

Записать минимальный файл recovery.conf в каталог вывода (или базовый tar-файл в режиме упаковки) для упрощения настройки резервного сервера.

-T старый каталог=новый каталог
--tablespace-mapping=старый каталог=новый каталог

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

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

--xlogdir=xlog-каталог

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

-x
--xlog

Использование параметра эквивалентно -X в режиме fetch.

-X метод
--xlog-method=метод

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

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

f
fetch

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

s
stream

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

-z
--gzip

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

-Z уровень
--compress=уровень

Включает gzip-сжатие для выводимого tar-файла и заданным уровнем компрессии от 1 (минимальный) до 9 (максимальный). Сжатие поддерживается лишь в режиме упаковки.

Описанные далее аргументы командной строки влияют на генерацию резервной копии и ход выполнения приложения.

-c fast|spread
--checkpoint=fast|spread

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

-l метка
--label=метка

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

-P
--progress

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

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

-v
--verbose

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

Далее описаны параметры управления подключением.

-d строка подключения
--dbname=строка подключения

Указывает параметры подключения к серверу в формате строки подключения. См. Подраздел 31.1.1 для более подробной информации.

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

-h host
--host=host

Указывает имя компьютера, на котором запущен сервер. Если значение начинается с косой черты, оно интерпретируется как имя каталога с доменным сокетом Unix. Значение по умолчанию берётся из переменной окружения PGHOST, если она установлена. В противном случае выполняется подключение к доменному сокету.

-p порт
--port=порт

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

-s interval
--status-interval=interval

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

-U имя_пользователя
--username=имя_пользователя

Имя пользователя, под которым производится подключение.

-w
--no-password

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

-W
--password

Принудительно запрашивать пароль перед подключением к базе данных.

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

Другие флаги:

-V
--version

Вывести версию pg_basebackup.

-?
--help

Вывести справку по команде pg_basebackup.

Переменные окружения

Как и большинство других утилит PostgreSQL, приложение также использует переменные окружения, поддерживаемые libpq (см. Раздел 31.14).

Замечания

Резервная копия будет включать в себя все файлы каталога хранения данных и табличных пространств, а также конфигурационные файлы и прочие файлы, размещённые в каталоге данных. Однако копируются лишь простые файлы и каталоги. Символьные ссылки (кроме тех, что указывают на табличные пространства) и файлы спецустройств игнорируются. Более подробно см. Раздел 49.3.

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

pg_basebackup совместим с серверами той же или более младших версий, но не ниже 9.1. При этом режим потоковой отправки WAL (-X stream) работает с версиями не ниже 9.3.

Примеры

Чтобы создать резервную копию сервера mydbserver и сохранить её локально в каталог /usr/local/pgsql/data:

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

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

$ pg_basebackup -D backup -Ft -z -P

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

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

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

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

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

См. также

pg_dump