daybreaksnow's diary

私を私と呼びたい

[Linux]RedmineのDBのバックアップを取る

参考:
データのバックアップ方法 — Redmine.JP

添付ファイル以外のデータはすべてDBに入っている。
添付ファイルはRedmineインストールディレクトリのfiles以下にある。
(今回は/var/lib/redmine/files)

添付ファイルバックアップスクリプト(attach_file_backup.sh)

#!/bin/sh
SRC=/var/lib/redmine
BACKUP_DIR=/home/hoge/backup/redmine/daily_backup
BACKUP_FILE=files

cp -ar ${SRC}/${BACKUP_FILE} ${BACKUP_DIR}
tar cvzf ${BACKUP_DIR}/${BACKUP_FILE}.tar.gz -C $BACKUP_DIR $BACKUP_FILE
rm -r ${BACKUP_DIR}/${BACKUP_FILE}

DBバックアップスクリプト(db_backup.sh)

#!/bin/sh
DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup
DUMP_FILE=db_redmine.dump
DB_USER_NAME=hoge
DB_PASSWORD=piyo

mysqldump -u ${DB_USER_NAME} -p{DB_PASSWORD} db_redmine > ${DAILY_BACKUP_DIR}/${DUMP_FILE}

日次バックアップスクリプト(daily_backup.sh)

#!/bin/sh
#このシェルのパスを取得
DIR=$(cd $(dirname $0); pwd)
#echo $DIR

#DBのバックアップ取得
${DIR}/db_backup.sh
#添付ファイルのバックアップ取得
${DIR}/attach_file_backup.sh

月次バックアップスクリプト(monthly_backup.sh)

#!/bin/sh
DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup
MONTHLY_BACKUP_DIR_BASE=/home/hoge/backup/redmine/monthly_backup
MONTHLY_BACKUP_DIR=${MONTHLY_BACKUP_DIR_BASE}`date +\%y\%m\%d`

#echo  ${MONTHLY_BACKUP_DIR}
mkdir ${MONTHLY_BACKUP_DIR}
cp -ar ${DAILY_BACKUP_DIR} ${MONTHLY_BACKUP_DIR}

cronの設定

MAILTO=''
#redmineのバックアップ(毎日午前3時)
0 3 * * * /home/hoge/backup/redmine/sh/daily_backup.sh
#redmineのバックアップのコピー(毎月1日午前5時)
0 5 1 * * /home/hoge/backup/redmine/sh/monthly_backup.sh

DBのリストア

db_redmine_restoreに復元する例

SQL(create_db_restore.sql)

drop database db_redmine_restore;
create database db_redmine_restore default character set utf8;
grant all on db_redmine_restore.* to user_redmine;

・シェル

#!/bin/sh
#このシェルのパスを取得
DIR=$(cd $(dirname $0); pwd)
DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup
DUMP_FILE=db_redmine.dump
DB_ROOT_USER=root
DB_ROOT_PASSWORD=fuga
DB_USER=user_redmine
DB_PASSWORD=piyo
RESTORE_DB=db_redmine_restore

mysql -u ${DB_ROOT_USER} -p${DB_ROOT_PASSWORD} < ${DIR}/create_db_restore.sql
mysql -u  ${DB_USER} -p${DB_PASSWORD} ${RESTORE_DB} < ${DAILY_BACKUP_DIR}/${DUMP_FILE}

リストア

添付ファイルの復旧後は、filesのオーナーをapacheに戻す。

sudo chown -R apache:apahce files

操作ユーザになっていると、ファイルアップロード時にpermission deniedが発生し、Internal Server Errorが表示される。