对svn版本库的备份,也是对代码的一种备份策略
1.Svn 自带备份工具刀简介
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。
第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。
考虑到备份的易操作性,和快速恢复。建议采用dump,hotcopy.
2.svn 备份命令
svn备份常用命令
2.1、完全备份和增量备份svn。
svnadmin dump /svn/project/www > full.svn.bak #完全备份/svn/project/www这个版本库,并另存为full.svn.bak
svnadmin dump /svn/project/www -r 8 --incremental > svn.bak.1 #以增量把版本库8转存到svn.bak.1
参数介绍:
-r [--revision] :指定版本ARG(或X:Y范围)
--incremental :以增量方式进行转存
--deltas :在转存输出中使用差异
-q [--quiet] :在标准错误输出不显示进度(仅错误)
2.2、dump备份还原。
svnadmin create /svn/project/test #创建一个新的版本库
svnadmin load /svn/project/test < full.svn.bak #现还原完全备份
svnadmin load /svn/project/test < svn.bak.1 #再还原增量备份的内容
2.3、svnadminhotcopy /svn/project/www /root/backup.svn.www/ #热拷贝www这个版本库
,可以直接拿来用
3.下面以hotcopy 备份恢复以test 库位原型进行说明(脚本可以一次执行,备份多个制定的库)
3.1备份策略
用hotcopy 进行定时热全备份,在速度和效率占优势,这里定时晚上的10点
备份的库,进行压缩处理
保证十天的备份,超过十天的备份删除(可以在脚本中修改)
备份用计划任务执行
3.2脚本说明
filelist.txt
svnbackmore.sh
svnback.sh
其中filelist.txt和 svnbackmore.sh 是可以同时备份多个版本库
Svnback.sh 是备份单个版本库
#!/bin/bash
#writer loy
#date 20130717
#函数体中$1版本存放位置(版本库上一级目录),$2版本库名字,$3备份目录(备份版本库上一级目录)
#filelist 是版本库名字的列表
backsvn() #备份的函数
{
local daten=$(date +%Y%m%d)
local dir1=$3/$2
if [ -d $dir1 ];then
mkdir $dir1/$2.$daten
else
mkdir -p $dir1/$2.$daten
fi
cd $dir1
svnadmin hotcopy $1/$2 $dir1/$2.$daten
tar zcvf$2.$daten.tar.gz $2.$daten
rm -rf $2.$daten
}
deloldsvn() #删除old 的备份
{
local date10=$(date -d '10 days ago' +%Y%m%d)
local dir1=$3/$2
cd $dir1
ls |grep $date10|xargs rm-rf
}
#backsvn '/usr/local/svn' 'test' '/usr/svnback'
while read line #读取版本库的列表进行逐个备份和相应的删除
do
backsvn $1 $line $3
deloldsvn $1 $line $3
done < "/usr/src/svncode/filelist.txt"
3.3 写计划任务
crontab –e
* 22 * * * ./usr/src/svncode/svnbackmore.sh '/usr/local/svn' '000' '/usr/svnback' >/dev/null 2>&1 &
:wq
保存退出
3.4 备份脚本的使用
./svnback.sh '/usr/local/svn' 'test''/usr/svnback' #位置参数传递给脚本
./svnback.sh '/usr/local/svn' '000' '/usr/svnback' 注意第二个位置参数‘000’是为了配合程序的运行,因为真正的版本库会从filelist 中读取
4.恢复的操作
恢复的时候,需要先把原来的库,mv 改后缀比如 mv www www.bak
mkdir www
备份解压的版本库 svnserver 版本库目录
svnadminhotcopy /root/backup.svn.www /svn/project/www
chown apache.apache -R www (把属主和属组都改成apache 配置文件中的用户)
一切完毕在客户端进行测试。
转载于:https://blog.51cto.com/eagleheart/1252520