PITR を PostgreSQL 8.3.5文書 通り試してみました
とりあえず、てきとうな DB を作成するところから
$ createdb -E EUC_JP testdb
$ psql testdbtestdb=# create table hoge (
testdb(# id int primary key,
testdb(# name text
testdb(# );
ここらへんでベースバックアップを作成
ある時期のpgsql/data の状態がないと、REDO な操作しか受け付けないから復旧できない
理屈的には、インストールした状態のベースバックアップがあれば REDO できる?(あとで試す)
ベースバックアップモードへの以降(とりあえずのチェックポイント作成とバックアップラベルファイルの生成)
- (他にもいろいろやってる?後で追求)
testdb=# select pg_start_backup('test1');
pg_start_backup
- -
0/45F214
(1 row)
別ターミナルでバックアップの取得
# cp -pR /usr/local/pgsql/data /usr/local/pgsql/data_backup
ベースバックアップモードの終了
testdb=# select pg_stop_backup();
pg_stop_backup
- -
0/45F270
(1 row)
別ターミナルで、一応アーカイブログがあるか確認
# ll /mnt/server/archivedir/
total 16408
- rw------- 1 postgres postgres 16777216 Feb 19 04:30 000000010000000000000000
- rw------- 1 postgres postgres 235 Feb 19 04:30 000000010000000000000000.0045F214.backup
テーブルにテストデータを挿入
testdb=# insert into hoge values (1, 'TOYO');
INSERT 0 1
testdb=# insert into hoge values (2, 'グランパ');
INSERT 0 1
testdb=# insert into hoge values (3, '国際センター');
INSERT 0 1
あっ、まちがえて、delete from hoge して、テーブル hoge の中身が全部消えちゃった!
- とりあえず時刻の確認(別ターミナル)
# date
Thu Feb 19 04:35:24 JST 2009
-
- delete !!!
testdb=# delete from hoge;
復旧開始、まず postgres の停止
# service postgres stop
pg_xlog の退避
# cd /usr/local/pgsql/data
# cp -pR pg_xlog /tmp/pg_xlog
ベースバックアップの状態まで復元
# cd ..
# rm -rf data
# mv data_backup data
pg_xlog の復元
pg_xlog の中身をすべて削除して
# find pg_xlog/ -type f | xargs rm -f
退避しておいたファイルをコピー
# cp -pR /tmp/pg_xlog ./
recovery.conf の作成
# cp ../share/recovery.conf.sample ./recovery.conf
recovery.conf の編集(以下 2行のみコメントアウトを解除して編集)
restore_command = 'cp /mnt/server/archivedir/%f %p' recovery_target_time = '2009-02-19 04:35:23 JST'
サーバの起動
# service postgres start
以上で、delete した直前の状態まで復旧完了。