• 検索結果がありません。

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