user icon

pg_basebackupを試す

今回は、クラスタ化していないシングルなPostgreSQLでpg_basebackupを試してみました。
試した環境はCentOS7のPostgreSQL9.2です(pg_basebackupは9.1以降)。

まずはマニュアルを参考に。
https://www.postgresql.jp/document/9.2/html/continuous-archiving.html

1.バックアップ手順

バックアップ時のざっくりしたイメージは、こんな感じになるようです。

リストアのざっくりしたイメージ。

pg_basebackupを使うと楽なので、こちらを使います。
※実行後は、archive_commandが自動的にWALをバックアップディレクトリにコピーし続けるようなので、
basebackup + WAL backupの二種類のバックアップが必要になります。

バックアップディレクトリ

今回はバックアップ先に/usr/local/pgsql以下を指定します。
試すだけなのでマウント等は省略。

/usr/local/pgsql/basebackupにベースバックアップを、
/usr/local/pgsql/backupにWALバックアップを取るので、
それぞれ書き込み出来るようにpostgresユーザ権限でディレクトリを作成しておきます。

postgresql.conf

以下を変更します。

wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /usr/local/pgsql/backup/%f && cp %p /usr/local/pgsql/backup/%f'
max_wal_senders = 1

※&&は&&に置き換えて
archive_command = ‘test ! -f /usr/local/pgsql/backup/%f && cp %p /usr/local/pgsql/backup/%f’
にして下さい。

pg_hba.conf

postgresユーザにreplicationの権限を追加します。
今回はローカルで実行するので、peerにします。

local   replication postgres                          peer

特殊な指定、replicationについてはマニュアルに記載が有ります。
https://www.postgresql.jp/document/9.2/html/auth-pg-hba-conf.html

起動、バックアップ

systemctl start postgresql
su - postgres
pg_basebackup -Ft -z -x -D /usr/local/pgsql/basebackup/

これで/usr/local/pgsql/basebackup/にbase.tar.gzファイルが、/usr/local/pgsql/backup/に最初のWALが書き込まれます。
起動しない時は、pg_log/のログを見ると設定エラーが出ていると思います。

2.リストア手順

PostgreSQLを停止します。

systemctl stop postgresql

ベースバックアップのリストア

$PGDATAディレクトリを退避させ、basebackupを戻します。

su - postgres
cd /var/lib/pgsql
mv data/ data.bak/
mkdir data/
tar xzfv /usr/local/pgsql/basebackup/base.tar.gz -C /var/lib/pgsql/data

※今回tar圧縮していますが、pg_basebackupのオプションによって変わるので、それぞれに合った方法でリストアします。

また、他からのアクセスを遮断する必要がある場合はpg_hba.confも一時的に修正が必要になります。
詳細な手順はマニュアルの 24.3.4. 継続的アーカイブによるバックアップを使用した復旧
https://www.postgresql.jp/document/9.2/html/continuous-archiving.html#BACKUP-PITR-RECOVERY
で確認して行います。

recovery.conf

postgresユーザ権限で、$PGDATAディレクトリ/var/lib/pgsql/dataにrecovery.confを作成します。

restore_command = 'cp /usr/local/pgsql/backup/%f %p'

ここにrecovery_target_time等を指定する事で、時間指定リカバリも出来るようです。
https://www.postgresql.jp/document/9.2/html/recovery-target-settings.html

起動、リカバリ

起動すればリカバリが実行され、recovery.confはrecovery.doneになります。

systemctl start postgresql

pg_log/にリカバリのログが記録されます。

WALがリストア出来ない

何らかの原因でWAL側のバックアップリカバリが機能せず起動しない。basebackupだけでも戻したい、
となった場合、basebackupだけではエラーが出て起動しませんので、pg_resetxlogを使います。
WALの分は巻き戻りますが。

pg_resetxlog -f /var/lib/pgsql/data

この場合、起動前にrecovery.confは削除しておきます。

Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)