PostgreSQL 9.0でPITR(Point In Time Recovery)のためのWAL設定
カテゴリ:OSSセットアップ | ソフトウェア:PostgreSQL | タグ:
最終更新日:2020/12/18 | 公開日:2013/08/04
目次
構成
想定環境
サーバ構成
OSバージョン
Red Hat Enterprise Linux 5.9 x86_64
パッケージ一覧
postgresql90-9.0.13-1PGDG.rhel5.x86_64.rpm
postgresql90-libs-9.0.13-1PGDG.rhel5.x86_64.rpm
postgresql90-server-9.0.13-1PGDG.rhel5.x86_64.rpm
環境構築
インストール
PostgreSQLがインストールされ、稼働していれば、 特に追加でインストールするものはありません。
設定
まずはアーカイブログ用のディレクトリ作成を行います。
# cd / # mkdir -m 777 bkup # su - postgres -bash-3.2$ cd /bkup/ -bash-3.2$ mkdir -m 700 pgdata1 -bash-3.2$ cd pgdata1/ -bash-3.2$ mkdir -m 700 pg_arch
WALの出力レベルとアーカイブモードを変更します。 PITR(Point In Time Recovery)を行うためにはWALの出力レベル(wal_level)を archive、またはhot_standbyに設定する必要があります。 デフォルトはminimalになっています。 また、古いWALはデフォルトでは捨てられてしまいますが、 リカバリの時に必要となる可能性があるため、 WALとは別のディレクトリに保管しておきます。 この古くなって別の場所に保管されたWALをアーカイブログと呼びます。
-bash-3.2$ cd /data/pgdata1/ -bash-3.2$ vi postgresql.conf
ファイル名:/data/pgdata1/postgresql.conf
#wal_level = minimal # minimal, archive, or hot_standby
↓変更
wal_level = hot_standby # minimal, archive, or hot_standby
#archive_mode = off # allows archiving to be done
↓変更
archive_mode = on # allows archiving to be done
#archive_command = '' # command to use to archive a logfile segment
↓変更
archive_command = 'cp %p /bkup/pgdata1/pg_arch/%f' # command to use to archive a logfile segment
設定が完了したら、PostgreSQLを再起動して設定を反映させます。
-bash-3.2$ pg_ctl restart -D /data/pgdata1 -m fast -w サーバ停止処理の完了を待っています......完了 サーバは停止しました サーバの起動完了を待っています....完了 サーバ起動完了
動作テスト
アーカイブモードを有効化するとワーカプロセスが1つ増えます。 増えたワーカプロセス(アーカイバプロセス)を確認します。
-bash-3.2$ ps -ef | grep postgres (前略) postgres 4215 1 3 00:30 pts/0 00:00:00 /usr/pgsql-9.0/bin/postgres postgres 4216 4215 0 00:30 ? 00:00:00 postgres: logger process postgres 4218 4215 0 00:30 ? 00:00:00 postgres: writer process postgres 4219 4215 0 00:30 ? 00:00:00 postgres: wal writer process postgres 4220 4215 0 00:30 ? 00:00:00 postgres: autovacuum launcher process ↓ワーカプロセスが1つ増えた postgres 4221 4215 0 00:30 ? 00:00:00 postgres: archiver process postgres 4222 4215 0 00:30 ? 00:00:00 postgres: stats collector process (後略)
PostgreSQLを停止するタイミングでWALがアーカイブされます。 PostgreSQLを再起動してアーカイブログが生成されることを確認します。 以下は何度か再起動した後の状態を表示しています。
-bash-3.2$ pg_ctl restart -D /data/pgdata1 -m fast -w
サーバ停止処理の完了を待っています....完了
サーバは停止しました
サーバの起動完了を待っています.....完了
サーバ起動完了
-bash-3.2$ ll /data/pgdata1/pg_xlog/
合計 49216
-rw------- 1 postgres postgres 16777216 8月 4 22:39 000000010000000000000004
-rw------- 1 postgres postgres 16777216 8月 4 22:39 000000010000000000000005
-rw------- 1 postgres postgres 16777216 8月 4 22:37 000000010000000000000006
drwx------ 2 postgres postgres 4096 8月 4 22:39 archive_status
-bash-3.2$ ll /bkup/pgdata1/pg_arch/
合計 65616
↓アーカイブログが生成された
-rw------- 1 postgres postgres 16777216 8月 4 22:19 000000010000000000000001
-rw------- 1 postgres postgres 16777216 8月 4 22:20 000000010000000000000002
-rw------- 1 postgres postgres 16777216 8月 4 22:37 000000010000000000000003
-rw------- 1 postgres postgres 16777216 8月 4 22:39 000000010000000000000004