レプリケーションを機能させるための「タイムライン履歴ファイル」が見つかりません

レプリケーションを機能させるための「タイムライン履歴ファイル」が見つかりません

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/

では、この「タイムライン履歴ファイル」はどこで入手できるのでしょうか?

答え1

によると6対2その後、ファイルを作成してレプリケーションのセットアップに進むことができるかもしれませんが、本質的には、このファイルが適用可能でなかったり、操作ごとに削除されたりしても、このファイルが必要になるという PostgresSQL のバグです。

注記: Postgresql 10以降では関数の名前が次のように変更されました。pg_current_wal_lsn()

PostgreSQL が新しいプライマリ サーバーを昇格すると、WAL ファイル ディレクトリに配置される小さなテキスト ファイルの形式でタイムライン分割のマーカーが作成されます。このファイルにより、かなり複雑なフェイルオーバーおよびフェイルバックのシナリオでも Point-In-Time-Recovery を実現できます。

したがって、ファイルを再作成する必要があるようです。 非常に良い要約 Postgres wiki の .history ファイルを参照してください。ただし、情報は .pdf 形式であるため、インデックス作成が難しくなる傾向があり、そのドキュメントが存在することを事前に知らない場合は、見つけるのが難しい場合があります。

しかし、そのタイムラインに戻ることは決してありません。それはアップグレード前のことです。失われたファイルを再作成するために必要なのは、十分な数字だけです。次のコマンドを実行すると、十分な数字が得られます。

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

これらの値を使用して WAL ディレクトリに .history ファイルをモックアップすると、レプリカはすぐに起動できるようになります。

ソース

これらの (上記の) 結果を使用して、エラーごとに予想される名前でファイルを作成します。


その他のリソース

  • PostgreSQL のタイムラインを理解する

  • システム管理機能

    名前: pg_current_xlog_location()

    戻り値の型: 文章

    説明: 現在のトランザクションログの書き込み場所を取得する

    pg_current_xlog_location上記の関数で使用されるのと同じ形式で、現在のトランザクション ログの書き込み場所を表示します。同様に、pg_current_xlog_insert_location は、現在のトランザクション ログの挿入ポイントを表示します。挿入ポイントは、任意の時点でのトランザクション ログの「論理的な」終了位置ですが、書き込み位置は、サーバーの内部バッファから実際に書き出されたものの終了位置です。書き込み位置は、サーバーの外部から調べることができる終了位置であり、通常は、部分的に完了したトランザクション ログ ファイルをアーカイブする場合に必要なものです。挿入ポイントは、主にサーバーのデバッグ目的で使用可能になります。これらは両方とも読み取り専用の操作であり、スーパーユーザー権限は必要ありません。

    pg_xlogfile_name_offset上記のいずれかの関数の結果から、対応するトランザクション ログ ファイル名とバイト オフセットを抽出するために使用できます。

    同様に、pg_xlogfile_nameトランザクション ログ ファイル名のみを抽出します。指定されたトランザクション ログの場所がトランザクション ログ ファイルの境界にちょうど一致する場合、これらの関数は両方とも、前のトランザクション ログ ファイルの名前を返します。前のファイルは現在アーカイブする必要がある最後のファイルであるため、これは通常、トランザクション ログのアーカイブ動作を管理するために望ましい動作です。

    ソース

関連情報