連載
» 2008年10月24日 00時00分 公開

使えば分かるPostgreSQL運用&チューニング(4):PostgreSQLのバックアップ&リストア手法その1 (2/3)

[北川俊広,SRA OSS, Inc.]

pg_dumpの出力形式

 出力形式はスクリプト形式アーカイブ形式が選択できます。デフォルトはスクリプト形式で、バックアップ時のデータベースを復元するために必要なSQL文の羅列がプレーンテキストの形で出力されます。リストアはpsql コマンドを使用します。

 スクリプト形式の利点は、なんといってもプレーンテキストという点です。例えば、リストアの際にエラーが発生した場合、ファイルの中身を見てエラーの原因を探ることができますし、PostgreSQL固有のSQL文を多少編集すれば、ほかのデータベース製品にもリストアすることができます。

 一方、アーカイブ形式はバイナリの形で出力されます。リストアはpsqlではなく、pg_restore というリストア用のコマンドを使用します。アーカイブ形式の利点は、指定したテーブルのみといったように、データベースを部分的にリストアするなど、柔軟なリストアが可能になっている点です。そのかわり、バイナリのためファイルの中身を直接見たり編集したりすることはできません。また、アーカイブ形式には、custom形式とtar形式の2種類があり、custom形式はデフォルトで圧縮されるためファイルサイズが小さくなります。

 なお、pg_dump によって作成したバックアップファイルは、CPUアーキテクチャが異なるほかのマシンや、より新しいバージョンのPostgreSQLにもリストアすることができます。

 pg_dump の基本的な使用方法は次のとおりです。

$ pg_dump データベース名 > バックアップファイル名

 また、pg_dump はローカル環境だけでなくリモート環境でも実行できます。

$ pg_dump -h ホスト名 -p ポート番号 データベース名 > バックアップファイル名    

 リストアは次のように行います。

$ pg_dump -Fc データベース名 バックアップファイル名

 上記はスクリプト形式でのバックアップ、リストアですが、アーカイブ形式でバックアップを行う場合は、-F オプションを指定して実行します。

$ pg_dump -Fc データベース名 バックアップファイル名

 上の例で、c オプションはcustom形式を表し、代わりにt を指定するとtar形式になります。

 アーカイブ形式のリストアは、pg_restore を使用します。

$ pg_restore -C -d postgres バックアップファイル名

 -C オプションを付けるとリストア前にデータベースを作成し、-d オプションは、その際に接続するデータベース名を指定します。そのため、-C オプションと併用する場合は、接続さえできればどのデータベースでもかまいません。

 以上が、pg_dump を利用したバックアップ、リストア方法です。

 pg_dump は、データベース単位でバックアップを取得するコマンドですので、グローバルデータと呼ばれるロールやテーブルスペースなどの情報はバックアップされないことに注意してください。

データベースクラスタ全体のバックアップを作成:pg_dumpall

 前述のように、pg_dump コマンドではロールやテーブルスペースなどの情報はバックアップされません。これらの情報も含めてデータベースクラスタ全体をバックアップしたい場合は、pg_dumpall という便利なコマンドが用意されています。このコマンドは、-g オプションを指定して実行することで、グローバルデータのみをバックアップすることも可能です。

pg_dumpallの内部動作と出力

 pg_dumpall は、内部動作としてはpg_dump を呼び出しているため、ほぼ同じオプションを指定できます。ただし、出力形式を指定する-F オプションは使えません。出力は常にスクリプト形式です。

 pg_dumpall を使用すると、PostgreSQLを運用しているマシンの変更やPostgreSQLのバージョンアップを容易に行うことができます。

pg_dump、pg_dumpallをcronで使う際の注意点

 pg_dumppg_dumpall は、cronなどを利用して定期的に実行されることが多いですが、その際、接続時にパスワードを設定していると、それらは実行時にパスワードの入力待ち状態になってしまいます。

 これを防ぐには、コマンドを実行するユーザーのホームディレクトリに、以下の書式に従ってパスワードを記述したファイルを.pgpass という名前で配置しておいてください。そうすることで、パスワードはそのファイルに書かれているものが自動的に適用されるようになります。

ホスト名:ポート番号:データベース名:ユーザー名:パスワード

 ただし、pg_dumppg_dumpall では、postgresql.confやpg_hba.confなどの設定ファイルはバックアップされないので注意が必要です。これらのファイルについては別途コピーする必要があります。これ以外のpg_dumppg_dumpallpg_restore のオプションや詳細については、下記マニュアルをご参照ください。

バックアップコマンドのマニュアル

バックアップコマンドのそのほかのオプションや詳細な使い方については下記日本語ドキュメントを参照ください(いずれも、NPO法人 PostgreSQLユーザ会Webサイト内掲載のオンラインマニュアル)。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。