2. プロセスとメモリー
3.4 オンライン・バックアップ
3.4.1 オンライン・バックアップの動作
オンライン・バックアップはインスタンス起動状態でバックアップを取得する方法です。
インスタンスに対して pg_start_backup 関数を発行し、データベース・クラスタ以下の全 ファイルをバックアップします。バックアップが完了したらpg_stop_backup関数を実行し ます。これらの操作はpg_basebackupコマンドで自動的に行うことができます。オンライ ン・バックアップはデータベース・クラスタ(および外部テーブル空間)全体のバックアッ プを取得する必要があります。データベース単位のバックアップはpg_dumpコマンド等の 論理バックアップを使用する必要があります。
□ pg_start_backup関数
オンライン・バックアップの開始を宣言します。この関数が実行されると、バックアップ 開 始 時 の WAL オ フ セ ッ ト 値 が 表 示 さ れ ま す 。 ま た ラ ベ ル ・ フ ァ イ ル
「{PGDATA}/backup_label」が作成されます。ラベル・ファイルには、バックアップの開始 時間やWALの情報が記載されます。
例 57 オンライン・バックアップの開始
例 58 pg_start_backup関数実行時のbackup_labelファイル postgres=# SELECT pg_start_backup(now()::text) ; pg_start_backup
--- 0/59000028 (1 row) postgres=#
$ cat data/backup_label
START WAL LOCATION: 0/EA000028 (file 0000000100000000000000EA) CHECKPOINT LOCATION: 0/EA000028
BACKUP METHOD: pg_start_backup BACKUP FROM: master
START TIME: 2015-01-08 11:01:37 JST LABEL: 2015-01-08 11:01:36.608139+09
□ pg_stop_backup関数
オンライン・バックアップの完了を宣言します。この関数が実行されると、バックアップ 終了時の WAL オフセット値が表示されます。また pg_start_backup 関数実行時に作成さ れたラベル・ファイル「{PGDATA}/backup_label」は削除され、アーカイブ・ログディレク トリに新規のラベル・ファイルが作成されます。
例 59 オンライン・バックアップの終了
パラメーターarchive_mode=off の状態でオンライン・バックアップを実行すると、
pg_stop_backup関数実行時に以下の警告が表示されます。
例 60 オンライン・バックアップの終了(archive_mode=off)
3.4.2 バックアップ・ラベル・ファイル
バックアップ・ラベル・ファイルは、オンライン・バックアップの終了情報が記載される テキストファイルです。pg_start_backup 関数を実行すると、「{PGDATA}/backup_label」
ファイルとして作成されます。pg_stop_backup関数を実行すると、backup_labelファイル は内容を再読み込みした後削除され、アーカイブログと同じディレクトリに以下のフォー マットの名前で作成されます。
postgres=# SELECT pg_stop_backup() ;
NOTICE: pg_stop_backup complete, all required WAL segments have been archived pg_stop_backup
--- 0/5B0000B8 (1 row)
postgres=# SELECT pg_stop_backup() ;
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
pg_stop_backup --- 0/590000B8 (1 row)
ラベル・ファイルのフォーマット
インスタンス停止時に backup_label ファイルが残っている場合、同じディレクトリに backup_label.oldファイルに名前が変更されます。この処理は、pg_ctl stop -m immediate コマンドを実行した場合でも実施されます。
イ ンスタンス 起動時に backup_label ファ イルが残っ ている場合も、ファイ ル名が
backup_label.old にファイル名が変更されてからインスタンスが起動されます。ログには
何も出力されません。
ラベル・ファイルはテキスト形式のファイルで、オンライン・バックアップに関する情報 が記載されています。
表 36 バックアップ・ラベル・ファイルの内容
行 出力内容 説明 備考
1 START WAL LOCATION: バックアップ開始時のWAL
2 STOP WAL LOCATION: バックアップ終了時のWAL
3 CHECKPOINT LOCATION: チェックポイント情報
4 BACKUP METHOD: バックアップ方法
5 BACKUP FROM: バックアップ元
6 START TIME: 開始時刻
7 LABEL: バックアップ・ラベル pg_start_backup 関
数で指定
8 STOP TIME: 終了時刻 pg_stop_backup 関
数により追記
最終行のSTOP TIMEはpg_stop_backup関数を実行した場合に限り出力されます。
{WALFILE}.{WALOFFSET}.backup
例 61 ラベル・ファイル
3.4.3 レプリケーションとオンライン・バックアップ
オンライン・バックアップ関数を実行できるのはマスター・インスタンスのみです。スレ ーブ・インスタンスで実行すると「ERROR: recovery is in progress」エラーが発生します。
例 62 スレーブ・インスタンスでオンライン・バックアップ
マスター・インスタンスでオンライン・バックアップ実行中にスレーブ・インスタンス
でpg_is_in_backup関数を実行するとf(オンライン・バックアップ中ではない)が返り
ます。
例 63 スレーブ・インスタンスでオンライン・バックアップのチェック START WAL LOCATION: 0/EC000028 (file 0000000100000000000000EC) STOP WAL LOCATION: 0/EC0000B8 (file 0000000100000000000000EC) CHECKPOINT LOCATION: 0/EC000028
BACKUP METHOD: pg_start_backup BACKUP FROM: master
START TIME: 2015-01-08 11:08:51 JST LABEL: test
STOP TIME: 2015-01-08 11:09:02 JST
postgres=# SELECT pg_start_backup(now()::text) ; ERROR: recovery is in progress
HINT: WAL control functions cannot be executed during recovery.
postgres=#
postgres=# SELECT pg_is_in_backup() ; pg_is_in_backup
--- f
(1 row)
3.4.4 オンライン・バックアップとインスタンス停止
オンライン・バックアップ中に、smart モードを指定したインスタンス停止は失敗しま す。停止に失敗した場合でもインスタンスはシャットダウン中のステータスになるため一 般ユーザーは接続できません。オンライン・バックアップ中にインスタンスを強制的に停止 するにはfastモードを指定します。
例 64 オンライン・バックアップ中のインスタンス停止
postgres=# SELECT pg_start_backup(now()::text) ; pg_start_backup
--- 0/A5000028 (1 row) postgres=# \q
$
$ pg_ctl -D data stop
WARNING: online backup mode is active
Shutdown will not complete until pg_stop_backup() is called.
waiting for server to shut
down... failed pg_ctl: server does not shut down
HINT: The "-m fast" option immediately disconnects sessions rather than waiting for session-initiated disconnection.
$ echo $?
1
$ pg_ctl -D data stop -m fast
waiting for server to shut down....
done
server stopped
$