8

現在の状況

そこで、Postgres を実行しているデータ ログ コンピューター上の独立した内部ハード ドライブに WAL アーカイブをセットアップしました。WAL アーカイブを含むハードドライブがいっぱいになりました。最初のベース バックアップを含むすべての WAL アーカイブ ファイルを削除して、外部バックアップ ドライブにアーカイブしたいと考えています。

ディレクトリ構造は次のようになります。

D:/WALBACKUP/ は、すべての WAL ファイルの親フォルダーです (00000110000.CA00000004 など)。

D:/WALBACKUP/BASEBACKUP/ 初期ベース バックアップの .tar を保持する

私が持っている質問は次のとおりです。

  • 現在の WAL アーカイブ ファイル (000000000001.CA0000.. など) を除く、ベース バックアップを含むすべての WAL ファイルを文字通り安全に移動し、それらを別の hdd に移動できますか。(データベースはライブであり、データを受信して​​いることに注意してください)

乾杯!

4

4 に答える 4

16

WAL アーカイブ

このコマンドを使用して、特定のベース バックアップに必要のないpg_archivecleanupアーカイブ ( not ) から WAL を削除できます。 pg_xlog

一般的には、PgBarman または同様のツールを使用して、ベース バックアップと WAL 保持を自動化することをお勧めします。より簡単で、エラーが発生しにくくなります。

pg_xlog

WAL をpg_xlog手動で削除しないでください。WAL が多すぎる場合:

  • あなたのwal_keep_segments設定はWALを維持しています。
  • archive_modeオンにして設定archive_commandしましたが、正しく機能していません(ログを確認してください)。
  • あなたcheckpoint_segmentsはとてつもなく高いので、WALを生成しすぎています。また
  • pg_replication_slotsWAL の削除を妨げているレプリケーション スロット (ビューを参照) があります。

WAL が保持される原因となっている問題を修正する必要があります。設定を変更しても何も起こらなかったように見える場合は、手動CHECKPOINTコマンドを実行してください。

オフライン サーバーがあり、それを開始するために WAL を削除する必要がある場合は、必要に応じて使用できpg_archivecleanupます。サーバー自体が必要としない WAL のみを削除する方法を知っていますが、アーカイブベースのバックアップ、ストリーミングレプリカなどを壊す可能性があります。したがって、必要がない限り使用しないでください

于 2016-02-02T08:01:43.550 に答える
7

WAL ファイルはインクリメンタルなので、単純な答えは次のとおりです。ファイルを捨てることはできません。解決策は、新しい基本バックアップを作成することです。その後、以前のすべての WAL を削除できます。

WAL ファイルには、テーブルを変更する個々のステートメントが含まれているため、古い WAL を破棄すると、データベースの状態を確実に復元できないため、回復プロセスが失敗します (欠落している WAL ファイルをサイレントにスキップすることはありません)。WAL プロセスを混乱させずに WAL ファイルを別の場所に移動できますが、過去のある時点からデータベースを復元する必要がある場合は、すべての WAL ファイルを単一の場所から再び利用できるようにする必要があります。ディスク容量が不足している場合は、ベース バックアップとすべての WAL ファイルを保存するのに十分な容量がある場所から復元することを意味する場合があります。ここでの主な問題は、インシデント後に完全なデータベースを復元するのに十分な速さでそれを実行できるかどうかです.

もう 1 つの問題は、修正が必要な問題がいつどこで発生したかを特定できない場合、ベース バックアップから開始してすべての WAL ファイルを再生するしかないということです。この手順は難しくありませんが、古い基本バックアップと処理する WAL ファイルが多数ある場合、単純に時間がかかります。

一般に、あなたの場合の最善のアプローチは、x か月ごとに新しい基本バックアップを作成し、その基本バックアップで WAL を収集することです。新しいベース バックアップごとに、古いベース バックアップとそれに続く WAL を削除するか、安価なオフライン ストレージ (DVD、テープなど) に移動できます。重大なインシデントが発生した場合、最近のベース バックアップとそれ以降に収集された比較的少数の WAL ファイルから、既知の正しい状態にデータベースをすばやく復元できます。

于 2016-02-02T03:23:41.407 に答える
6

私たちが行った解決策は、pg_basebackupを毎晩実行することです。これによりベース バックアップが作成され、後でpg_archivecleanupを使用して、そのベースの前にあるすべての「古い」WAL ファイルをクリーンアップすることができます。

"%POSTGRES_INSTALLDIR%\bin\pg_archivecleanup" -d %WAL_backup_dir% %newestBaseFile%

幸いなことに、まだ復旧する必要はありませんでしたが、理論上はうまくいくはずです。

于 2017-01-19T07:38:46.500 に答える