svn 增量备份脚本,

环境:系统,centos6.5,svn version 1.6.11,httpd Apache/2.2.15 (Unix)

APR 1.3.9, APR-Util 1.3.9,全部为yum编译


一些常用命令

svn ls -v /opt/svn/snn                  查看svn目录文件列表

svn --version                      查看svn版本

svnadmin create /opt/svn/snn            创建一个svn仓库

svn import /etc/issue file:///opt/svn/snn/1 -m t  导入数据


第一个脚本,完整备份

#/bin/bash
#
# svn dump全备及增量备份脚本     (全备脚本,境备往下)

FILEDIR=/opt/svn/snn				#SVN文件目录
BAUPDIR=/tmp/svn_back_data			#SVN备份保存地址
SVNCONF=/tmp/svn_back_conf			#SVN配置保存地址
VERSION=/tmp/svn_back_veri			#增量备份时必须使用版本号码

# 如果目录不存在那么就创建它
[ ! -d $BAUPDIR ] && mkdir $BAUPDIR
[ ! -d $SVNCONF ] && mkdir $SVNCONF
[ ! -d $VERSION ] && mkdir $VERSION

#首先必须停止http跟svn服务
/sbin/service httpd stop &>/dev/null
/sbin/service svnserve stop  &>/dev/null

/usr/bin/svnadmin dump $FILEDIR > $BAUPDIR/`date +%F_%T`.firstsvn    &>/dev/null
/usr/bin/svnlook youngest $FILEDIR > $VERSION/frist.txt				 &>/dev/null 

/bin/cp -i /opt/svn/authfile/conf/* $SVNCONF
/bin/cp -i /etc/httpd/conf.d/subversion.conf $SVNCONF

#备份完成再启动
/sbin/service svnserve start  &>/dev/null
/sbin/service httpd start    &>/dev/null


第二个脚本,增量备份

#/bin/bash
#
#
# svn dump全备及增量备份脚本      (增量脚本) 两个脚本分开写

FILEDIR=/opt/svn/snn					#SVN文件目录
BAUPDIR=/tmp/svn_back_data				#SVN备份保存地址
SVNCONF=/tmp/svn_back_conf				#SVN配置保存地址
VERSION=/tmp/svn_back_veri				#增量备份时必须使用版本号码


#首先必须停止http跟svn服务
/sbin/service httpd stop &>/dev/null
/sbin/service svnserve stop  &>/dev/null


for i in {1..6};do

	FRISTNUM=`cat $VERSION/frist.txt`		#初始值 
	let FRISTNUM=$FRISTNUM+1				#初始值加1开始备份数据,恢复时会报错
	/usr/bin/svnlook youngest $FILEDIR > $VERSION/two.txt
	INCREMENT=`cat $VERSION/two.txt`
	
	/usr/bin/svnadmin dump --incremental -r $FRISTNUM:$INCREMENT $FILEDIR > $BAUPDIR/svn_increment_$i
	sleep 3
	/usr/bin/svnlook youngest $FILEDIR > /tmp/svn_back_veri/frist.txt
	
	#备份完成再启动
	/sbin/service svnserve start  &>/dev/null
	/sbin/service httpd start    &>/dev/null

	sleep 24h
done



#备份的数据 测试时间自己把控,bash -x xx.sh 查看编译过程

-rw-r--r--. 1 root root 686827436 Jul 29 12:17 2016-07-29_12:16:43.firstsvn

-rw-r--r--. 1 root root      2320 Jul 29 12:20 svn_increment_1

#备份无数据时大小直接为零,恢复时可直接无视

-rw-r--r--. 1 root root         0 Jul 29 12:21 svn_increment_2

-rw-r--r--. 1 root root       973 Jul 29 12:21 svn_increment_3

-rw-r--r--. 1 root root      1422 Jul 29 12:22 svn_increment_4

-rw-r--r--. 1 root root      1871 Jul 29 12:22 svn_increment_5


#恢复如下

#恢复时从第一个开始复制比如:先从完整备份,然后第一,第二,第三依次类推

svnadmin create /opt/svn/snn   先建立新仓库,当然路径随便定义

svnadmin load /opt/svn/snn/ < 2016-07-29_12:16:43.firstsvn

svnadmin load /opt/svn/snn/ < svn_increment_1

svnadmin load /opt/svn/snn/ < svn_increment_3

svnadmin load /opt/svn/snn/ < svn_increment_4

svnadmin load /opt/svn/snn/ < svn_increment_5


第三个脚本:只能完整备份

#/bin/bash
#
# svn脚本,此脚本只能全备,每周六凌晨1点整备份 0 01 * * 6 /bin/bash /tmp/xx.sh 

FILEDIR=/opt/svn/snn
BACKUPDIR=/tmp/svn_back_data
SVNCONF=/tmp/svn_back_conf

# 如果目录不存在那么就创建它
[ ! -d $BACKUPDIR ] && mkdir $BACKUPDIR
[ ! -d $SVNCONF ] && mkdir $SVNCONF

# svn数据全备脚本svnadmin hotcopy 恢复将目录文件反过来写
/usr/bin/svnadmin hotcopy $FILEDIR/`date +%F_%T`.svnback $BACKUPDIR

#将复制出来的配置文件打包
/bin/tar zcfp $SVNCONF/`date +%F_%H-%M`.tar.gz /etc/httpd/conf.d/subversion.conf /opt/svn/authfile/conf/* --xattrs &>/dev/null


第三个脚本恢复方式

svnadmin hotcopy 仓库名称完整路径 < 备份的文件完整路径