Восстановление WAL-файлов
Исполнять сценарий необходимо от имени пользователя postgres.
Описание сценария
Процесс восстановления WAL-файлов, инициируемый СУБД.
Если WAL-файлы находятся в разных хранилищах, ознакомьтесь с разделом Восстановление WAL-файлов из нескольких хранилищ.
Последовательность выполнения
Шаги сценария:
-
Задайте в конфигурационном файле
copywala.yamlзначения для параметров:wal_destination_uri– путь к хранилищу для архивированных WAL-файлов.restore_instance_name– наименование экземпляра БД для восстановления (соответствует уникальному имени экземпляра агента —instance_name, полученному при инициализации приложения).
-
Установите значение в настройках БД (postgresql.conf)
archive_command='copywala restore-wal %f %p'.Справка по команде
copywala restore-walОписание:
Используется в
restore_command(postgresql.conf) и выполняет восстановление WAL-файлов из удаленного хранилища.Синтаксис:
copywala restore-wal %f %p [flags]Обязательные параметры:
%f— имя WAL-файла, который нужно восстановить.%p— путь в файловой системе, куда WAL-файл должен быть восстановлен.
Опциональные параметры:
[flags]– доступны следующие флаги:Флаг Описание -h|--helpПоказать справку по команде -c|--config <path to copywala config>Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml
Результат
При восстановлении СУБД запросит WAL-файл (или *.history), выполняя команду, указанную в restore_command:
2025-08-28 14:58:03.981 INF 00000001000000030000002A: wal restored pg_wal/XLOGRECORD storage=s2 time_elapsed=114.872333ms
Дополнительные настройки сценария
В разделе перечисляются необязательные параметры, расширяющие возможности основного сценария.
Как ускорить восстановление
CopyWala поддерживает упреждающую многопоточную загрузку нескольких WAL-файлов, следующих после запрошенного в текущий момент WAL-файла при вызове restore_command. Это позволяет ускорить восстановление за счет более быстрого получения доступа к WAL-файлам.
При включенной упреждающей многопоточной загрузке WAL-файлов предзагрузка выполняется в два этапа:
- Во время загрузки WAL-файлы размещаются в директории
.copywala/prefetch/running. - После завершения загрузки файлы атомарно перемещаются в
.copywala/prefetch, откуда используются СУБД при восстановлении.
Директории для хранения предзагруженных WAL-файлов создаются автоматически от имени пользователя, под которым запущена copywala. Расположение директорий настраивается в copywala.yaml параметром wal_archiving.wal_prefetch_dir. По умолчанию директории .copywala/prefetch/running и .copywala/prefetch будут созданы внутри pg_wal. Права доступа к директориям настраивается в copywala.yaml параметром wal_archiving.wal_dir_mode.
Количество предзагружаемых WAL-файлов регулируется параметром wal_archiving.wal_prefetch_size (подробное описание параметра ниже).
При выполнении restore_command система сначала пытается получить WAL-файл из директории .copywala/prefetch. Если файл отсутствует, выполняется проверка директории .copywala/prefetch/running:
- если файл находится в процессе загрузки и его размер продолжает увеличиваться, система ожидает завершения загрузки;
- если размер файла не изменяется более 200 миллисекунд, WAL-файл загружается напрямую из хранилища;
- после завершения загрузки файл перемещается в
.copywala/prefetchи используется для восстановления.
Это позволяет при следующих вызовах restore_command использовать локально загруженные WAL-файлы, что ускоряет восстановление.
Упреждающая загрузка WAL-файлов активируется и регулируется параметром wal_archiving.wal_prefetch_size, который находится в секции wal_archiving конфигурационного файла copywala.yaml:
wal_archiving:
wal_prefetch_size: 0
Значение | Описание |
|---|---|
| Упреждающая загрузка выключена |
любое целое число > 0 | Включает механизм упреждающей загрузки WAL-файлов в указанном количестве |
Рекомендуется задавать значение параметра таким, чтобы указанное количество WAL-файлов успевало загружаться за время обработки текущего WAL-файла.
Исключительные сценарии
Будет выведено соответствующее сообщение для случаев:
- Закончилось место на диске.
- Неверно настроенная конфигурация.