1

Hy guys, i have a postgresql 8.3 server with many database.

Actually, im planning to backup those db with a script that will store all the backup in a folder with the same name of the db, for example:

/mypath/backup/my_database1/
/mypath/backup/my_database2/
/mypath/backup/foo_database/

Every day i make 1 dump each 2 hours, overwriting the files every day... for example, in the my_database1 folder i have:

my_database1.backup-00.sql  //backup made everyday at the 00.00 AM
my_database1.backup-02.sql  //backup made everyday at the 02.00 AM
my_database1.backup-04.sql  //backup made everyday at the 04.00 AM
my_database1.backup-06.sql  //backup made everyday at the 06.00 AM
my_database1.backup-08.sql  //backup made everyday at the 08.00 AM
my_database1.backup-10.sql  //backup made everyday at the 10.00 AM
[...and so on...]

This is how i actually assure myself to be able to restore everydatabase loosing at least 2 hours of data.

2 hours still looks too much.

I've got a look to the postgresql pitr trought the WAL files, but, those files seem to contain all the data about all my database.

I'll need to separate those files, in the same way i do separate the dump files.

How to?

Otherwise, there is another easy-to-install to have a backup procedure that allo me to restore just 1 backup at 10 seconds earlier, but without creating a dump file every 10 seconds?

4

3 に答える 3

1

あなたのやり方には欠陥があると思います。複数のスキーマとロールを持つ 1 つのデータベースが必要です。その後、PITR を使用できます。ただし、PITR はダンプの代わりにはなりません。

于 2009-07-17T19:51:47.463 に答える
1

なぜデータベースを分離したいのですか?

PITR が機能する方法は、クラスター全体で機能するため、実行できません。その場合にできることは、これらのデータベースごとにデータ ディレクトリと個別のクラスターを作成することです (ただし、異なるポートと postmaster インスタンスが必要になるため、お勧めしません)。

通常のダンプの代わりに PITR を使用する利点は、データベースごとに個別のバックアップを作成することよりも重要であると私は信じています。

別の方法として、 Slony-Iでレプリケーションをセットアップすることもできますが、それにはデータを受け取る別のマシン (またはインスタンス) が必要になります。一方、そのようにすると、ほぼリアルタイムで複製されたシステムが得られます。

コメントの更新:

テーブルを削除するなどの間違いから回復するには、特定の時間まで再生できるため、PITR が最適です。ただし、500 個のデータベースの場合、オーバーヘッドが大きくなる可能性があることは理解しています。Slony-I は複製しているため、おそらく機能しません。テーブルの削除をどのように処理するかわかりません。

私はあなたが行くことができる他の方法を知りません。私がやろうとしていることは、おそらくまだPITRに向けて進んでいて、間違いを犯していないでしょう;)。冗談はさておき、ミスの頻度によっては、これが解決策になる可能性があります。

  • PITR 用にセットアップする
  • スタンバイで 2 番目のインスタンスを準備します。
  • エラーが発生した場合は、2 番目のインスタンスで特定の時点への復元を再生します。
  • そのインスタンスから影響を受けるデータベースの pg_dump を実行します。
  • そのデータベースの本番インスタンスで pg_restore を実行します。

ただし、同じサーバーまたは別のサーバー (別のサーバーをお勧めします) に 2 番目のインスタンスを用意する必要があります。また、追加のダンプと復元を 1 回行う必要があるため、復元時間は少し長くなります。

于 2009-07-15T14:04:32.997 に答える