PostgreSQL(pg_dump)

pg_dump によるバックアップ/復元

・全データベース
    [user]$ pg_dumpall -U postgres > ファイル名

    [user]$ psql -U postgres template1 < ファイル名
・データベース
    [user]$ pg_dump -U ユーザー名 データベース名 > ファイル名

    [user]$ psql -U ユーザー名 データベース名 < ファイル名
・テーブル
    [user]$ pg_dump -U ユーザー名 データベース名 -t テーブル名 > ファイル名

    [user]$ psql -U ユーザー名 データベース名 < ファイル名
・定期的なバックアップ実行

実行ユーザーのホームディレクトリに、パスワードを記述したファイル(.pgpass)を用意

    [user]$ vim ~/.pgpass

      ホスト名:ポート番号:データベース名:ユーザー名:パスワード(* で省略可能)

      *:*:*:username:password

    [user]$ chmod 600 .pgpass

バックアップを実行するシェルスクリプトを作成

    [user]$ vim ~/backup/pg_dump.sh

      #!/bin/sh

      # データベース名
      DB=dbname
      # ユーザー名
      USER=username

      # 保存ディレクトリ
      DIR=${HOME}/backup

      # ファイル名
      FILE="${DB}-`date --date today '+%y%m%d'`"

      # バックアップ
      /usr/local/pgsql/bin/pg_dump -U ${USER} ${DB} | gzip > ${DIR}/${FILE}.gz

      # ファイルのパーミッション変更
      chmod 600 ${DIR}/${FILE}.gz

    [user]$ chmod 700 pg_dump.sh

定期的にバックアップを実行

    [user]$ crontab -e

      0  0  *  *  *  ${HOME}/backup/pg_dump.sh

確認

    [user]$ ls -lh ~/backup

      -rw------- 1 user user  617K  3月  20  00:00  dbname-150319.gz

復元

    [user]$ cd ~/backup
    [user]$ gzip -d dbname-150319.gz
    [user]$ ls -lh

      -rw------- 1 user user  5.0M  3月  20  00:00  dbname-150319

    [user]$ psql -U username dbname < dbname-150319