本番環境で運用している場合はデータのバックアップが非常に重要となります。バックアップを取らずに運用していて万が一サーバーのデータが破損してしまったら・・・。考えたくもないですね?ここでは、Bitnami Redmine Stackを使って構築したRedmineとSubversionのデータをバックアップする方法を説明します。
Contents
ターゲット環境
対象の環境は以下のとおりです。
| 対象 | バージョン |
|---|---|
| OS | CentOS 7.1 |
| Redmie | 3.3.2.stable |
バックアップ戦略

Redmineのデータをまずは同サーバー内の1次バックアップ領域にバックアップし、それを別途用意したバックアップ用サーバー内に2次バックアップします。
バックアップはcronを使用して自動化します。
バックアップは差分バックアップではなく、毎回フルバックアップとします。
バックアップ対象のデータ
バックアップ対象データは以下の3つです。
- RedmineのDB
- Redmineのチケット、Wikiの添付ファイル
- Subversionのリポジトリ
1次バックアップ
1次バックアップ先ディレクトリの作成
$ sudo mkdir /var/opt/bitnami_backup
cronie-noanacronのインストール
CentOS7のcronはanacronというものがインストールされており、実行時間がランダムになっているらしいです。これを決まった時間に実行される様に変更するにはnoanacronをインストールしanacronをアンインストールする必要があります。
$ sudo yum -y install cronie-noanacron $ sudo yum -y remove cronie-anacron
バックアップ用シェルスクリプトの作成
#!/bin/bash
# バックアップファイルを何日分残しておくか
period=7
# 保存先の作成
backupdate=`date +%y%m%d`
dirpath="/var/opt/backup/$backupdate"
mkdir $dirpath
mkdir $dirpath/svn
# 以下の3つをバックアップする
# 1.RedmineのDB
# 2.Redmineのチケット、Wiki等の添付ファイル
# 3.Subversionのリポジトリ
# db_passは/opt/bitnami/apps/redmine/htdocs/config/database.ymlに記載されています
# RedmineのDBをバックアップ
DUMP_CMD=/opt/bitnami/mysql/bin/mysqldump
db_user=bitnami
db_pass=*******
db_name=bitnami_redmine
filename='database'
$DUMP_CMD -u $db_user -p$db_pass $db_name > $dirpath/$filename.sql
# チケット、Wiki等の添付ファイルをバックアップ
attach_path="/opt/bitnami/apps/redmine/htdocs/files"
cp -r $attach_path $dirpath
# Subversionのバックアップ
SVN_BACKUP_CMD=/opt/bitnami/subversion/bin/svnadmin
repo_parent_path=/var/opt/bitnami/svn
for trydir in $repo_parent_path/*; do
# ディレクトリのみを対象とする
if [ -d "$trydir" ]; then
mkdir $dirpath/svn/$(basename $trydir)
$SVN_BACKUP_CMD hotcopy $trydir $dirpath/svn/$(basename $trydir)
fi
done
# 圧縮
zip -r $dirpath.zip $dirpath
rm -rf $dirpath
# 古いバックアップファイルを削除
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.zip
exit 0
実行権限の付与
$ sudo chmod +x /etc/cron.daily/bitnami_backup.sh
crondの再起動
$ sudo systemctl restart crond
2次バックアップ
2次バックアップについてですが、諸事情によりバックアップサーバーが用意できていないので、ローカルマシンから以下のコマンドを叩いて同期をとりお茶を濁しています。cronに登録するときはsshのパスワードを入力できないので、公開鍵認証を使う必要があるのですが、そのあたりはまた次回・・・。
$ rsync -avzP --delete -e ssh (username)@(サーバーのIPアドレス):/var/opt/bitnami_backup /home/vagrant/backup/


コメント