コレグレーデギネード

WindowsとかUbuntuとかRubyとかRailsとか

PostgreSQLのデータをCRONで定期的にバックアップする。

バックアップ用スクリプトファイルを用意。

pg_dump.sh

#/bin/sh

TARGET_DB='rails_app_production'
HOME_DIR=/home/postgres/dump
LOG_FILE=$HOME_DIR/pg_dump.log
BACKUP_DIR=$HOME_DIR/dump_files

echo >>$LOG_FILE
echo `date` "[ pg_dump Start. ]" >>$LOG_FILE
DATE=`date +%Y%m%d`

for db_name in $TARGET_DB
do
  DUMP_FILE_PATH=$BACKUP_DIR/${db_name}.${DATE}
  /usr/bin/pg_dump $db_name -b -O -Fc > $DUMP_FILE_PATH 2>>$LOG_FILE
  echo `date` "[ Database $db_name Backup Complete. ]" >>$LOG_FILE
done

echo `date` "[ pg_dump Complete. ]" >>$LOG_FILE

crontabの編集。

$ crontab -e

# 毎日午後8時に実行
# 0 20 * * * sh /home/postgres/pg_dump.sh > /dev/null
# テスト(毎分実行)
*/1 * * * * sh /home/postgres/pg_dump.sh > /dev/null

tailで確認。
syslog

$ tail -f /var/log/syslog

Aug  8 19:01:01 wwwexample CRON[1234]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null)
Aug  8 19:02:01 wwwexample CRON[1235]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null)
Aug  8 19:03:01 wwwexample CRON[1236]: (postgres) CMD (sh /home/postgres/pg_dump.sh > /dev/null)

pg_dump.log

$ tail -f /home/postgres/dump/pg_dump.log

Wed Aug 8 19:01:01 JST 2012 [ pg_dump Start. ]
Wed Aug 8 19:01:01 JST 2012 [ Database rails_app_production Backup Complete. ]
Wed Aug 8 19:01:01 JST 2012 [ pg_dump Complete. ]

Wed Aug 8 19:02:01 JST 2012 [ pg_dump Start. ]
Wed Aug 8 19:02:01 JST 2012 [ Database rails_app_production Backup Complete. ]
Wed Aug 8 19:02:01 JST 2012 [ pg_dump Complete. ]

Wed Aug 8 19:03:01 JST 2012 [ pg_dump Start. ]
Wed Aug 8 19:03:01 JST 2012 [ Database rails_app_production Backup Complete. ]
Wed Aug 8 19:03:01 JST 2012 [ pg_dump Complete. ]

DUMPファイルの確認。

$ ls -l /home/postgres/dump/dump_files/
-rw-rw-r-- 1 postgres postgres 1234567  8月  8 19:03 rails_app_production.20120808

※crontabの内容を毎日8時に実行する設定に切り替えて終了。