PostgreSQLはWAL対応バックアップの途中でチェックポイントをどのように処理しますか?


17

PostgreSQL v9.0では、WALアーカイブシステムが動作しています。したがって、WALは定期的にアーカイブされます(3つのWALが作成されたとき、またはWALが15分より古い場合)。

次に、PG_DATAディレクトリのバイナリパックアップ(pg_xlogサブディレクトリを除く)を追加します。そのためにpg_start_backup(),、バイナリコピーとを実行しpg_stop_backup()ます。

私はpg_start_backupとpg_stop_backupが何をしているかをよく理解していると思います。最初のものはチェックポイントを作成し、最後のものは最後のWALファイルがアーカイブされていることを確認します。

公式ドキュメントからバイナリデータコピーについて次のことが必要であることがわかります。

tarやcpio(pg_dumpやpg_dumpallではない)などの便利なファイルシステムバックアップツールを使用して、バックアップを実行します。これを行っている間は、データベースの通常の操作を停止する必要も望ましくもありません。

だから私はとても困惑しています。これは、コピーの作成中にチェックポイントを実行できることを意味します。コピーコマンドはコピーの実行中にデータの変更を許可する必要があることを示す多くのドキュメントを見ましたが、適切なツールを見つけるだけで大​​丈夫です。しかし、私の質問は、一貫性のないファイル(チェックポイントの前のファイル、後のファイル)を含むpg_dataコンテンツを使用してpostgreSQLどのようにリカバリを処理するかです。

トランザクションログを再生することにより、Postgresqlはこれらすべてのファイルを正しい状態にできますか?バックアップの実行中にテーブルの作成とドロップ操作が危険であることがわかりました。バキュームコマンドなどの危険な操作はありませんか?pg_backupはバキューム操作を一時停止しますか?バイナリコピープロセスの開始の最後にglobal / pg_controlファイルのコピーを作成する必要がありますか?スナップショット対応のファイルシステム(xfs-freezeなど)を使用して、復元プロセスを高速化する必要がありますか?

バックアップスクリプトのクラッシュはpg_stop_backupを自動的に起動しないので、バックアップ状態が長時間続く可能性があります(私のnagiosが誰かを呼び出してpg_stop_backup()を修正するまで)。したがって、PostgreSQLでこれら2つのコマンドの間に何か違いがある場合、それがどのような影響を与えるかを理解するために、それを知りたいと思います。

教えてください。

回答:


7

あなたが尋ねた:

一貫性のないファイルを含むpg_dataコンテンツを使用してpostgreSQLがリカバリを処理する方法。

pg_start_backup()データファイルが少なくともチェックポイントと同じであることを確認してください。回復時に、ログが適用されます。

データが古い場合、ログはそれを更新します。

データが新しい場合、ログは同じ内容になります。もう一度書いても痛くない。

ログは先読み(WAL)であるため、データがログよりも新しいことはありません。


あなたが尋ねた:

... xfs-freeze...

xfs-freezeに似てpg_start_backup()いますが、スナップショットを取りません。そのためにはボリュームマネージャが必要です。


あなたが尋ねた:

... WALがすべてを再生できる場合、なぜテーブルスペースの作成とデータベースの作成ステートメントがサポートされないのですか?

サポートされていますが、ちょっとした落とし穴があります。http://www.postgresql.org/docs/8.1/static/backup-online.htmlを参照してください

23.3.5。注意事項

CREATE TABLESPACEコマンドは、リテラル絶対パスでWALログに記録されるため、同じ絶対パスでのテーブルスペースの作成として再生されます。ログが別のマシンで再生されている場合、これは望ましくない場合があります。同じマシン上で新しいデータディレクトリにログを再生する場合でも、危険な場合があります。再生は元のテーブルスペースの内容を上書きします。この種の潜在的な問題を回避するためのベストプラクティスは、表領域を作成または削除した後に新しいベースバックアップを取得することです。


xfs-freezeについてボリュームマネージャーにも依存していることはわかっていますが、これはスナップショット作成手順の一部にすぎません。しかし、WALリカバリは、バキューム後のバイナリテーブルでのプリバキュームテーブルログのリプレイを適切に処理しますか?global / pg_controlの内容は重要ですか?WALがすべてを再生できる場合、なぜテーブルスペースの作成とデータベースステートメントの作成がサポートされないのですか?
-regilero

CREATE TABLESPACE動作します。更新された回答を参照してください。わからないがVACUUM、なぜそうならないのか想像できない。
J-16 SDiZ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.