pg_basebackupからのstandbyサーバの復旧
primary と standbyで差分ができてしまったとき(WALファイルの紛失などで)pg_basebackupからの復旧手順
滅多にしないのでメモ。
standby側での作業
su - postgres
mkdir /usr/local/pgsql/basebackup
pg_basebackup -x -h primary.server.ip -D /usr/local/pgsql/basebackup
chmod 700 basebackup
cp -a ./data/recovery.conf ./basebackup
mv ./basebackup/postgresql.conf ./basebackup/postgresql.conf.master
cp -a ./data/postgresql.conf ./basebackup/
diff ./basebackup/postgresql.conf ./basebackup/postgresql.conf.master
mv ./basebackup/pg_hba.conf ./basebackup/pg_hba.conf.master
cp -a ./data/pg_hba.conf ./basebackup/pg_hba.conf
diff ./basebackup/pg_hba.conf ./basebackup/pg_hba.conf.master
#下記の4つのコマンドはrootにて
/etc/init.d/postgresql stop
mv /usr/local/pgsql/data /usr/local/pgsql/data20160623
mv /usr/local/pgsql/basebackup /usr/local/pgsql/data
/etc/init.d/postgresql start
su - postgres
psql -p 5432 -c "SELECT pg_last_xact_replay_timestamp()"
pg_last_xact_replay_timestamp
-------------------------------
2016-06-23 16:27:45.726323+09
(1 row)
基本的には
作業フォルダを作成
プライマリーのホストから、スタンバイの指定のフォルダにデータをコピー
basebackupのパーミッションを変更しておかないと起動時にエラーになるのでDBのユーザ(postgres等)のみのパーミッションへ変更
masterとの差分ファイル、pg_hba.conf, postgresql.conf, recovery.conf を元フォルダからコピー
もし、*.pid ファイルとかあれば削除しておく。pg_log のフォルダの中のログもマスタのログなので必要に応じて削除
PostgreSQLを停止
ディレクトリをリネーム
PostgreSQLを起動
起動が成功したら、コマンドから動作を確認
といったながれです。
ちなみに、起動が失敗したときは
#切り戻し
mv /usr/local/pgsql/data /usr/local/pgsql/basebackup
mv /usr/local/pgsql/data20160623 /usr/local/pgsql/data
/etc/init.d/postgresql start
とかで、切り戻して、起動ログを確認して対応します。