■pg_dump,pg_dumpall,pg_restore
データベースのバックアップ(保存)とリストア(復元)が出来るプログラムです。
出来る事はある時点までのバックアップ(保存)とバックアップを取った時点にリストア(復元)する事です。
バックアップを取った後に変更した部分に関してはデータを失ってしまいます。
PostgreSQLではバックアップ後のデータもリカバリ(復旧)出来る機能があり、そちらはPITRになります。
pg_dumpによるバックアップはファイルのコピーのようなその時点で保存、
その時点に復旧しかできませんが、簡単で他の環境に移植しやすい等メリットも多いです。
■pg_dump,pg_restore
データベース単位のバックアップを取ります。※オプションによりテーブル単位等も可能です。
バックアップした物はpg_restoreでリストア出来ます。
○バックアップ
pg_dump --verbose -Fc -f /mnt/usbdisk1/postgres/dump/testdump testdb
※オプション
--verbose :詳細メッセージの表示
-Fc :保存形式cはカスタムブ形式でサイズが小さくこの方式でとったバックアップからはテーブル単位のリストアが出来ます。
-f :バックアップする場所 /mnt/usbdisk1/postgres/dump/testdump
testdb :バックアップするデータベース名
○リストア
・データベース全体のリストア
pg_restore -d testdb /mnt/usbdisk1/postgres/dump/testdump
※データベースを削除して作り直し、リストアする場合
$ dropdb testdb
$ createdb -O testuser testdb
$ pg_restore -d testdb
/mnt/usbdisk1/postgres/dump/testdump
・テーブルのみのリストア
pg_restore --verbose -a -d testdb -t ms_sales -Fc /mnt/usbdisk1/postgres/dump/testdump
※データを消してリストアする場合(消さないとダブルキーでエラーになります)
$ psql -U testuser testdb
> TRUNCATE TABLE ms_sales;
> \q
$ pg_restore --verbose -a -d testdb -t ms_sales -Fc
/mnt/usbdisk1/postgres/dump/testdump
※各オプション
-a :データのみリストア
-d :リストアするデータベース。上記では testdb
-t :リストアするテーブル。上記では ms_sales
後はバックアップファイルになります。/mnt/usbdisk1/postgres/dump/testdump
■dumpall
pg_dumpallは全てをバックアップ出来ますがテキストファイルなので巨大な
ファイルには向かないかもしれません。
ユーザー等はデータベースの上に来る物なのでpg_dumpではバックアップ出来ません。
そのようなデータはpg_dumpallでバックアップを取る事ができます。
※pg_dumpallでのバックアップはテキストのsqlなので中を見てsqlを解析出来ます。
※ユーザーpostgresはpostgresqlをインストールすると自動で作成されるスーパーユーザー
なのでリカバリの時にエラーになります。
○バックアップ
ロールとテーブル空間をバックアップし、データをバックアップしない(-gオプション)
pg_dumpall --verbose -g >
/mnt/usbdisk1/postgres/dump/testdumpall
-gオプションをつけない場合、全部バックアップになります
pg_dumpall --verbose >
/mnt/usbdisk1/postgres/dump/testdumpall
○リストア
# su -l postgres
$ psql -f /mnt/usbdisk1/postgres/dump/testdumpall
dumpallはテキストのsqlなのでpsqlの -f オプションでファイルの中のコマンド(sql)を実行する事によってリストアします。
※ここでユーザーpostgres等がエラーになります(ユーザーpostgresは初期設定で自動的に作成される為)