Не удается найти «файл истории времени», чтобы заставить репликацию работать

2718
valya

Я использую PostgreSQL 9.4, пытаясь запустить репликацию.

Что я делаю, черпая вдохновение из инструкций в вики и документации :

  1. SELECT pg_start_backup('clone', true);
  2. rsync базы данных для будущей реплики
  3. SELECT pg_stop_backup();
  4. rsyncиз pg_xlogпапки в Потенциальных реплики

Я запускаю реплику, и она говорит:

LOG: fetching timeline history file for timeline 3 from primary server FATAL: could not receive timeline history file from the primary server: ERROR: could not open file "pg_xlog/00000003.history": No such file or directory 

Естественно, я ищу .historyфайл pg_xlog/на обоих серверах, но его нет.

Я просматриваю документы, чтобы выяснить, что

Чтобы использовать резервную копию, вам необходимо сохранить все файлы сегментов WAL, созданные во время и после резервного копирования файловой системы. Чтобы помочь вам в этом, функция pg_stop_backup создает файл истории резервного копирования, который немедленно сохраняется в области архива WAL. Этот файл назван в честь первого файла сегмента WAL, который необходим для резервного копирования файловой системы. Например, если начальным файлом WAL является 0000000100001234000055CD, файл истории резервного копирования будет иметь имя, например, 0000000100001234000055CD.007C9330.backup.

Однако так получилось, что после того, как я это сделаю pg_stop_backup(), все равно ничего подобного pg_xlog/нет нигде.

Итак, где я могу получить этот «файл истории времени»?

5

1 ответ на вопрос

2
Pimp Juice IT

Согласно сообщению « Шесть для двоих», вы можете просто создать файл, а затем он перейдет к настройке репликации, но по сути это ошибка PostgresSQL, где он нуждается в этом файле, даже если он неприменим или удален по операция.

Когда PostgreSQL продвигает новый первичный сервер, он создает маркер временной шкалы в виде небольшого текстового файла, помещенного в каталог файлов WAL. Этот файл позволяет достичь восстановления по времени при некоторых довольно сложных сценариях отработки отказа и возврата.

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

Но мы никогда не вернемся к этому графику, потому что это до нашего обновления. Все, что нам нужно для восстановления потерянного файла - это достаточно хорошее число. И вы можете получить один, запустив:

# SELECT pg_current_xlog_location(); pg_current_xlog_location -------------------------- 1/38F70328 (1 row) 

Создайте макет файла .history в каталоге WAL с этими значениями и т. Д. Реплика сразу сможет начать.

источник

Создайте файл с этими (приведенными выше) результатами, но с ожидаемым именем для ошибки.


Дополнительные ресурсы

  • Понимание временных рамок PostgreSQL

  • Функции системного администрирования

    Название: pg_current_xlog_location()

    Тип возврата: текст

    Описание: Получить текущее местоположение записи журнала транзакций.

    pg_current_xlog_locationотображает текущее местоположение записи журнала транзакций в том же формате, который использовался вышеупомянутыми функциями. Аналогично, pg_current_xlog_insert_location отображает текущую точку вставки журнала транзакций. Точка вставки является «логическим» концом журнала транзакций в любой момент, в то время как место записи является концом того, что было фактически записано из внутренних буферов сервера. Расположение записи - это конец того, что можно проверить извне сервера, и обычно это то, что вам нужно, если вы заинтересованы в архивировании частично полных файлов журнала транзакций. Точка вставки доступна главным образом для отладки сервера. Обе эти операции предназначены только для чтения и не требуют прав суперпользователя.

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

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

    источник

Похожие вопросы