8. ユーティリティ
8.1 ユーティリティ使用方法
特徴的なコマンドの使用方法について説明します。
8.1.1 pg_basebackup コマンド
pg_basebackup コマンド12は、データベース・クラスタの完全なコピーを作成するため
に開発されました。使用には以下の点に注意します。内部的にはオンライン・バックアッ プと同じ処理を実施しています。
-xオプションを指定して、バックアップ完了後にログスイッチを実施します。
データベース・クラスタ以外のテーブル空間ディレクトリは同一パスに保存されま す。パスを変更するためには--tablespace-mappingパラメータで新旧のパスを指定 する必要があります(PostgreSQL 9.4から指定可能)。
バックアップ先のディレクトリは空にしておく必要があります。
WAL書込みディレクトリは{PGDATA}/pg_xlogになります。異なるディレクトリを 指定する場合は--xlogdirパラメータを指定します(PostgreSQL 9.4から指定可能)。 例 122 pg_basebackupコマンド実行
8.1.2 pg_archivecleanup コマンド
pg_archivecleanup コマンドは、contrib モジュール13に含まれます。バックアップが完
了し、不要になったアーカイブログ・ファイルを削除します。
通 常 は ス ト リ ー ミ ン グ ・ レ プ リ ケ ー シ ョ ン 環 境 で recovery.conf フ ァ イ ル の
archive_cleanup_commandのパラメータ値として使用します。最初のパラメータにはアー
カイブログ出力ディレクトリを、2番目のパラメータには最終のWALファイルを示す「%r」
12 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-pgbasebackup.html
13 マニュアルはhttp://www.postgresql.org/docs/9.4/static/pgarchivecleanup.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
$
を指定します。
例 123 recovery.confファイルの指定
pg_archivecleanupコマンドはスタンドアロン環境でも使用できます。第2パラメータに
は、オンライン・バックアップで作成されたラベル・ファイルを指定します。以下のよう なプログラムを作成することで、最終のラベル・ファイルを取得することができます。
例 124 pg_archivecleanupコマンド実行スクリプト
8.1.3 psql コマンド
psqlコマンドは会話的にSQL文を実行するクライアント・ツールです。psqlコマンド14
が使用する環境変数は以下の通りです。
14 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-psql.html
archive_cleanup_command = 'pg_archivecleanup /opt/PostgreSQL/9.4/arch %r'
#! /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
表 61 psqlコマンドが使用する環境変数
環境変数 説明 デフォルト
COLUMNS 改行幅の制限値
¥pset columnsのデフォルト
ターミナルの幅から計算
PAGER ページャ・コマンド名 Cygwin環境ではless
それ以外では more
PGCLIENTENCODING クライアント・エンコード auto
PGDATABASE デフォルト・データベース名 OSユーザ名
PGHOST デフォルト・ホスト名 localhost
PGPORT デフォルト・ポート番号 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による取得
8.1.4 pg_resetxlog コマンド
pg_resetxlog コマンド15は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コマンドの出力結果の比較例で す。表示が異なる部分のみ記載しています。
15 マニュアルはhttp://www.postgresql.org/docs/9.4/static/app-pgresetxlog.html
表 62 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