PostgreSQLのデータベースをcronを使って自動バックアップする

バックアップ

同じサーバーを使っている悪い人がいた場合には良くない方法です。

  • PostgreSQLのスーパーユーザーが postgres
  • Railsを動かしているユーザーが hoge
  • プロジェクトの設置場所が ~hoge/rails_root/ とする。
  • プロジェクトのデータベース名は hoge_production_db とする。

backup先を作成する。

% cd ~hoge/rails_root
% mkdir backup
% chmod 777

cronで動かすバックアップ用シェルスクリプトを用意する。postgresql_backup.sh とする。

#!/bin/sh

DATE=`/bin/date '+%Y%m%d-%H%M'`
LOGDIR='/home/hoge/rails_root/backup/'
PREFIX='production_db-'
POSTFIX='.sql'
DATABASENAME='hoge_publication_db'
/usr/bin/pg_dump $DATABASENAME > $LOGDIR$PREFIX$DATE$POSTFIX

シェルスクリプトを設置。

% mv postgresql_backup.sh ~hoge/rails_root/backup
% chmod 755 ~hoge/rails_root/backup/postgresql_backup.sh

cronで動かす。

% sudo su
# su postgres
% crontab -e

たとえば、毎日4時にバックアップするならば以下のように設定する。

0 4 * * * /home/hoge/rails_root/backup/postgresql_backup.sh > /dev/null 2>&1

もし、別サーバーにバックアップ内容をミラーリングしておくならば下記参照。

リストア

データベースごと作り直す。

データベースの作成&読み込み

% sudo su
# su postgres
% createdb --encoding="utf-8" -T template0 hoge_production_db
% psql hoge_production_db
# \i /home/hoge/rails_root/backup/production_db-20XXMMDD-HHMM.sql