OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

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