web-dev-qa-db-ja.com

postgresqlエラーPANIC:有効なチェックポイントレコードが見つかりませんでした

Postgresサーバー(v9.0.1)をロードすると、起動を妨げるパニックが発生します。

パニック:有効なチェックポイントレコードを見つけることができませんでした

どうすれば修正できますか?

46
nathan_scott

トランザクションログで、おそらく存在しないか破損しているチェックポイントレコードを探しています。次のコマンドを実行すると、これが事実かどうかを判断できます。

# Postgres < 10.0
pg_resetxlog DATADIR

# Postgres >= 10.0
pg_resetwal DATADIR

トランザクションログが破損している場合、次のようなメッセージが表示されます。

データベースサーバーが正常にシャットダウンされませんでした。トランザクションログをリセットすると、データが失われる可能性があります。それでも続行したい場合は、-fを使用して強制的にリセットします。

その後、指示に従って-fを使用して実行し、更新を強制できます。

# Postgres < 10.0
pg_resetxlog -f DATADIR 

# Postgres >= 10.0
pg_resetwal -f DATADIR

これによりトランザクションログがリセットされますが、 PostgreSQLドキュメントのpg_resetxlog で説明されているように、データベースが不確定な状態のままになる可能性があります。

Pg_resetxlogがpg_controlの有効なデータを決定できないと苦情を言った場合は、-f(force)スイッチを指定することで強制的に続行できます。この場合、欠落しているデータの代わりにもっともらしい値が使用されます。ほとんどのフィールドは一致すると予想されますが、次のOID、次のトランザクションIDとエポック、次のマルチトランザクションIDとオフセット、およびWAL開始アドレスフィールドについては、手動による支援が必要になる場合があります。これらのフィールドは、以下で説明するスイッチを使用して設定できます。これらのすべてのフィールドの正しい値を決定できない場合は、-fを引き続き使用できますが、リカバリしたデータベースは通常よりもさらに疑いを持って処理する必要があります。即時のダンプとリロードが必須です。ダンプする前にデータベースでデータ変更操作を実行しないでください。そのようなアクションは破損を悪化させる可能性が高いためです。

81

9.1.7を実行していますが、次が正常に実行されました。

/usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main

pg_resetxlogコマンドの最後の引数は、postgresがデータベースデータを保存するディスク上の場所です。

15
limlam

ここに示す pg_resetxlogは実行しないでください。これを参照する答えは悪いアドバイスです。コピー/レプリケーションインスタンスのコンテキストでエラーが発生したと仮定すると、リンクはpg_basebackup

8
Jerome

継続的なアーカイブを行っていますか?その時点でバックアップしている場合は、backup_labelを削除する方が賢明かもしれません。 pg_resetxlogは厳しいものです。

3
fdr

ログが言っているように:有効なチェックポイントレコードを見つけることができませんでした。Postgresは$ PGDATA/pg_xlog /ディレクトリの下で適切なWALを見つけることができません。 pg_resetxlogを使用してみてください

1
sgzhan