web-dev-qa-db-ja.com

Postgresで1時間ごとに増分バックアップを行う方法は?

1つのPostgresサーバー(Win7 64)の1時間ごとの増分バックアップを実行しようとしています。

postgresql.confに次の設定があります:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(再起動)

pg_basebackup -U postgres -D ..\foo -F t -xでベースバックアップを行いました

これにより、fooフォルダーに大きなbase.tarファイルが作成され、16,384 KBのファイルがいくつか追加されました。

私が理解していないのはfooのWALが変更されない理由です。 data/pg_xlogのWALが変更されました。 pgはそれらをコピーすることになっていますか?どのようにして決定するのですか?

おそらくarchive_timeout=3600を設定する必要がありますか?

Pg_start_backup()とpg_stop_backup()を呼び出す必要があると言うサイト(pgのメーリングリスト、baculaのpostgresページ)をいくつか見ましたが、これらは必須ではないと思います。本当?

二次質問:

  1. data/pg_xlogのWALはどのくらいの頻度で書き込まれますか?何が書き込みをトリガーしますか?

    DMLを実行してからPSQLで\qを実行すると、WALが更新されるようです。または、pgAdminでテーブルを編集してウィンドウを閉じます。私はそれがコミット時に書き込むと考えました。

  2. ベストプラクティス? pg_basebackupは週に1回ですか? WALをPGと同じマシンまたはリモートマシンにアーカイブしますか?

18
Neil McGuigan

アーカイブフォルダのリモートストレージへの増分バックアップを実行したい。

バックアップから復元する必要がある場合の基本的なシナリオは、開始点としてのベースバックアップと、開始点とクラッシュの間に発生したトランザクションアクティビティを再生するためにアーカイブフォルダーの内容全体が必要になることです。

また、アーカイブフォルダー内のファイルが永遠に蓄積されないようにするために、時々新しいベースバックアップを実行し、新しいベースバックアップの前にアーカイブされたファイルを削除します。

5
Daniel Vérité

非常に役立つ既存のツール WAL-E があります。 archive_commandおよびrestore_command S3へのPITRの場合。

noコマンドを実行するincrementalまたは差分論理バックアップ。 pg_dumpは増分または差分を取ることはできません。これを行う唯一の方法は、ログのアーカイブを使用することです。

理論的には、新しい完全バックアップを取り、それと最後のバックアップとの間でバイナリ差分を行い、差分をアップロードすることができます。これは、物事を行うための脆弱で非効率的な方法だと私は思いますが、私は本当にそれをお勧めしません。

さらに、PgBarmanはフックスクリプトを介してS3との統合をサポートし、バックアップのローテーションと管理の多くを自動化します。繰り返しますが、これはWindowsのオプションではない可能性があります。

8
Craig Ringer