PostgreSQL PITR復元


9

CentOS 5.8 32ビットOSで実行されているPostgreSQL 9.1サーバーを使用していて、WALアーカイブを有効にしています。このサーバーには、databaseA、databaseB、およびdatabaseCの3つのデータベースがあります。誰かがdatabaseBの午後12時にテーブルを削除し、テーブルが削除された時刻の直前にdatabaseBを復元したいと考えています。時間は今午後3時です。

他の2つのデータベースの3時間分のデータを失うことなく、データベースBを午後12時まで復元するにはどうすればよいですか?

postgresql.conf

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100

recovery.conf

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'

午前9時にベースバックアップを実行しました

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup

PostgreSQLサービスは午後3時にシャットダウンされました。

回答:


6

別の場所にポイントインタイムリカバリを実行し、目的の時間に復元して、問題のデータベースをpg_dumpします。1つのデータベースを通常の場所にドロップし、再度作成して、pg_dump出力をロードします。

このような作業を始める前に、クラスターのデータディレクトリツリーのファイルシステムレベルのコピーを作成して保存してください。


回答ありがとうございます。別の場所に復元するために必要な手順を追加してから、pg_restoreを使用して復元してください。あなたの答えで、私は実際のベースバックアップの場所を使用してPITRを行うことを考えています。
Craig Efrein、2012

0

kgrittnの答えを拡張するにpg_dumpは、ドロップされたテーブルのみを実行して既存のデータベースBに再構築することもできるため、他のテーブルの6時間のデータを失う必要はありません。


回答ありがとうございます。ただし、テーブル間のさまざまな制約と関係のすべてが原因で、1つだけを復元することはできません。
Craig Efrein
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.