5

私はpostgresのドキュメントを見てきましたが、以下の概要が示されています:

pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid,fileid,seg ] datadir

しかし、ドキュメントのどの時点でも、datadir が何であるかを説明していません。それは、%postgres-path%/9.0/dataまたは可能性があります%postgres-path%/9.0/data/pgxlogか?

また、xlog ディレクトリを変更したい場合、現在のpg_xlogディレクトリ内の項目を移動し、コマンドを実行して別のディレクトリを指定することはできますか? (現在の pg_xlog ディレクトリが に/data1/postgres/data/pg_xlogあり、ログを保存したいディレクトリが :であると仮定します/data2/pg_xlog)

次のコマンドは、今説明したことを実現しますか?

mv /data1/postgres/data/pg_xlog /data2/pg_xlog
pg_resetxlog /data2
4

4 に答える 4

6

pg_resetxlog次の後にデータベースを再度実行するための最後の手段です。

  • から持ってはいけないファイルを削除しましたpg_xlog

  • バックアップ システムの構成ミスにより、ディレクトリを省略したファイル システム レベルのバックアップを復元しましたpg_xlog(これは、あなたが思っている以上に起こります。人々は「名前にログが記録されているので、重要ではないはずです。除外します。バックアップ」)。

  • ハードウェア障害またはハード ドライブ障害によるファイル システムの破損により、データ ディレクトリが破損しました。または潜在的に

  • PostgreSQL のバグまたはオペレーティング システムのバグにより、先行書き込みログが破損しました (非常にまれです)。

マニュアルが言うように:

pg_resetxlog は先行書き込みログ (WAL) をクリアします [...]。これらのファイルが破損した場合、この機能が必要になることがあります。このような破損によりサーバーが起動しない場合は、最後の手段としてのみ使用してください。

pg_resetxlog自分が何をしているのか、そしてその理由を正確に理解していない限り、走らないでください。不明な場合は、pgsql-general メーリング リストまたはhttps://dba.stackexchange.com/で質問してください。

pg_resetxlogドキュメントが警告しているように、データベースが破損する可能性があります。使用する必要がある場合はREINDEX、データベースをダンプし、initdb を再起動して、データベースを再ロードする必要があります。破損したクラスターをそのまま使用しないでください。ドキュメントに従って:

このコマンドを実行した後、サーバーを起動できるはずですが、トランザクションが部分的にコミットされているため、データベースに一貫性のないデータが含まれている可能性があることに注意してください。すぐにデータをダンプし、initdb を実行して、リロードする必要があります。リロード後、不整合を確認し、必要に応じて修正します。

先行書き込みログ ディレクトリを別の場所に移動するだけの場合は、次の手順を実行する必要があります。

  • PostgreSQL を停止する
  • 動くpg_xlog
  • 古い場所から新しい場所へのシンボリック リンクを追加します。
  • PostgreSQL を起動

または、ドキュメントに記載されているように:

ログがメインのデータベース ファイルとは別のディスクにあると便利です。これは、pg_xlog ディレクトリを別の場所に移動し (もちろん、サーバーをシャットダウンしている間に)、メイン データ ディレクトリの元の場所から新しい場所へのシンボリック リンクを作成することで実現できます。

PostgreSQL が起動しない場合は、何か問題があります。pg_resetxlogそれを「修正」するために使用しないでください。変更を元に戻し、何が間違っていたかを解決します。

于 2012-10-17T05:44:57.330 に答える
1

データ ディレクトリdata_directoryは、postgresql.conf ファイルのエントリまたはPGDATA環境変数に対応し、SHOW data_directoryステートメントを使用して SQL でライブでクエリを実行することもできます。pg_xlogディレクトリではなく、1 レベル上を指します。

WAL ファイルの場所を変更するには、PG サーバーをシャットダウンし、pg_xlogディレクトリとその内容を新しい場所に移動し、古い場所から新しい場所へのシンボリック リンクを作成し、サーバーを再起動する必要があります。pg_resetxlog最新のトランザクションが抑制される可能性があるため、これには使用しないでください (このツールは通常、他のすべてが失敗した場合のクラッシュ回復状況で使用されます)。

于 2012-10-15T15:44:11.387 に答える
0

手動で WAL ファイルに触れてはいけません。これは完全に明らかです。

ディレクトリにぶら下がっているファイルがある場合、つまり、手動でクリーンアップする必要があるサブフォルダーにpg_xlogで終わるファイルがある場合、それは sql コマンドで実行できます.done*archive_status

CHECKPOINT;

これにより、WAL セグメント ファイルのクリーンアップを含むトランザクション チェックポイントが強制されます。

9.3 のドキュメントを参照してください。ただし、Postgresql の現在のすべてのバージョンに存在します。

于 2014-02-11T20:58:44.870 に答える