SVN备份/恢复脚本

上一篇介绍了svn的配置,这里就写了两个脚本对svn进行全备和恢复,由于是全备,所以可以做个计划任务,每天执行一次即可。保留几天的数据。

1、备份脚本:

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
#!/bin/sh
#
#
# Description: SVN full backup of the project
# Author: Mr.chen
# Date: 2015/02/10
# Email: 
#
#
SVN_BASICDIR = "/usr/local/svn/bin"
DAY = 5        # Backup files keep days
TIME = `date  + % Y % m % d % H % M`
SVNPATH = "/data/svn"
BAKDIR = "/data/svnbak"
BAKPATH = ${BAKDIR} / ${TIME}
BAKLOG = ${BAKDIR} / bak_svn.log
PROJECT = ` / bin / ls  - lh ${SVNPATH} | grep  - "^d"  | awk  '{print $NF}' `
CONIFIG_FILE = ` / bin / ls  - lh ${SVNPATH} | grep  - "^-"  | awk  '{print $NF}' `
 
type  lftp &>  / dev / null && echo  "Lftp command does not exist,Plz install lftp."  && exit  128
 
[ !  - "${BAKPATH}"  ] && mkdir  - p ${BAKPATH}
 
make_log() {
     / bin / echo  - "[ $(date +%Y-%m-%d' '%H:%M:%S) ] ${1}"  >> ${BAKLOG}
}
 
