Перейти к основному содержимому

Валидация заархивированных WAL-файлов

примечание

Исполнять сценарий необходимо от имени пользователя postgres.

Описание сценария

Валидация заархивированных WAL-файлов

Последовательность выполнения

  1. В конфигурационном файле copywala.yaml задайте параметры:

    • wal_destination_uri – путь к хранилищу для архивированных WAL-файлов;
    • wal_segment_size – размер одного WAL-файла. По умолчанию – 16 МБ. Переопределите значение, если в целевой БД используются WAL-файлы другого размера. Значение необходимо задавать с указанием единиц измерения, например: 16MB, 16384KB, 0.016GB.
  2. Выполните команду: copywala wals verify (ознакомьтесь со справкой по команде ниже).

    Справка по команде copywala wals verify

    Описание:

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

    Синтаксис:

        
    copywala wals verify [flags]

    Обязательные параметры:

    Если в целевой БД используются WAL-файлы нестандартного размера (не 16 МБ), а в конфигурационном файле copywala.yaml не задан параметр wal_segment_size, то при выполнении команды copywala wals verify обязательно укажите флаг --auto-wal-segment-size.

    Этот флаг позволяет автоматически определить размер WAL-файла по последнему заархивированному WAL-файлу.

    подсказка

    Чтобы в дальнейшем не использовать флаг --auto-wal-segment-size:

    1. Вызовите copywala wals verify --auto-wal-segment-size.

    2. В результате вывода определите размер WAL-файла. Пример вывода:

      2026-01-22 13:13:41 [756] INF auto detected WAL segment size: 32MiB
    3. Укажите данное значение в конфигурационном файле copywala.yaml для параметра wal_segment_size.

    В дальнейшем, при вызове copywala wals verify, указание флага --auto-wal-segment-size не требуется.

    Опциональные параметры:

    [flags] – доступны следующие флаги:

    ФлагОписание
    -h|--helpПоказать справку по команде
    -c|--config <path to copywala config>Использовать конфигурационный файл, отличный от файла по умолчанию: /etc/pbr/copywala.yaml
    --auto-wal-segment-sizeАвтоматическое определение размера WAL-файла на основе последнего заархивированного файла
    --filter-max-lsn <max LSN value>Максимальное значение LSN для фильтрации WAL-файлов (по умолчанию – FFFFFFFF/FFFFFFFF)
    --filter-min-lsn <min LSN value>Минимальное значение LSN для фильтрации WAL-файлов (по умолчанию – 0/0)
    --filter-max-time <max time>Конечное время для фильтрации WAL-файлов (по умолчанию – текущее время)
    --filter-min-time <min time>Начальное время для фильтрации WAL-файлов (по умолчанию – 1970-01-01T03:00:00+03:00)
    --filter-max-wal <wal name>Имя WAL-файла, до которого будет выполняться фильтрация
    --filter-min-wal <wal name>Имя WAL-файла, начиная с которого будет выполняться фильтрация
    --integrityАнализ WAL-файлов с выводом их общего количества, количества невалидных сегментов и информации о возможных пропусках и проблемах с валидностью WAL-сегментов. Не проверяет контрольные суммы WAL-файлов
    --integrity-fullАнализ WAL-файлов аналогичный как при использовании флага --integrity, но дополнительно включая проверку контрольных сумм
    --timelineПроверка корректности текущей временной линии
    --clean-cacheОчистка текущего кеша перед выполнением проверки. Флаг работает только вместе с флагом --integrity-full и используется совместно с --use-cache
    --use-cacheВключение использования кеша при проверке целостности WAL-файлов (по умолчанию кеширование выключено). Флаг работает только вместе с флагом --integrity-full. Использования кеша позволяет пропустить уже проверенные WAL-файлы и ускорить выполнение команды.
    примечание

    Если флаги --integrity и --timeline не указаны при запуске, по умолчанию выполняются обе проверки.

Результат

В результате выполнения команды будет выведена информация по заданным проверкам. Пример выходных данных:

$ copywala wals verify --integrity --timeline

[verify] integrity check status: OK
[verify] integrity check details:
+-----+--------------------------+--------------------------+----------------+--------+
| TLI | START | END | SEGMENTS COUNT | STATUS |
+-----+--------------------------+--------------------------+----------------+--------+
| 1 | 0000000100000018000000DF | 0000000100000018000000E1 | 3 | FOUND |
| 2 | 0000000200000018000000E2 | 000000020000001D00000004 | 1059 | FOUND |
+-----+--------------------------+--------------------------+----------------+--------+
[verify] timeline check status: OK
[verify] timeline check details:
Highest timeline found in storage: 2
Current cluster timeline: 2

Исключительные сценарии

Будет выведено соответствующее сообщение для случаев:

  • При запуске команды copywala wals verify размер WAL-сегментов сверяется с текущим размером сегмента в БД, в случае отличия будет выведено сообщение:

    ERR wals verify failed err="segment size from db are not equal to auto detected from first wal file: 16777216 != 35651584"
  • В хранилище для данной БД нет WAL-файлов:

    No WAL files found in storage
  • Отсутствие прав на просмотр хранилища:

    ERR wals verify failed err="request wal files from local storage: open /backups/db0_019a02c3-6783-7e22-805d-925a2df93937/wals: permission denied"
  • Неверно настроенная конфигурация:

    ERR init config err="config file parsing error: uri: \"test:///backups\" | provided schema is not supported"