会社で使ってるプロジェクト管理ツールのRedMineのバックアップを全然やってなかったので、さすがにそろそろバックアップしとくかということで、シェルスクリプトを書いた。あんまりシェルスクリプト書かないので、こういう書き方が正しいのかはわからないが、一応動いているので、メモとして残しておく。ちなみに、運用として、日付でバックアップしていくとどんどん増殖していくので、7日分もあれば十分だろうと思われるので、曜日で管理する。また、ファイルサイズも大したことなかったので、非圧縮である。
まずは、シェルスクリプトを書く。
vi redmine-backup.sh
#!/bin/bash
#Apacheの停止
service httpd stop > /dev/null
# RedMineのファイルディレクトリを指定
ATTATCHDIR=/path/to/files
# バックアップ先ディレクトリを指定
BACKDIR=/path/to/backup
# MySQLrootパスワード
ROOTPASS=********
# 曜日を取得
int_youbi=`date +%w`
case "$int_youbi" in
# 日曜日
0)
youbi="sun"
;;
# 月曜日
1)
youbi="mon"
;;
# 火曜日
2)
youbi="tue"
;;
# 水曜日
3)
youbi="wed"
;;
# 木曜日
4)
youbi="thu"
;;
# 金曜日
5)
youbi="fri"
;;
# 土曜日
6)
youbi="sut"
;;
esac
# MySQLのredmineデータベースのバックアップ
mysqldump -u root -p$ROOTPASS redmine > $BACKDIR"/redmine_"$youbi".dump"
# RedMineのファイルディレクトリのバックアップ
rsync -a $ATTACHDIR $BACKDIR > /dev/null
# ファイルの持ち主をWinSCP接続するユーザに変更
chown -R hoge. $BACKDIR
# Apacheの起動
service httpd start
これで、RedMineのバックアップを取るシェルスクリプトが出来た。
次に、rootのみの権限に変更した。
chmod 700 redmine-backup.sh
これを、cronに登録する。
echo "0 5 * * * root /root/redmine-backup.sh" > /etc/cron.d/backup
ここからWindows側の作業。
さきほどのシェルスクリプトで保存したデータをWindows側に自動に保存する。
通信方法はSSH。SSHクライアントとしてWinSCPを使う。
参考情報はこちら:WinScpをWindowsバッチで自動的に動かす方法
まずは、バッチファイルを作成する。ファイル名は、redmine.batとでもする。
ユーザ名とホスト名は、事前にWinSCP側に登録しておくこと。
/scriptで指定するファイルに、WinSCPに行わせる作業を記述する。
"C:\Program Files\WinSCP\WinSCP.exe" username@hostname /console /script=.\redmine.scr
次に、redmine.scrを記述する。
バッチ処理なので、上書き確認などはしないようにする。
バックアップ先は、E:\backup\redmineとする。
option batch on option confirm off option transfer binary cd /path/to/backup/ lcd "E:\backup\redmine" get -preservetime * .\ close exit
redmine.batを実行してみて、ちゃんとダウンロードできたか確認する。
バックアップがダウンロードできているようだったら、
コントロールパネル > タスク > スケジュールされたタスクの追加
より、RedMineバックアップ用のタスクを作成する。基本的に1日1回だろうから、システム起動時に自動的にDLさせるようにしておいた。これで、RedMineサーバが故障してもデータの心配はなくなったと思われる。(サーバと俺のPCが同時にお亡くなりになったら終了だが。。。)
