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で指定した時間に戻っている事を確認します。
このエントリーをはてなブックマークに追加
Last-modified: 2012-02-26 (日) 23:00:36   最終更新のRSS