8. ユーティリティ
8.1 ユーティリティ使用方法
特徴的なコマンドの使用方法について説明します。
8.1.1 pg_basebackup コマンド
pg_basebackupコマンド13は、データベース・クラスタの完全なコピーを作成するために
開発されました。使用には以下の点に注意します。内部的にはオンライン・バックアップと 同じ処理を実施しています。
-xオプションを指定して、バックアップ完了後にログスイッチを実施します。
データベース・クラスタ以外のテーブル空間ディレクトリは同一パスに保存されま す。パスを変更するためには--tablespace-mappingパラメーターで新旧のパスを指 定する必要があります(PostgreSQL 9.4から指定可能)。
バックアップ先のディレクトリは空にしておく必要があります。
WAL書込みディレクトリは{PGDATA}/pg_xlogになります。異なるディレクトリを 指定する場合は--xlogdir パラメーターを指定します(PostgreSQL 9.4 から指定可 能)。
例 133 pg_basebackupコマンド実行
□ データ転送動作
pg_basebackupコマンドの処理は、大部分は接続先インスタンス上のwal senderプロセ
ス内で実行されます。wal senderプロセスは以下の処理を行っています。
pg_start_backup関数の実行
データベース・クラスタ内のファイルの転送
外部表スペースの実体検索とファイルの転送
13 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-pgbasebackup.html
$ pg_basebackup -D back -h hostsrc1 -p 5432 -x -v Password: << パスワード >>
transaction log start point: 0/7E000020 transaction log end point: 0/7E0000A8 pg_basebackup: base backup completed
$
pg_stop_backup関数の実行
WAL転送設定が行われていた場合は、WALファイルの転送
バックアップ元となるファイルのデータは32 KB14単位で読み込まれ、クライアントに送 信されます。
□ 転送量の制限
pg_basebackupコマンド実行時に--max-rateパラメーターを指定すると、時間当たりの
ネットワーク転送量を制限できます(PostgreSQL 9.4新機能)。転送量の制御はwal sender プロセス内で実行されます。データ転送量がパラメーターで指定されたバイト数の1/8 を超える度にラッチのタイムアウトによる待機を行い、一定時間内のデータ転送量を抑制 します。
8.1.2 pg_archivecleanup コマンド
pg_archivecleanup コマンドは、contrib モジュール15に含まれます。バックアップが完
了し、不要になったアーカイブログ・ファイルを削除します。
通 常 は ス ト リ ー ミ ン グ ・ レ プ リ ケ ー シ ョ ン 環 境 で recovery.conf フ ァ イ ル の
archive_cleanup_commandのパラメーター値として使用します。最初のパラメーターには
アーカイブログ出力ディレクトリを、2番目のパラメーターには最終のWALファイルを示 す「%r」を指定します。
例 134 recovery.confファイルの指定
pg_archivecleanupコマンドはスタンドアロン環境でも使用できます。第2パラメーター
には、オンライン・バックアップで作成されたラベル・ファイルを指定します。以下のよう なプログラムを作成することで、最終のラベル・ファイルを取得することができます。
14 src/backend/replication/basebackup.cのTAR_SEND_SIZEで定義
15 マニュアルはhttp://www.postgresql.org/docs/9.4/static/pgarchivecleanup.html archive_cleanup_command = 'pg_archivecleanup /opt/PostgreSQL/9.4/arch %r'
例 135 pg_archivecleanupコマンド実行スクリプト
8.1.3 psql コマンド
psqlコマンドは会話的にSQL文を実行するクライアント・ツールです。psqlコマンド16
が使用する環境変数は以下の通りです。
16 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-psql.html
#! /bin/sh
. /opt/PostgreSQL/9.4/pg_env.sh
ARCHDIR=/opt/PostgreSQL/9.4/arch
LASTWALPATH=`/bin/ls $ARCHDIR/*.backup | /bin/sort –r | /usr/bin/head -1`
if [ $LASTWALPATH = '' ]; then echo 'NO label file found.' exit 1
fi
LASTWALFILE=`/bin/basename $LASTWALPATH`
pg_archivecleanup $ARCHDIR $LASTWALFILE stat=$?
echo 'Archivelog cleanup complete' exit $stat
表 70 psqlコマンドが使用する環境変数
環境変数 説明 デフォルト
COLUMNS 改行幅の制限値
¥pset columnsのデフォルト
ターミナルの幅から計算
PAGER ページャ・コマンド名 Cygwin環境ではless
それ以外では more
PGCLIENTENCODING クライアント・エンコード auto
PGDATABASE デフォルト・データベース名 OSユーザー名
PGHOST デフォルト・ホスト名 localhost
PGPORT17 デフォルト・ポート番号 5,432
PGUSER デフォルト・ユーザ名 OSユーザー名
PSQL_EDITOR EDITOR
VISUAL
¥e コマンドで使用するエデ ィタ名。リストを上から検索 する。
Linux / Unixではvi Windowsではnotepad.exe
PSQL_EDITOR_LINEN UMBER_ARG
エディタに行番号を渡すコマ ンド
Linux / UNIX では'+' Windowsではなし
COMSPEC ¥! コ マ ン ド 用 シ ェ ル
(Windows)
cmd.exe
SHELL ¥!コマンド用シェル(Linux /
UNIX)
/bin/sh
PSQL_HISTORY 履歴保存ファイル Linux / UNIXでは
{HOME}/.psql_history Windowsでは
{HOME}¥psql_history
PSQLRC 初期化コマンド用ファイルの
パス
Linux / UNIXでは {HOME}/.psqlrc Windowsでは
{HOME}¥psqlrc.conf
TMPDIR ファイル編集用一時ディレク
トリ
Linux / UNIX では /tmp Windows ではGetTempPath APIによる取得
17 インスタンス起動時の接続待ちポート番号のデフォルト値としても使用される。
8.1.4 pg_resetxlog コマンド
pg_resetxlog コマンド18はWAL ファイルの再作成を行います。このコマンドはインスタ
ンス起動中には実行できません。マニュアルにあるとおり、{PGDATA}/postmaster.pid フ ァイルの存在をチェックしています。存在のみをチェックしており、インスタンスの起動を チェックしているわけではありません。
pg_resetxlogコマンドは以下の処理を行っています。
① オプションのチェック
② データベース・クラスタのチェックと、ディレクトリ移動
③ postmaster.pidファイルの存在チェック
④ pg_controlファイルの読み込み
a. 読込不可→プログラム終了
b. バージョン・チェックとCRCのチェック
⑤ pg_controlファイルに不整合があった場合は正しい値を予測
⑥ pg_xlogディレクトリから最終のWALファイルを検索
⑦ 直前のインスタンスが正常終了(DB_SHUTDOWNED (1))かどうかをチェックし、
正常終了では無い場合-fオプションが指定されていなければ終了。
⑧ pg_controlファイルの削除と再作成
⑨ WALファイルの削除
⑩ archive_statusディレクトリ内のファイル削除
⑪ 新規WALファイルの作成
以下は、pg_resetxlogコマンド実行前後でpg_controldataコマンドの出力結果の比較例で す。表示が異なる部分のみ記載しています。
18 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-pgresetxlog.html
表 71 pg_controldataコマンドの比較
項目 pg_resetxlog実行前 pg_resetxlog実行後
pg_control last modified Mon 30 Jun 2014 03:38:37 PM JST
Mon 30 Jun 2014 05:45:09 PM JST
Latest checkpoint location
2/A4000028 2/AC000028
Prior checkpoint location 2/A3002D20 0/0 Latest checkpoint's
REDO location
2/A4000028 2/AC000028
Latest checkpoint's REDO WAL file
0000000100000002000000A 4
0000000100000002000000A C
Time of latest checkpoint Mon 30 Jun 2014 03:38:36 PM JST
Mon 30 Jun 2014 05:43:46 PM JST
Backup start location 0/E1000028 0/0