pg_rman -- PostgreSQL のバックアップとリカバリを管理します。
pg_rman [ OPTIONS ] { init |
backup |
restore |
show [ DATE | detail ] |
validate [ DATE ] |
delete DATE |
purge }
pg_rman は以下の機能を持ちます。
DATE
には、対象のバックアップのタイムスタンプ (開始日時) を ISO 形式 (YYYY-MM-DD HH:MI:SS) で指定します。DATE
の末尾は省略可能で、その場合は指定した DATE
の範囲に含まれるバックアップが対象となります。
$ pg_rman show 2009-12 # 2009年12月に取得したバックアップを表示
$ pg_rman validate # 未検証のすべてのバックアップを検証
以下のコマンドをサポートします。オプション OPTIONS
の詳細は オプション を参照してください。
init
backup
restore
show
detail
を合わせて指定すると、より詳細な情報を表示します。validate
delete
purge
pg_rman は、PostgreSQL のオンライン・バックアップとリカバリを管理するためのプログラムです。 バックアップ方式は、物理オンライン・バックアップです。 バックアップ対象は、データベースクラスタ自体とアーカイブ WAL、サーバログです。
PostgreSQL 9.0以降のレプリケーションを利用している場合、スタンバイサイトでのバックアップに対応しています。
その他、ストレージ・スナップショットを使用したバックアップに対応しています。
pg_rman は、取得したバックアップファイルや管理情報を「バックアップカタログ」という領域に保存します。 このため、まず最初にバックアップカタログを初期化する必要があります。
$ pg_rman init -B <バックアップカタログパス> -D <PostgreSQLのデータベースクラスタパス> -A <アーカイブログの格納パス>
ここで、カタログを初期化する前に postgresql.conf にある log_directory
、archive_mode
、archive_command
を設定しておくことをお奨めします。
これらのパラメータが設定されていると、pg_rman はその値を反映してサーバログの参照先とアーカイブログの参照先を設定することができます。
この場合、PostgreSQL のデータベースクラスタパスを指定する必要があります。
バックアップのモードは以下のいずれかで指定します。
取得したバックアップが適切かどうか検証します。検証にはファイルサイズのチェックとCRCによるチェックを用いています。
バックアップが正常に取得できたら、なるべく早いタイミングでバックアップを検証してください。 未検証のバックアップは、リストアにも増分バックアップの取得基準としても使用できません。
取得したバックアップは show
コマンドにて確認できます。
$ pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 375MB 1 OK
2023-11-28 12:13:15 2023-11-28 12:13:17 INCR 33MB 1 OK
2023-11-28 12:12:48 2023-11-28 12:12:50 INCR 33MB 1 OK
2023-11-28 12:12:36 2023-11-28 12:12:38 INCR 33MB 1 OK
2023-11-28 12:11:51 2023-11-28 12:12:00 FULL 3366MB 1 OK
show detail
コマンドにて、各バックアップのより詳細な情報を一覧表示できます。
$ pg_rman show detail
======================================================================================================================
StartTime EndTime Mode Data ArcLog SrvLog Total Compressed CurTLI ParentTLI Status
======================================================================================================================
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 369MB 67MB 66kB 375MB false 1 0 OK
2023-11-28 12:13:15 2023-11-28 12:13:17 INCR 297kB 33MB 63kB 33MB false 1 0 OK
2023-11-28 12:12:48 2023-11-28 12:12:50 INCR 297kB 33MB 60kB 33MB false 1 0 OK
2023-11-28 12:12:36 2023-11-28 12:12:38 INCR 297kB 33MB 57kB 33MB false 1 0 OK
2023-11-28 12:11:51 2023-11-28 12:12:00 FULL 369MB 3053MB 3909kB 3366MB false 1 0 OK
ここで、表示される列の意味は以下の通りです。
個別のバックアップについての詳細な情報は、「Start」に表示される日付を show
コマンドに指定することで表示できます。
$ pg_rman show '2023-11-28 12:14:03'
# configuration
BACKUP_MODE=FULL
FULL_BACKUP_ON_ERROR=false
WITH_SERVERLOG=true
COMPRESS_DATA=false
# result
TIMELINEID=1
START_LSN=0/c2000028
STOP_LSN=0/c2000ee0
START_TIME='2023-11-28 12:14:03'
END_TIME='2023-11-28 12:14:05'
RECOVERY_XID=22719
RECOVERY_TIME='2023-11-28 12:14:05'
TOTAL_DATA_BYTES=369864268
READ_DATA_BYTES=369864034
READ_ARCLOG_BYTES=33554780
READ_SRVLOG_BYTES=68692
WRITE_BYTES=342403000
BLOCK_SIZE=8192
XLOG_BLOCK_SIZE=8192
STATUS=OK
取得した検証済みバックアップを用いて、必要なファイルをリストアします。
リストアを行う前に、PostgreSQL サーバを停止させる必要があります。
また、既存のデータベースクラスタは残しておいてください。 pg_rmanがリストアの際にタイムラインやデータチェックサム有無などの情報を読み取る必要があるためです。 pg_rmanがリストア中に未アーカイブの WAL をバックアップしつつ、その他のデータを削除します。 未アーカイブの WAL のバックアップは次に全体バックアップを取得するまで保持されるので、リカバリ結果が望んだものでなかった場合は再度リストアからやり直すことが可能です。
リストア時に、pg_rmanは、リカバリに関連する設定を行います。設定先のファイルは、PostgreSQLのバージョン、 及び、pg_rmanのバージョンに依存します。必要に応じてこのファイルを編集してから PostgreSQL を起動して、 PITR を実行してください。
$PGDATA/recovery.conf
を生成し、設定を記載します。$PGDATA/postgresql.conf
に設定を追記し、$PGDATA/recovery.signal
を生成します。$PGDATA/pg_rman_recovery.conf
を生成・設定を記載し、$PGDATA/postgresql.conf
に
include
ディレクティブを用いて、pg_rman_recovery.conf
を読み込む設定を一番下に追記します。
このとき過去にリストアした際にpg_rmanによって追加されたinclude
ディレクティブが存在した場合は、削除します。
また、$PGDATA/recovery.signal
を生成します。
# PostgreSQLが12よりも前の場合
$ cat $PGDATA/recovery.conf
# recovery.conf generated by pg_rman 1.2.11
restore_command = 'cp /home/postgres/arclog/%f %p'
recovery_target_timeline = '1'
# PostgreSQLが12以上、pg_rmanが1.3.12以下のバージョンの場合
$ tail -n 3 $PGDATA/postgresql.conf
# postgresql.conf generated by pg_rman 1.3.12
restore_command = 'cp /home/postgres/arclog/%f %p'
recovery_target_timeline = '1'
# PostgreSQLが12以上、pg_rmanが1.3.12よりも後のバージョンの場合
$ tail -n 1 $PGDATA/postgresql.conf
include = 'pg_rman_recovery.conf' # added by pg_rman 1.3.16
$ cat $PGDATA/pg_rman_recovery.conf
# added by pg_rman 1.3.16
restore_command = 'cp /home/postgres/arclog/%f %p'
recovery_target_timeline = '1'
リカバリ結果が確認できたら、速やかに全体バックアップを取得してください。また、pg_rmanが実施した
recovery関連の設定を手動で削除することを推奨いたします。
PostgreSQLのバージョン12から、recovery.confがpostgresql.confにマージされたことに起因し、HAクラスタソフトと連携させて動作させた場合などに、
正常に動作しない可能性があるためです。一部のHAクラスタソフト(pacemaker)では、プライマリとして起動する場合でも、
必ず、初めにスタンバイとして起動します。そのため、予期せず、リカバリ関連の設定が有効に働いてしまい、正常に起動しない可能性があります。
例えば、PostgreSQLが12以上、pg_rmanが1.3.12よりも後のバージョンの場合は、$PGDATA/postgresql.conf
に追加されたinclude
ディレクティブと、
$PGDATA/pg_rman_recovery.conf
を削除してください。
--recovery-target-timeline
を指定しなかった場合は、制御ファイル($PGDATA/global/pg_control
) の最終チェックポイントタイムラインをターゲットとしてリストアします。
pg_control が存在しない場合は、リストアのベースとなる全体バックアップのタイムラインをターゲットとしてリストアします。
--recovery-target-time
を使用する場合、復元のベースとしたいバックアップ(FULL、INCR、ARCH)のEndTime以降の時刻をする必要があります。
バックアップ時にアーカイブWALを圧縮していない場合、アーカイブ格納領域に存在しないアーカイブWALはシンボリックリンクとして、リストアされます。本挙動を想定していない周辺ツール(ex. PG-REX)と組み合わせて利用する場合は、物理的にコピーを行うオプション(--hard-copy
)を指定してください。
delete
コマンドで日時を指定すると、そこまでのリカバリに不要なバックアップを削除できます。以下の例では、2015年3月27日の 14:59:00 時点にリカバリするのに不要なバックアップを削除しています。
$ pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-28 12:14:03 2023-11-28 12:14:05 FULL 342MB 1 OK
2023-11-28 12:13:56 2023-11-28 12:13:57 ARCH 16MB 1 OK
2023-11-28 12:13:52 2023-11-28 12:13:53 ARCH 16MB 1 OK
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 375MB 1 OK
2023-11-28 12:13:15 2023-11-28 12:13:17 INCR 33MB 1 OK
2023-11-28 12:12:48 2023-11-28 12:12:50 INCR 33MB 1 OK
2023-11-28 12:12:36 2023-11-28 12:12:38 INCR 33MB 1 OK
2023-11-28 12:11:51 2023-11-28 12:12:00 FULL 3366MB 1 OK
$ pg_rman delete 2023-11-28 12:13:30
WARNING: cannot delete backup with start time "2023-11-28 12:13:24"
DETAIL: This is the latest full backup necessary for successful recovery.
INFO: delete the backup with start time: "2023-11-28 12:13:15"
INFO: delete the backup with start time: "2023-11-28 12:12:48"
INFO: delete the backup with start time: "2023-11-28 12:12:36"
INFO: delete the backup with start time: "2023-11-28 12:11:51"
$ pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-28 12:14:03 2023-11-28 12:14:05 FULL 342MB 1 OK
2023-11-28 12:13:56 2023-11-28 12:13:57 ARCH 16MB 1 OK
2023-11-28 12:13:52 2023-11-28 12:13:53 ARCH 16MB 1 OK
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 375MB 1 OK
delete
コマンドで削除したバックアップは、データ自体はファイルシステムから削除されますが、管理情報が残ります。これらの管理情報をファイルシステムから除外するには purge
コマンドを実行してください。
$ pg_rman show -a
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-28 12:14:03 2023-11-28 12:14:05 FULL 342MB 1 OK
2023-11-28 12:13:56 2023-11-28 12:13:57 ARCH 16MB 1 OK
2023-11-28 12:13:52 2023-11-28 12:13:53 ARCH 16MB 1 OK
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 375MB 1 OK
2023-11-28 12:13:15 2023-11-28 12:13:17 INCR 33MB 1 DELETED
2023-11-28 12:12:48 2023-11-28 12:12:50 INCR 33MB 1 DELETED
2023-11-28 12:12:36 2023-11-28 12:12:38 INCR 33MB 1 DELETED
2023-11-28 12:11:51 2023-11-28 12:12:00 FULL 3366MB 1 DELETED
$ pg_rman purge
INFO: DELETED backup "2023-11-28 12:13:15" is purged
INFO: DELETED backup "2023-11-28 12:12:48" is purged
INFO: DELETED backup "2023-11-28 12:12:36" is purged
INFO: DELETED backup "2023-11-28 12:11:51" is purged
$ pg_rman show -a
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-28 12:14:03 2023-11-28 12:14:05 FULL 342MB 1 OK
2023-11-28 12:13:56 2023-11-28 12:13:57 ARCH 16MB 1 OK
2023-11-28 12:13:52 2023-11-28 12:13:53 ARCH 16MB 1 OK
2023-11-28 12:13:24 2023-11-28 12:13:26 FULL 375MB 1 OK
PostgreSQL 9.0 以降のレプリケーションを利用している場合、スタンバイサイトでもバックアップを取得することができます。 基本的な使用方法は、単体の PostgreSQL で利用する場合と同様なので、注意が必要な点のみ記述します。
スタンバイサイトでバックアップを取得する場合もアーカイブWALをバックアップ対象にする必要があります。 共有ディスクなどを用意し、マスタのアーカイブ領域をスタンバイからも参照できるような構成か、 archive_modeを 'always' として、スタンバイサイトでもアーカイブを出力するような構成にしてください。
後者の構成の場合は、スタンバイ構築時にプライマリに存在するアーカイブWAL(historyファイルを含む)を同期して、 リストアに必要なファイルを漏れなく、バックアップ出来るようにしてください。また、--keep-arclog-files / --keep-arclog-daysを 利用することでバックアップ時に古いアーカイブを削除することが可能ですが、バックアップ取得対象ではないアーカイブ領域は、 削除対象にならない点に注意してください。そのため、スタンバイサイトでバックアップを取得する場合は、本オプションを利用しても、 マスタの古いアーカイブを削除することはできません。
バックアップカタログの初期化時には、-D
/--pgdata
で、
スタンバイのデータベースクラスタへのパスを指定してください。
$ pg_rman init -B <バックアップカタログパス> -D <(スタンバイの)PostgreSQLのデータベースクラスタパス>
スタンバイサイトでのバックアップを行うためには、通常の pg_rman の利用方法と異なるオプションを指定する必要があります。
スタンバイサイトでバックアップを取得するには、-D
/--pgdata
オプションでスタンバイサイトの
データベースクラスタを指定し、その他の接続オプション(-d
/--dbname
、-h
/--host
、
-p
/--port
など)でマスタサイトの設定情報を指定します。 スタンバイ接続オプション
(--standby-host
、--standby-port
) でスタンバイサイトの設定情報を指定します。--standby-host
と --standby-port
は両方とも指定する必要があります。
以下の環境において、スタンバイサイトからバックアップを取得する際のコマンド例を示します。
$ pg_rman backup --pgdata=/home/postgres/pgdata_sby --backup-mode=full --host=master --standby-host=localhost --standby-port=5432
バックアップ対象のPostgreSQLが以下のような設定になっているとします。
postgres=# SHOW log_directory ;
log_directory
---------------
pg_log
(1 row)
postgres=# SHOW archive_command ;
archive_command
--------------------------------------------
cp %p /home/postgres/arc_log/%f
(1 row)
また、PostgreSQLのデータベースクラスタのパスを環境変数 PGDATA
に、pg_rmanが管理するバックアップカタログのパスを環境変数 BACKUP_PATH
に設定しておきます。
これによりpg_rmanの各コマンド実行時に毎回これらの値をオプションで指定する必要がなくなります。
$ echo $PGDATA
/home/postgres/pgdata
$ echo $BACKUP_PATH
/home/postgres/backup
バックアップカタログの初期化を行います
$ pg_rman init
INFO: ARCLOG_PATH is set to '/home/postgres/arclog'
INFO: SRVLOG_PATH is set to '/home/postgres/pgdata/pg_log'
バックアップカタログの初期化を行うと、BACKUP_PATH
配下にファイル pg_rman.ini
が生成されます。
このファイルに記載したオプションは、各pg_rmanのコマンド実行時にデフォルトとして使用されるため、コマンドラインオプションにて指定する必要がなくなります。
一般的な運用では、ほぼ全てのパラメータは設定ファイルで指定し、バックアップモードのみをコマンドラインで与えることになるでしょう。
pg_rman.ini
内で指定する際のオプション名については、パラメータの指定方法を参照してください。
今回は以下の様なオプション設定をデフォルトとして採用するとします。
$ cat $BACKUP_PATH/pg_rman.ini
ARCLOG_PATH = /home/postgres/arclog
SRVLOG_PATH = /home/postgres/pgdata/pg_log
BACKUP_MODE = F
COMPRESS_DATA = YES
KEEP_ARCLOG_FILES = 10
KEEP_DATA_GENERATIONS = 3
KEEP_SRVLOG_FILES = 10
バックアップを行います。 まずはデータベース全体のバックアップを取得します。 今回は合わせてサーバログもバックアップするとします。
$ pg_rman backup --backup-mode=full --with-serverlog --progress
INFO: copying database files
Processed 2049 of 2049 files, skipped 0
INFO: copying archived WAL files
Processed 21 of 21 files, skipped 0
INFO: copying server log files
Processed 10 of 10 files, skipped 0
INFO: backup complete
INFO: Please execute 'pg_rman validate' to verify the files are correctly copied.
INFO: start deleting old archived WAL files from ARCLOG_PATH (keep files = 10)
INFO: delete "0000000300000000000000E2"
INFO: delete "0000000300000000000000E2.00000028.backup"
INFO: delete "0000000300000000000000E1"
INFO: start deleting old server files from SRVLOG_PATH (keep files = 10)
INFO: start deleting old backup (keep generations = 3)
INFO: does not include the backup just taken
$ pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-29 16:04:17 2023-11-29 16:04:26 FULL 50MB 5 DONE
Status列の値がDONEになっているのは、バックアップ取得は完了したが、検証を実施していないためです。
validate
コマンドを実行して、上記で取得したバックアップの検証を行います。
$ pg_rman validate
INFO: validate: "2023-11-29 16:04:17" backup, archive log files and server log files by CRC
INFO: backup "2023-11-29 16:04:17" is valid
$ pg_rman show
=====================================================================
StartTime EndTime Mode Size TLI Status
=====================================================================
2023-11-29 16:04:17 2023-11-29 16:04:26 FULL 50MB 5 OK
検証が成功したため、showコマンドの出力結果にてStatus列の値がOKになっています。
現在のデータベースを破棄し、バックアップからリストアします。
$ pg_ctl stop -m immediate
$ pg_rman restore
リストア完了後にpg_rmanが生成した設定内容を確認し、必要に応じて修正を行います。 今回の場合は、最新の状態までリカバリするため特に修正せず、そのままPostgreSQLを起動してPITRを実施させます。
$ cat $PGDATA/pg_rman_recovery.conf
# added by pg_rman 1.3.16
restore_command = 'cp /dbfp/pgarch/arc1/%f %p'
recovery_target_timeline = '4'
$ pg_ctl start
pg_rman では、下記のコマンドライン引数を指定できます。一部のオプションは環境変数でも指定できます。詳細はパラメータの指定方法を参照してください。
データの場所に関するパスは、絶対パスで指定する必要があります。
-D PATH
/ --pgdata=PATH
-A PATH
/ --arclog-path=PATH
-S PATH
/ --srvlog-path=PATH
-B PATH
/ --backup-path=PATH
-c
/ --check
--verbose
オプションと組み合わせて処理内容を確認するのに使用します。-v
/ --verbose
-P
/ --progress
-b { full | incremental | archive }
/ --backup-mode={ full | incremental | archive }
full
), 増分バックアップ (incremental
), アーカイブ WAL バックアップ (archive
) のいずれかを指定できます。指定した文字列の前方一致で判定されるため、-b f
は full
と同じ動作になります。
-s
/ --with-serverlog
-Z
/ --compress-data
-C
/ --smooth-checkpoint
pg_start_backup()
の第2引数に相当します。--keep-data-generations
/ --keep-data-days
--keep-data-generations
では保存する世代数を、--keep-data-days
では最低保存日数を指定します。同時に指定した場合は、両方の閾値を超えたバックアップが削除されます。--keep-arclog-files
/ --keep-arclog-days
--keep-arclog-files
では保存ファイル数を、--keep-arclog-days
では保存日数を指定します。これらのオプションを明示的に指定した場合、閾値を超えたファイルがアーカイブ格納領域から削除されます。 これらのオプションを同時に指定した場合は両方の閾値を超えたファイルが削除されます。--keep-srvlog-files
/ --keep-srvlog-days
--keep-srvlog-files
では保存ファイル数を、--keep-srvlog-days
では保存日数を指定します。これらのオプションを明示的に指定した場合、閾値を超えたファイルがサーバログが保存されるディレクトリ (log_directory) から削除されます。 本オプションは、--with-serverlog
、--srvlog-path
を指定してバックアップを取得した場合に限ります。 これらのオプションを同時に指定した場合は両方の閾値を超えたファイルが削除されます。––recovery で始まる変数は、PostgreSQLのリカバリターゲットのパラメータに対応します。
--recovery-target-timeline TIMELINE
$PGDATA/global/pg_control
から取得)でリカバリを行います。--recovery-target-time TIMESTAMP
--recovery-target-xid XID
--recovery-target-inclusive
--recovery-target-action {{ pause | promote | shutdown }}
以下は、リストア時の挙動に関連するパラメータです。
--hard-copy
-G PATH
/ --pgconf-path=PATH
data_directory
パラメータなどを利用して、データベースクラスタの保存先と異なる場所にpostgresql.confを保存している場合は、設定ファイルの保存先を絶対パスで指定する必要があります。1.3.14よりも後のバージョンで利用可能です。-a
/ --show-all
PostgreSQLに接続するためのパラメータです。
-d DBNAME
/ --dbname=DBNAME
-h HOSTNAME
/ --host=HOSTNAME
-p PORT
/ --port=PORT
-U USERNAME
/ --username=USERNAME
-w
/ --no-password
-W
/ --password
スタンバイサイトの PostgreSQL に接続するためのパラメータです。 スタンバイサイトからバックアップを取得する際のみに使用します。
--standby-host
--standby-port
--help
-V
/ --version
-!
/ --debug
pg_rman では、一部の設定項目は、環境変数や設定ファイルでも指定できます。コマンドラインオプション、環境変数、設定ファイル項目の対応関係は以下の表の通りです。
短形式 | 長形式 | 環境変数 | 設定ファイル | 意味 | 備考 |
---|---|---|---|---|---|
-h | –host | PGHOST | データベースホスト名およびソケットディレクトリ名 | ||
-p | –port | PGPORT | データベースポート番号 | ||
-d | –dbname | PGDATABASE | データベース名 | ||
-U | –username | PGUSER | データベースユーザ名 | ||
PGPASSWORD | データベースパスワード | ||||
-w | –no-password | データベースパスワード入力プロンプトを出さない | |||
-W | –password | データベースパスワード入力の強制 | |||
-D | –pgdata | PGDATA | 指定可 | データベースクラスタのパス | |
-B | –backup-path | BACKUP_PATH | 指定可 | バックアップカタログのパス | |
-A | –arclog-path | ARCLOG_PATH | 指定可 | WALアーカイブ先のパス | |
-S | –srvlog-path | SRVLOG_PATH | 指定可 | サーバログディレクトリのパス | |
-b | –backup-mode | BACKUP_MODE | 指定可 | バックアップ対象 (full, incremental, or archive) | |
-s | –with-serverlog | WITH_SERVERLOG | 指定可 | サーバログを共にバックアップ | 環境変数、設定ファイルにはboolean型で指定 |
-Z | –compress-data | COMPRESS_DATA | 指定可 | データ圧縮あり | 環境変数、設定ファイルにはboolean型で指定 |
-C | –smooth-checkpoint | SMOOTH_CHECKPOINT | 指定可 | 平滑化チェックポイント | 環境変数、設定ファイルにはboolean型で指定 |
–standby-host | STANDBY_HOST | 指定可 | スタンバイサイトのホスト名 | ||
–standby-port | STANDBY_PORT | 指定可 | スタンバイサイトのポート番号 | ||
–keep-data-generations | KEEP_DATA_GENERATIONS | 指定可 | データベースバックアップの保存世代数 | ||
–keep-data-days | KEEP_DATA_DAYS | 指定可 | データベースバックアップの保存日数 | ||
–keep-srvlog-files | KEEP_SRVLOG_FILES | 指定可 | サーバログの保存ファイル数 | ||
–keep-srvlog-days | KEEP_SRVLOG_DAYS | 指定可 | サーバログの保存日数 | ||
–keep-arclog-files | KEEP_ARCLOG_FILES | 指定可 | アーカイブ WAL の保存ファイル数 | ||
–keep-arclog-days | KEEP_ARCLOG_DAYS | 指定可 | アーカイブ WAL の保存日数 | ||
–recovery-target-timeline | RECOVERY_TARGET_TIMELINE | 指定可 | リカバリ到達点のタイムライン ID | ||
–recovery-target-xid | RECOVERY_TARGET_XID | 指定可 | リカバリ到達点のトランザクション ID | ||
–recovery-target-time | RECOVERY_TARGET_TIME | 指定可 | リカバリ到達点のタイムスタンプ | ||
–recovery-target-inclusive | RECOVERY_TARGET_INCLUSIVE | 指定可 | リカバリ到達点自体をリカバリするか | ||
–recovery-target-action | RECOVERY_TARGET_ACTION | 指定可 | リカバリ対象に到達した場合にサーバがする動作 | 1.3.12よりも後のバージョンで利用可能 | |
–hard-copy | HARD_COPY | 指定可 | アーカイブWALのリストア方法 | 環境変数、設定ファイルにはboolean型で指定 |
また、このユーティリティは、他のほとんどの PostgreSQL ユーティリティと同様、 libpq でサポートされる環境変数を使用します。詳細については、環境変数の項目を参照してください。
pg_rman を使用する際には、以下の使用上の注意と制約があります。
スタンバイサイトでのバックアップ取得の際には、以下の制約事項があります。
ストレージ・スナップショットを利用する際には、以下の制約事項があります。
pg_rman では、タイムラインやトランザクション ID、タイムスタンプでリカバリ到達点を指定することにより、任意の時点の状態にデータベースをリカバリすることができます。正確なリカバリ到達点を決定するには、pg_xlogdump(9.3~) / xlogdump (~9.2) などのツールで WAL に書かれているトランザクション内容を確認してください。タイムラインやリカバリ到達点の詳細については継続的アーカイブとポイントインタイムリカバリ(PITR)を参照してください。
設定ファイルには「設定項目=設定値
」の書式でパラメータを指定します。指定可能な項目は パラメータの指定方法 を参照してください。設定値に空白を含む場合はシングルクォートで囲んでください。設定ファイル内の “#
” 以降はコメントとして無視されます。また、設定値以外の空白及びタブは無視されます。
pg_rman ではエラーの種別ごとに異なるプログラム終了コードを返します。
コード | 名前 | 意味 |
---|---|---|
0 | SUCCESS | 正常に終了しました。 |
1 | HELP | ヘルプを表示し、終了しました。 |
2 | ERROR | 未分類のエラーです。 |
3 | FATAL | エラーが再帰的に発生し強制終了しました。 |
4 | PANIC | 未知の致命的エラーです。 |
10 | ERROR_SYSTEM | I/O またはシステムエラーです。 |
11 | ERROR_NOMEM | メモリ不足です。 |
12 | ERROR_ARGS | 入力パラメータが不正です。 |
13 | ERROR_INTERRUPTED | シグナルにより中断されました。(Ctrl+C 等) |
14 | ERROR_PG_COMMAND | PostgreSQL サーバへ発行したSQLが失敗しました。 |
15 | ERROR_PG_CONNECT | PostgreSQL サーバに接続できません。 |
20 | ERROR_ARCHIVE_FAILED | WAL アーカイブに失敗しました。 |
21 | ERROR_NO_BACKUP | バックアップが見つかりません。 |
22 | ERROR_CORRUPTED | バックアップが破損しています。 |
23 | ERROR_ALREADY_RUNNING | 他の pg_rman が実行中です。 |
24 | ERROR_PG_INCOMPATIBLE | PostgreSQL サーバとの互換性がありません。 |
25 | ERROR_PG_RUNNING | PostgreSQL サーバが起動中のためリストアできません。 |
26 | ERROR_PID_BROKEN | postmaster.pid ファイルが破損しています。 |
ストレージ・スナップショット利用時にスナップショットの取得とファイルシステムへのマウントを行うスクリプトです。外部スクリプトを追加する場合は、外部スクリプトの各インタフェースをストレージのマニュアル等を参考に実装します。実装すべき内容は インタフェース仕様 を参照してください。
外部スクリプトは1回の実行で、1個以上のスナップショットを対象とした各種操作を行います。
外部スクリプトはバックアップカタログ直下に “snapshot_script
” のファイル名で格納します。
pg_rman では、LVM (Logical Volume Manager) 向けの外部スクリプトのサンプル (snapshot_script_lvm.sh) を提供します。
$ </samp><kbd>${BACKUP_PATH}/snapshot_script { split | resync | mount | umount | freeze | unfreeze } [cleanup]
{ split | resync | mount | umount | freeze | unfreeze }
[cleanup]
cleanup
が指定された時は、エラーが発生した場合に警告メッセージを出力して処理を継続します。resync
、umount
、unfreeze
にのみ適用します。split
操作の実行により、スナップショットボリュームを作成します。freeze
操作の実行により、ファイルシステムのI/Oを凍結します。mount
操作の実行により、スナップショットボリュームのマウントを作成します。split
操作の実行により、スナップショットに含まれるテーブルスペース名を出力します。mount
操作の実行により、スナップショットに含まれるテーブルスペース名および当該テーブルスペースの格納ディレクトリを <テーブルスペース名>=<テーブルスペース格納ディレクトリ> の形式で出力します。SUCCESS
” を出力し、エラー時には何も出力しません。なお、split
、mount
の場合には末行に出力します。split
PG-DATA
” とします。resync [cleanup]
split
で作成したスナップショットを削除する処理を実装します。cleanup
が指定されている場合は、スナップショットの削除に失敗したとき、その旨の警告メッセージを出力し、残りのスナップショットの削除を継続します。mount
split
で作成したスナップショットをファイルシステムにマウントする処理を実装します。PG-DATA
” とします。umount [cleanup]
mount
で作成したファイルシステムへのマウントを削除する処理を実装します。cleanup
が指定されている場合は、マウントの削除に失敗したときに、その旨の警告メッセージを出力し、残りのマウントの削除を継続します。freeze
unfreeze [cleanup]
freeze
で凍結したファイルシステムのI/Oを解除する処理を実装します。cleanup
が指定されている場合は、ファイルシステムのI/Oの凍結解除に失敗したとき、その旨の警告メッセージを出力し、残りのファイルシステムのI/Oの凍結解除を継続します。split
スナップショット対象とするボリュームに対して、ルートユーザ権限で lvcreate コマンドを実行します。
$ sudo /usr/sbin/lvcreate --snapshot --size=2G --name snap00 /dev/VolGroup00/LogVolume00
上記は論理ボリューム “LogVolume00” のスナップショットを作成する場合の例です。
resync
スナップショット対象とするボリュームに対して、ルートユーザ権限で lvremove コマンドを実行します。
$ sudo /usr/sbin/lvremove -f /dev/VolGroup00/snap00
mount
スナップショット対象とするボリュームに対して、ルートユーザ権限で mount コマンドを実行します。
$ sudo /bin/mount /dev/VolGroup00/snap00 /mnt/snapshot_lvm/pgdata
上記は、split
で作成したスナップショットボリュームを “/mnt/snapshot_lvm/pgdata” にマウントする場合の例です。
umount
スナップショット対象とするボリュームに対して、ルートユーザ権限で umount コマンドを実行します。
$ sudo /bin/umount /mnt/snapshot_lvm/pgdata
freeze
unfreeze
pg_rmanのソースコード、もしくはRPMはここからダウンロードできます。
pg_rman のインストールは、標準の contrib モジュールと同様です。
データベースへの登録は不要です。
pgxs を使ってビルドできます。
$ cd pg_rman
$ make
$ make install
利用環境でのOSのバージョンとPostgreSQLのバージョンに合わせたRPMをダウンロードし、インストールしてください。
# rpm -ivh pg_rman-x.x.xx-x.pgxx.rhelx.x86_64.rpm