Bitnamiで構築したRedmineとSubversionのデータをバックアップする

スポンサーリンク
Redmine
スポンサーリンク

本番環境で運用している場合はデータのバックアップが非常に重要となります。バックアップを取らずに運用していて万が一サーバーのデータが破損してしまったら・・・。考えたくもないですね?ここでは、Bitnami Redmine Stackを使って構築したRedmineとSubversionのデータをバックアップする方法を説明します。

スポンサーリンク

ターゲット環境

対象の環境は以下のとおりです。

※Bitnami Redmine Stackを使って構築

対象 バージョン
OS CentOS 7.1
Redmie 3.3.2.stable

バックアップ戦略

Redmineのデータをまずは同サーバー内の1次バックアップ領域にバックアップし、それを別途用意したバックアップ用サーバー内に2次バックアップします。
バックアップはcronを使用して自動化します。
バックアップは差分バックアップではなく、毎回フルバックアップとします。

バックアップ対象のデータ

バックアップ対象データは以下の3つです。

  1. RedmineのDB
  2. Redmineのチケット、Wikiの添付ファイル
  3. 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/

コメント