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へ接続しリストアの確認を行います。
このエントリーをはてなブックマークに追加
Last-modified: 2010-06-05 (土) 12:30:45   最終更新のRSS