PITRによるバックアップ・リカバリ
| Table of Contents |
はじめに
PITRによるオンラインバックアップ・リカバリ手順です。
PITRの流れを理解したい人向けです。
オンラインバックアップは下記のpg_rmanをお勧めします。
pg_rmanによるバックアップ/リストア
PITR設定
postgresql.confの編集
-
pg_xlog(トランザクションログ)をアーカイブログとして保存するよう設定します。
PITRを有効にするにはこの設定が必須です。$ vi /var/lib/pgsql/data/postgresql.conf# PITR関連の設定wal_level = archivearchive_mode = on archive_command = 'cp "%p" /var/lib/pgsql/9.1/backups/"%f"'
- ・%p
- WAL(トランザクションログ)ファイルのフルパス名
- ・%f
- WAL(トランザクションログ)ファイルのファイル名
-
設定変更を反映させるためPostgreSQLを再起動します。
$ pg_ctl restart
動作確認
バックアップ
チェックポイントの作成
pg_start_backup(),pg_stop_backup()を利用してチェックポイントを作成します。
-
データベース「template1」へ接続します。
$ psql template1
-
pg_start_backup()によりバックアップの開始を宣言します。
template1=# select pg_start_backup(now()::text); pg_start_backup----------------- 0/A000020(1 行)
-
データベースクラスタをコピーします。この時、データベースを停止する必要はありません。
template1=# \! cp -rp /var/lib/pgsql/9.1/data /var/lib/pgsql/9.1/backups/data_bak
-
pg_stop_backup()によりバックアップの終了を宣言します。(履歴ファイルがWAL保管領域に保存されます)
template1=# select pg_stop_backup(); pg_stop_backup---------------- 0/A0000A0(1 行)
サンプルデータの登録
-
PITRの動作確認用のDBを作成して、データとして現在の時間を登録します。
リカバリ
リカバリ作業
-
Postgresを停止
$ pg_ctl stop
-
データベースディレクトリを退避
$ mv /var/lib/pgsql/9.1/data /var/lib/pgsql/9.1/data_org
-
ベースバックアップからデータベースディレクトリを復元
$ cp -rp /var/lib/pgsql/9.1/backups/data_bak /var/lib/pgsql/9.1/data
-
pg_xlogとpidファイルを削除
$ rm -rf /var/lib/pgsql/9.1/data/pg_xlog$ rm -rf /var/lib/pgsql/9.1/data/postmaster.pid
-
最新のpg_xlogを取得
$ cp -rp /var/lib/pgsql/9.1/data_org/pg_xlog /var/lib/pgsql/9.1/data/pg_xlog
-
リカバリ用の設定ファイル(サンプル)をコピーします。
$ cp /usr/pgsql-9.1/share/recovery.conf.sample /var/lib/pgsql/9.1/data/recovery.conf
- リカバリ用の設定ファイル「/var/lib/pgsql/data/recovery.conf」を編集します。
-
Postgres起動
$ pg_ctl -w start
復旧確認
- testdbへ接続し、recovery_target_timeで指定した時間に戻っている事を確認します。