pg_dumpによるバックアップ・リカバリ
| Table of Contents |
はじめに
pg_dumpを利用したPostgreSQLのオフラインバックアップです。
オンラインバックアップを下記を参考にしてください。
pg_rmanによるオンラインバックアップ
バックアップ
バックアップ要件
-
バックアップ要件は下記を前提として設定を行います。
- ・オンラインで全データベースをバックアップする
- pg_dumpallコマンドを利用
- ・定期バックアップ(1日1回)
- cronを利用
- ・バックアップは3世代を管理する
-
logrotateを利用
バックアップの設定
-
定期バックアップはcronを利用します。
今回は毎日2時にバックアップするよう「crontab -e」コマンドで設定します。# su postgres$ crontab -e0 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_backupreading config file /etc/logrotate.d/postgres_backupreading config info for /var/lib/pgsql/backups/db.dumpHandling 1 logsrotating pattern: /var/lib/pgsql/backups/db.dump after 1 days (3 rotations)empty log files are not rotated, old logs are removedconsidering 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の動作確認用データとして現在の時間を登録します。
リカバリ作業
-
Postgresを停止
$ pg_ctl stop
-
データベースディレクトリを退避
$ cp -rp /var/lib/pgsql/data /var/lib/pgsql/data_old
-
Postgresを起動
$ pg_ctl start
-
データベースを削除
$ dropdb testdbDROP DATABASE
-
データベースを作成
$ createdb testdbCREATE DATABASE
-
データリストア
$ psql -e testdb < /var/lib/pgsql/backups/db.dump
復旧確認
-
testdbへ接続しリストアの確認を行います。