pg_dumpによるバックアップ・リカバリ †
バックアップ †
バックアップ要件 †
- バックアップ要件は下記を前提として設定を行います。
- ・オンラインで全データベースをバックアップする
- pg_dumpallコマンドを利用
- ・定期バックアップ(1日1回)
- cronを利用
- ・バックアップは3世代を管理する
- logrotateを利用
バックアップの設定 †
- 定期バックアップはcronを利用します。
今回は毎日2時にバックアップするよう「crontab -e」コマンドで設定します。# su postgres $ crontab -e 0 2 * * * pg_dumpall -c > /var/lib/pgsql/backups/db.dump
- 世代管理はlogrotateを利用します。
設定ファイル「/etc/logrotate.d/postgres_backup」を下記内容で新規作成します。/var/lib/pgsql/backups/db.dump{ daily missingok notifempty rotate 3 }
- ・daily
- 毎日実行する
- ・missingok
- ファイルが無くてもエラーを出さない
- ・notifempty
- ファイルが空なら実行しない
- ・rotate 10
- 10世代残す
- logrotate の確認を行います。
# logrotate -dv /etc/logrotate.d/postgres_backup reading config file /etc/logrotate.d/postgres_backup reading config info for /var/lib/pgsql/backups/db.dump Handling 1 logs rotating pattern: /var/lib/pgsql/backups/db.dump after 1 days (3 rotations) empty log files are not rotated, old logs are removed considering log /var/lib/pgsql/backups/db.dump log /var/lib/pgsql/backups/db.dump does not exist -- skipping
構文エラーの場合は下記のようなエラーがでます。error: /etc/logrotate.d/postgres_backup:2 unexpected text
リカバリ †
サンプルデータの登録 †
- pg_dumpの動作確認用データとして現在の時間を登録します。
$ psql testdb testdb=# CREATE TABLE t_test(time timestamp); testdb=# INSERT INTO t_test VALUES(now()); testdb=# SELECT * from t_test; time ---------------------------- 2009-08-23 04:39:12.9077 2009-08-23 04:39:13.338911 2009-08-23 04:39:13.500074 2009-08-23 04:39:13.60608 2009-08-23 04:39:13.70793 2009-08-23 04:39:13.897418 2009-08-23 04:39:14.095757 2009-08-23 04:39:25.773003 2009-08-23 04:41:03.844767 (9 rows)
リカバリ作業 †
- Postgresを停止
$ pg_ctl stop
- データベースディレクトリを退避
$ cp -rp /var/lib/pgsql/data /var/lib/pgsql/data_old
- Postgresを起動
$ pg_ctl start
- データベースを削除
$ dropdb testdb DROP DATABASE
- データベースを作成
$ createdb testdb CREATE DATABASE
- データリストア
$ psql -e testdb < /var/lib/pgsql/backups/db.dump
復旧確認 †
- testdbへ接続しリストアの確認を行います。
$ psql testdb testdb=# SELECT * from t_test; time ---------------------------- 2009-08-23 04:39:12.9077 2009-08-23 04:39:13.338911 2009-08-23 04:39:13.500074 2009-08-23 04:39:13.60608 2009-08-23 04:39:13.70793 2009-08-23 04:39:13.897418 2009-08-23 04:39:14.095757 2009-08-23 04:39:25.773003 2009-08-23 04:41:03.844767 (9 rows)
Last-modified: 2010-09-06 (月) 01:36:19 (9h)