tar_bakfile() {
     cd ${BAKDIR}
     make_log  "tar zcf ${1##*/}.tgz ${1##*/}"
     tar zcf ${ 1 ##*/}.tgz ${1##*/} &> /dev/null
 
     make_log  "rm -rf ${1##*/}"
     rm  - rf ${ 1 ##*/} &> /dev/null
     cd
     echo "" >> ${BAKLOG}
}
 
rm_expired() {
     cd ${ 1 }
     _DAY_ = `date  - d "${DAY} days ago"  + % Y % m % d`
     ls | grep ${_DAY_} | xargs rm  - rf
     cd
}
 
ftp_upload() {
     #################################
     #FTP upload
     cd ${BAKDIR}
     #echo "Start upload file: `date`"
     FTPHOST = "x.x.x.x"
     FTPPORT = "21"
     FTPUSER = "xxx"
     FTPPASSWD = "xxx"
     FTPDOCUMENT = "xxx"
 
/ usr / bin / lftp << EOF
open  - p $FTPPORT ftp: / / $FTPUSER:$FTPPASSWD@$FTPHOST / $FTPDOCUMENT
put $ 1
EOF
 
     #echo "Upload file end: `date`"
     ##################################
}
 
for  in  ${CONIFIG_FILE};do
     cp ${SVNPATH} / ${i} ${BAKPATH} /
     [ $? ! =  0  ] && echo  "Configuration file backup failed..."  >> ${BAKLOG} && ls  - ldh ${BAKDIR} / *  | grep  '^d'  | awk  '{print $NF}'  | xargs rm  - rf && exit  121
done
 
make_log  "=============== Start Backup ==============="
for  _bak_project_  in  ${PROJECT};do
     make_log  "${SVN_BASICDIR}/svnadmin hotcopy ${SVNPATH}/${_bak_project_} ${BAKPATH}/${_bak_project_}"
     ${SVN_BASICDIR} / svnadmin hotcopy ${SVNPATH} / ${_bak_project_} ${BAKPATH} / ${_bak_project_} &>  / dev / null
     if  [ $? ! =  0  ];then
         make_log  "Project ${_bak_project_} backup failed, Plz check..."
         echo  "Project ${_bak_project_} backup failed, Plz check..."
         ls  - ldh ${BAKDIR} / *  | grep  '^d'  | awk  '{print $NF}'  | xargs rm  - rf
         exit  122
     fi
done
make_log  "================ End Backup ================"  && echo "" >> ${BAKLOG}
make_log  "=============== Start Check ==============="
 
for  _check_proejct_  in  ${PROJECT};do
     make_log  "${SVN_BASICDIR}/svnlook youngest ${BAKPATH}/${_check_proejct_}"
     ${SVN_BASICDIR} / svnlook youngest ${BAKPATH} / ${_check_proejct_}&>  / dev / null
     if  [ $? ! =  0  ];then
         make_log  "Project ${_check_proejct_} backup file Invaild.Plz check..."
         echo  "Project ${_check_proejct_} backup file Invaild.Plz check..."
         ls  - ldh ${BAKDIR} / *  | grep  '^d'  | awk  '{print $NF}'  | xargs rm  - rf
         exit  123
     fi
done
make_log  "================ End Check ================"  && echo "" >> ${BAKLOG}
 
tar_bakfile  "${BAKPATH}"
if  [ $? ! =  0  ];then
     make_log  "Compressed file error."
     echo  "Compressed file error."
     exit  124
else
    ftp_upload  "${BAKPATH##*/}.tgz"
    rm_expired  "${BAKDIR}"
fi
 
# 此脚本对svn的库进行全备,并且上传至FTP服务器保留一份。


2、恢复脚本

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
#!/bin/sh
#
# Description: Download the backup file and restore from the FTP server
# Author: Mr.chen
# Date: 2015/02/10
# Email:
#
#
# Require: SVN environment is normal
#
SVN_USER = "svn"
SVN_BASICDIR = "/usr/local/svn/bin"
YESTERDAY = `date  - d '1 days ago'  + % Y % m % d`
SVNDIR = "/data/svn"
DOWNLOAD_DIR = "/data/download"
LOGFILE = "${DOWNLOAD_DIR}/svn_recover.log"
 
FTPHOST = "x.x.x.x"
FTPPORT = "x"
FTPUSER = "xxx"
FTPPASSWD = "xxxxxx"
FTPDOCUMENT = "xxx"
 
type  lftp &>  / dev / null && echo  "Lftp command does not exist,Plz install lftp."  && exit  128
 
[ !  - d ${DOWNLOAD_DIR} ] && mkdir  - p ${DOWNLOAD_DIR}
 
make_log() {
     / bin / echo  - "[ $(date +%Y-%m-%d' '%H:%M:%S) ] ${1}"  >> ${LOGFILE}
}
 
ftp_download() {
     ############################
     # Backup file download
     cd ${ 1 }
     #echo "Start download file: `date`"
 
/ usr / bin / lftp << EOF
open  - p $FTPPORT ftp: / / $FTPUSER:$FTPPASSWD@$FTPHOST / $FTPDOCUMENT
mirror  - i ${YESTERDAY}. * .tgz
EOF
     cd    
     #echo "Download file end: `date`"
     ############################
}
 
extract() {
     cd ${ 1 }
     make_log  "tar xf *.tgz"
     tar xf  * .tgz &>  / dev / null
     make_log  "rm -f *.tgz"
     rm  - * .tgz &>  / dev / null
}
 
 
ftp_download  "${DOWNLOAD_DIR}"
if  [ `ls ${DOWNLOAD_DIR} | grep  "tgz$" ` ];then
     extract  "${DOWNLOAD_DIR}"
     BAKDIR = `ls ${DOWNLOAD_DIR} | grep  - Ev  "log" `
     #
     # Recover SVN Project
     make_log  "=========== [`date +%Y/%m/%d' '%H:%M`] Start Recover ==========="
     for  _project_  in  `ls  - lh ${DOWNLOAD_DIR} / ${BAKDIR} | grep  "^d"  | awk  '{print $NF}' `; do
         if  [ !  - d ${SVNDIR} / ${_project_} ];then
             make_log  "mkdir -p ${SVNDIR}/${_project_}"
             mkdir  - p ${SVNDIR} / ${_project_} &>  / dev / null
         else
             make_log  "Project directory exist."
             echo  "Project directory exist."
             exit  127
         fi
         make_log  "${SVN_BASICDIR}/svnadmin hotcopy ${DOWNLOAD_DIR}/${BAKDIR}/${_project_} ${SVNDIR}/${_project_}"
         ${SVN_BASICDIR} / svnadmin hotcopy ${DOWNLOAD_DIR} / ${BAKDIR} / ${_project_} ${SVNDIR} / ${_project_} &>  / dev / null
         make_log  "${SVN_BASICDIR}/svnlook youngest ${SVNDIR}/${_project_}"
         ${SVN_BASICDIR} / svnlook youngest ${SVNDIR} / ${_project_} &>  / dev / null
         if  [ $? ! =  0  ];then
             make_log  "Recover Failed."
             echo  "Recover Failed."
             exit  125
         fi
     done
     echo "" >> ${LOGFILE}
     #
     # Copy configuration file
     for  _config_file_  in  `ls  - lh ${DOWNLOAD_DIR} / ${BAKDIR} | grep  "^-"  | awk  '{print $NF}' `; do
         #make_log "cp ${DOWNLOAD_DIR}/${BAKDIR}/${_config_file_} ${SVNDIR}"
         #make_log "chown svn.svn ${SVNDIR}/${_config_file_}"
         cp ${DOWNLOAD_DIR} / ${BAKDIR} / ${_config_file_} ${SVNDIR}
     done
     make_log  "chown -R ${SVN_USER}.${SVN_USER} ${SVNDIR}"
     make_log  "rm -rf ${DOWNLOAD_DIR}/${BAKDIR}"
     rm  - rf ${DOWNLOAD_DIR} / ${BAKDIR}
     chown  - R ${SVN_USER}.${SVN_USER} ${SVNDIR} &>  / dev / null
     make_log  "=========== [`date +%Y/%m/%d' '%H:%M`] Recover Finish ==========="
     echo "" >> ${LOGFILE}
     #echo "Recover SVN Project successfull."
else
     make_log  "Download Backup File Failed."
     echo "" >> ${LOGFILE}
     echo  "Download Backup File Failed.Plz Check..."
     exit  122
fi
 
# 从FTP的服务器下载备份脚本,并自动恢复到指定目录


有可能有很多不是很完善,如需要可以自己随便改改就行了。



本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1613242,如需转载请自行联系原作者

你可能感兴趣的:(awk)