forked from alminium/alminium
-
Notifications
You must be signed in to change notification settings - Fork 2
/
backup
executable file
·114 lines (96 loc) · 3.77 KB
/
backup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/bash
############################################################
# backup for ALMinium.
# 第1引数:バックアップディレクトリ
# defaultは/var/opt/alminium-backup
# "-"を指定したときはdeaultディレクトリを利用
# 第2引数:データベースホスト名
# 第3引数:データベース管理者パスワード
############################################################
# 各種ディレクトリ
ALM_SRC_DIR=${ALM_SRC_DIR:-$(cd $(dirname $0);pwd)}
ALM_VAR_DIR=${ALM_VAR_DIR:-/var/opt/alminium}
ALM_INSTALL_DIR=${ALM_INSTALL_DIR:-/opt/alminium}
# DBホスト、DBrootユーザーパスワード
ALM_DB_HOST=${2:-${ALM_DB_HOST}}
ALM_DB_HOST=${ALM_DB_HOST:-localhost}
ALM_DB_ROOT_PASS=${3:-${ALM_DB_ROOT_PASS}}
ALM_CURRENT_DIR=`pwd`
# move to sources directry
cd ${ALM_SRC_DIR}
# include functions
source inst-script/functions
# backup directry
if [ "$1" != "" -a "$1" != "-" ]; then
if [ "`echo $1 | cut -c 1`" = "/" ]; then
ALM_BACKUP_DIR=$1
else
ALM_BACKUP_DIR=${ALM_CURRENT_DIR}/$1
fi
else
# デフォルトバックアップディレクトリを設定
ALM_BACKUP_DIR=/var/opt/alminium-backup
fi
# 実行ユーザーチェック
if [ "`whoami`" != 'root' ]; then
echo -n "本処理はルートユーザで行う必要があります。"
echo "rootユーザもしくはsudoで実行してください。"
exit 1
fi
#バックアップディレクトリのチェック
if [ ! -d ${ALM_BACKUP_DIR} ]; then
mkdir -p ${ALM_BACKUP_DIR}
fi
# バックアップファイル名決定
ALM_BACKUP_ID=`date +"%Y-%m-%d-%H-%M-%S"`
ALM_DBBACKUP_NAME=db.dump
ALM_FILE_BACKUP=files.tar.gz
ALM_REPOS_BACKUP=repo.tar.gz
ALM_BACKUP_NAME=${ALM_BACKUP_ID}-alm-backup.tar.gz
# バックアップ開始
echo "[`date`] ALMiniumのデータのバックアップを開始します。"
echo "バックアップファイル名 : ${ALM_BACKUP_DIR}/${ALM_BACKUP_NAME}"
# バックアップ結果チェック
check_backup_result() {
if [ "$3" = "0" -a -f ${ALM_BACKUP_DIR}/$1 -a -s ${ALM_BACKUP_DIR}/$1 ]; then
echo "$2(${ALM_BACKUP_DIR}/$1)が成功しました。"
else
echo "$2(${ALM_BACKUP_DIR}/$1)が失敗しました。"
exit 1
fi
}
echo "MySQLデータベースをバックアップします。"
result=0
mysqldump `db_option_root` alminium > ${ALM_BACKUP_DIR}/${ALM_DBBACKUP_NAME} || result=$?
check_backup_result ${ALM_DBBACKUP_NAME} "データベースバックアップ" ${result}
#redmineの添付ファイルをバックアップ
echo "Redmineの添付ファイルをバックアップします。"
pushd ${ALM_INSTALL_DIR}/files/
result=0
tar czf ${ALM_BACKUP_DIR}/${ALM_FILE_BACKUP} . || result=$?
check_backup_result ${ALM_FILE_BACKUP} "添付ファイルバックアップ" ${result}
popd
#ソースコードリポジトリ
echo "ソースコードリポジトリをバックアップします。"
result=0
pushd ${ALM_VAR_DIR}/
tar czf ${ALM_BACKUP_DIR}/${ALM_REPOS_BACKUP} . || result=$?
check_backup_result ${ALM_REPOS_BACKUP} "ソースコードリポジトリバックアップ" ${result}
popd
# バックアップ統合
pushd ${ALM_BACKUP_DIR}
result=0
tar czf ./${ALM_BACKUP_NAME} \
./${ALM_DBBACKUP_NAME} ./${ALM_FILE_BACKUP} ./${ALM_REPOS_BACKUP} || result=$?
check_backup_result ${ALM_BACKUP_NAME} "バックアップファイル統合" ${result}
# バックアップ終了
echo "[`date`] ALMiniumのデータのバックアップが終了しました。"
echo "バックアップファイル名:${ALM_BACKUP_DIR}/${ALM_BACKUP_NAME}"
# 古いバックアップファイルを削除
if [ "${ALM_BACKUP_EXPIRY}" != "" ]; then
echo -n "[`date`] ${ALM_BACKUP_EXPIRY}日経過した"
echo "バックアップファイルを削除します。"
find ${ALM_BACKUP_DIR}/*.tar.gz \
-mtime +${ALM_BACKUP_EXPIRY} -exec rm -f {} \;
fi
popd