このページに記載の情報は、2005 年にリリースした PowerGres Plus V2 を対象としています。PowerGres Plus V2 の販売はすでに終了しています。
PowerGres Plus の最新バージョンに関する情報は、製品紹介ページまたは PowerGres 体験記ページを参照してください。
データベースの運用では、システムの規模に関係なく、高い信頼性が求められます。 日々のデータ更新が少ない業務であれば、定期的なバックアップで十分ですが、日々頻繁にデータ更新が行われる業務の場合は、バックアップを行う回数を増やす必要がありますが、運用コストがかかります。
PowerGres Plus では、バックアップの作業時間を短縮することができる、差分バックアップ機能により、運用コストの削減が可能になります。
第 5 回では、PowerGres Plus の、差分バックアップ利用による運用について説明します。
常に最新のデータをバックアップするには、毎日バックアップを行う必要があります。 しかし、毎日すべてのバックアップを行うのは時間も含め、コストがかかります。 PowerGres Plus では、1 回すべてのバックアップを行い、その後は、日々の業務で行われたデータの更新をファイルの差分としてバックアップすることで、バックアップを高速に行い運用コストの削減が可能です。
図 1: 差分バックアップの概要
定期的に全体のバックアップを行い、その間は差分のみをバックアップします。
図 2: 二次退避域へのバックアップ概要
PowerGres Plus では、全体バックアップを定期的に行い、その間の更新データを差分ファイルとして保存します。
差分情報を格納するファイルの作成は、以下のスクリプト「make-diff-file.sh」を使用します。 第 1 パラメタは、差分バックアップを行う回数を指定します。 例えば 1 週間単位で行う場合は、7 を指定します。
$ make-diff-file.sh 7
正常に実行されると以下のメッセージが表示されます。
図 3: 差分情報を格納するファイルの作成
リモートディスクへのバックアップでは、以下を行います。 以下の処理は、1 回行えば、定期的にバックアップを行い、バックアップデータをリモートディスクへ退避できます。
リモートディスクの設定は色々ありますが、以下では、NFS でディスクをマウントして、バックアップします。 バックアップを行っているデータベースサーバを「dbserver」、NFS のサーバとなるファイルサーバ名を「fileserver」とします。
退避用ディレクトリを作成します。
# mkdir -p /PlusArchive/postgres # chown postgres:postgres /PlusArchive/postgres
作成したディレクトリをから共有できるように設定します。 このとき、書き込み可能となるように権限を設定します。
下記の画像は、Red Hat Enterprise Linux 3 のものです。
図 4: NFS の設定
上記の処理は、以下のファイルを修正することでもできます。
/etc/exports
詳細は、/etc/exports または、NFS のマニュアルを参照してください。
NFS サーバで共有したディスクをマウントします。 同じディレクトリ構成にして共有します。
# mkdir -p /PlusArchive/postgres # chown postgres:postgres /PlusArchive/postgres # mount -t nfs server2:/PlusArchive/postgres /PlusArchive/postgres
fileserver:/PlusArchive/postgres /PlusArchive/postgres nfs noauto,user,hard,intr 0 0
設定内容の詳細は、mount コマンド、fstab のマニュアルを参照してください。
1、2 の処理は、最初に 1 回行っておけば、2 回目からは行う必要はありません。
全体のバックアップを行うスクリプト「full-copy.sh」を毎週日曜日の 2 時 1 分に行い、差分ファイルのバックアップを行うスクリプト「diff-copy.sh」を月曜日から土曜日の 2 時 1 分に行うように cron に登録します。
cron の設定は、インスタンス管理者により、crontab コマンドで行います。
$ crontab -e
システムの標準エディタが起動され、以下のように表示されます。
SHELL=/bin/sh 01 02 * * 0 postgres /usr/local/bin/full-copy.sh
diff-copy.sh の実行を以下のように追加登録します。
SHELL=/bin/sh 01 02 * * 0 postgres /usr/local/bin/full-copy.sh 01 02 * * 1-6 postgres /usr/local/bin/diff-copy.sh
$ crontab -l
先ほど入力した内容が以下のように表示されれば正しく設定されています。
図 5: cron 設定の確認
実行結果として、以下のようなメッセージがシステムログに出力されます。
図 6: リモートディスクへのバックアップ (日曜日)
図 7: リモートディスクへのバックアップ (月曜日から、土曜日)
インスタンスの復旧は、以下のサンプルスクリプトにより行います。
rcv-root.sh | インスタンス復旧用ディレクトリの作成 |
rcv-instance-diff.sh | インスタンスの復旧用スクリプト |
スクリプトを実行すると、図 8 のようにメッセージが表示されます。
図 8: rcv-root.sh の実行結果
スクリプトを実行すると、図 9 のようにメッセージが表示されます。
図 9: rcv-instance-diff.sh の実行結果
以下では、DAT などの SCSI テープ装置を利用してバックアップします。 テープ装置には、tar コマンドでバックアップデータを書き込みます。
サンプルスクリプト、full-copy.sh で全体バックアップをした後、diff-copy.sh で差分ファイルを退避します。 サンプルスクリプトは、すべてリモートディスクへの退避用に作成されているので、/PlusArchive/postgres にファイルを退避する代わりに以下のように tar コマンドで退避するように修正します。
tar zcvf /dev/st0 退避する差分ファイル名
diff-copy.sh では、すでに二次退避域にバックアップされている差分ファイルを対象としないように二次退避域にあるファイルをチェックしています。 テープ装置などの外部媒体を使用している場合は、すでに二次退避域にバックアップされている差分ファイルがわかるように、作業領域に外部媒体にバックアップされている差分ファイルをリストアしたり、二次退避域にバックアップした差分ファイル名のリストを作成し、それを参照するようにスクリプトを修正する必要があります。
インスタンスの復旧は、リモートディスクと同様、以下のスクリプトを使用します。
rcv-root.sh | インスタンス復旧用ディレクトリの作成 |
rcv-instance-diff.sh | インスタンスの復旧用スクリプト |
リモートディスクの場合と同様に実行し、実行結果も同様です。
テープ装置から、作業ディレクトリに退避情報をリストアします。
# mkdir -P /PlusArchive/postgres # chown postgres:postgres /PlusArchive/postgres
$ cd /PlusArchive/postgres $ tar zcvf /dev/st0
退避したテープが複数ある場合は、以下のように、バックアップをしたテープの順にリストアをする必要があります。
全体バックアップのリストア (日曜日) 差分バックアップのリストア (月曜日) ... 差分バックアップのリストア (土曜日)
スクリプトの環境変数、PGARC に作業ディレクトリ名「/PlusArchive/postgres」を指定して、スクリプトをインスタンス管理者で実行します。
$ rcv-instance-diff.sh 実行結果は、リモートディスクの実行結果と同じです。
DVD 装置は、テープ装置と同様に tar コマンドでバックアップすることでできます。 今回は、USB タイプの DVD-RAM を利用した例を説明します。 USB タイプのものは SCSI デバイスと認識されます。 他に SCSI 装置がなかったため、/dev/scd0 として認識されました。
サンプルスクリプト、full-copy.sh で全体バックアップをした後、diff-copy.sh で差分ファイルを退避します。 サンプルスクリプトは、すべてリモートディスクへの退避用に作成されているので、/PlusArchive/postgres にファイルを退避する代わりに以下のように tar コマンドで退避するように修正します。
tar zcvf /dev/scd0 退避する差分ファイル名
diff-copy.sh では、すでに二次退避域にバックアップされている差分ファイルを対象としないように二次退避域にあるファイルをチェックしています。 テープ装置などの外部媒体を使用している場合は、すでに二次退避域にバックアップされている差分ファイルがわかるように、作業領域に外部媒体にバックアップされている差分ファイルをリストアしたり、二次退避域にバックアップした差分ファイル名のリストを作成し、それを参照するようにスクリプトを修正する必要があります。
インスタンスの復旧は、リモートディスクからの復旧と同様、以下二つのスクリプトで行います。
rcv-root.sh | インスタンス復旧用ディレクトリの作成 |
rcv-instance-diff.sh | インスタンスの復旧用スクリプト |
リモートディスクの場合と同様に実行し、実行結果も同様です。
テープ装置から、作業ディレクトリに退避情報をリストアします。
# mkdir -P /PlusArchive/postgres # chown postgres:postgres /PlusArchive/postgres
$ cd /PlusArchive/postgres $ tar zcvf /dev/scd0
退避したテープが複数ある場合は、以下のように、バックアップをしたテープの順にリストアをする必要があります。
全体バックアップのリストア (日曜日) 差分バックアップのリストア (月曜日) ... 差分バックアップのリストア (土曜日)
スクリプトの環境変数、PGARC に作業ディレクトリ名「/PlusArchive/postgres」を指定して、スクリプトをインスタンス管理者で実行します。
$ rcv-instance-diff.sh
実行結果は、リモートディスクの実行結果と同じです。
差分バックアップの運用では、差分情報を格納するファイルの数が足りなくなったり、1 つのファイルのサイズが小さいため、バックアップが正常に行われない場合が出てきます。
以下の場合に見直しが必要になります。
ERROR:[diff-copy]: There is no unused diff file.
このメッセージは、差分情報を格納するファイルが残っていない場合に出力されます。
差分ファイルの数を増やすように、差分ファイルを再作成する必要があります。
WARNING:[diff-copy]: There is only one unused diff file.
このメッセージは、差分情報を格納するファイルがあと 1 個しか残っていない場合に出力されます。
差分ファイルの数を増やすように、差分ファイルを再作成する必要があります。
差分ファイルのサイズが不足している可能性があります。 差分ファイルのサイズを見直してください。
差分ファイルの数、および、サイズの見直しの詳細は、「高信頼化ソリューションガイド (PDF 形式/1.5 MB)」を参照してください。
今回は、差分バックアップを行うことで、日々のバックアップ作業時間を短縮する方法について説明いたしました。 作業時間を短縮することで、運用コストの低減などが可能になります。
また、全体バックアップ同様にOSの機能を使用してスケジューリングすることで、差分ファイルのバックアップ処理も、夜間に自動的に行うことができます。