2012年2月24日金曜日

Redmineデータバックアップスクリプト


Redmineのデータをバックアップするスクリプトの例です。
概要は、Redmineで使用しているデータベースをダンプし、
添付ファイルをアーカイブしてダンプファイルとともに別
領域にコピーします。

バージョン1.3.1で動作確認済みです。


■仕様
バックアップ対象:
 MySQLのデータベース、db_redmineのダンプ
 /opt/redmine1.3.1 ディレクトリ全体をアーカイブ
 ※本来は添付ファイルだけでよいので/opt/redmine1.3.1/publicを対象とすればよい。

バックアップ開始時刻:午前3時33分
 /etc/crontabに登録しています。

バックアップ世代:10世代
 10日以上前のバックアップは自動削除されます。
 構築直後のデータサイズは全部で約10MB以下です。

バックアップ先:別Linuxサーバの/home/backup/redmine
 ※筐体の異なる物理サーバ上のVMの領域をNFSマウントします。


■マウントポイント作成
[root@redmine ~]# mkdir -p /opt/bk_redmine/backup


■バックアップスクリプト
[root@redmine ~]# cat /opt/bk_redmine/bk_redmine.sh
#!/bin/sh
#######################################################################
# << 機能概要 >>
# Redmineのデータを別サーバのマウント領域にバックアップする
#
# << 前提 >>
# /opt/bk_redmine/backup ディレクトリが存在すること
# /opt/bk_redmine/bk_redmine.sh としてこのファイルが存在すること
#
# <<変更履歴>>
# Version  変更日      変更者        変更内容
# --------+-----------+-------------+----------------------------------
#     1.0  2012/02/21  tanyao        新規作成
#######################################################################

BASE_DIR=/opt/bk_redmine
MOUNT_POINT=$BASE_DIR/backup
LOG_FILE=$0.log

echo "`date \"+%Y%m%d %H:%M:%S\"` INFO: bk_redmine start." >> $LOG_FILE

# mount settings
mount -t nfs 192.168.xxx.195:/home/backup/redmine $MOUNT_POINT

mount_chk=`mount | grep 192.168.xxx.195 | wc -l`
if [ $mount_chk -ge 1 ]; then
    echo "`date \"+%Y%m%d %H:%M:%S\"` INFO: mount check OK." >> $LOG_FILE
else
    echo "`date \"+%Y%m%d %H:%M:%S\"` ERROR: mount check error." >> $LOG_FILE
    echo "" >> $LOG_FILE
    exit 1
fi

# Backup DataBase
/usr/bin/mysqldump -u root db_redmine > $MOUNT_POINT/db_redmine_`date +%Y%m%d`.dbf

# Backup files
cd /opt/
tar -zcf $MOUNT_POINT/redmine-1.3.1_`date +%Y%m%d`.tar.gz redmine-1.3.1
cd -

# 10日以前のバックアップは削除
find $MOUNT_POINT -mtime +10 -iregex ".*\.dbf$\|.*\.gz$" > $BASE_DIR/delete.list
for i in `cat $BASE_DIR/delete.list`
do
    rm -rf $i
    echo "`date \"+%Y%m%d %H:%M:%S\"` INFO: $i is deleted." >> $LOG_FILE
done

# unmount
umount $MOUNT_POINT

echo "`date \"+%Y%m%d %H:%M:%S\"` INFO: Backup of Redmine data has been completed." >> $LOG_FILE
echo "" >> $LOG_FILE

exit 0
[root@redmine ~]#

■動作確認(cron実行させるため直近の時刻を設定)
[root@redmine ~]# grep -i redmine /etc/crontab
# Backup of Redmine
31 13  *  *  * root /opt/bk_redmine/bk_redmine.sh
[root@redmine ~]#

[root@redmine ~]# tail -f /opt/bk_redmine/bk_redmine.sh.log
20120221 13:31:01 INFO: bk_redmine start.
20120221 13:31:01 INFO: mount check OK.
20120221 13:31:04 INFO: /opt/bk_redmine/backup/db_redmine_20120105.dbf is deleted.
20120221 13:31:04 INFO: /opt/bk_redmine/backup/db_redmine_20120107.dbf is deleted.
20120221 13:31:04 INFO: Backup of Redmine data has been completed.


バックアップ先サーバ(バックアップ前)
[root@bksrv02 redmine]# ll
合計 12204
-rw-r--r--  1 root root   770214  1月  5 11:11 db_redmine_20120105.dbf
-rw-r--r--  1 root root   770214  1月  7 11:11 db_redmine_20120107.dbf
-rw-r--r--  1 root root   770214  2月 15 11:11 db_redmine_20120215.dbf
-rw-r--r--  1 root root 10144029  2月 21 10:19 redmine-1.3.1_20120221.tar.gz
[root@bksrv02 redmine]#

バックアップ先サーバ(バックアップ後)
[root@bksrv02 redmine]# ll
合計 11468
-rw-r--r--  1 root root   770214  2月 15 11:11 db_redmine_20120215.dbf
-rw-r--r--  1 root root   786275  2月 21 13:31 db_redmine_20120221.dbf
-rw-r--r--  1 root root 10154630  2月 21 13:31 redmine-1.3.1_20120221.tar.gz
[root@bksrv02 redmine]#

→10日以前のバックアップは削除される。同名のバックアップファイルがあったとしても上書きされる。

0 件のコメント:

コメントを投稿