《Svn版本管理备份策略15625.docx》由会员分享,可在线阅读,更多相关《Svn版本管理备份策略15625.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、上海共进通信技术有限公司文件名称Svn版本本管理备份份策略文件编号SHGJ22010-O00001编制日期2010-06-13版本号V 1.00.0拟定者:汪汪中华审核者: 发布日期:文档状态 修改文档(修正部分内容,更新版本号)陈旧文档(已停止使用该文档)新建文档(移除旧版本,创建新文档)文控章文 档 修修 改 历历 史 记记 录版本号修改日期修改内容修改者目录一:SVNN版本管理理备份目的的二:SVNN备份策略略的内容三:SVNN备份方式式四:SVNN优缺点分分析五:SVNN备份的方方法一:SVNN版本管理理备份目的的配置管理的的一个重要要使命是保保证数据的的安全性,防防止服务器器硬盘损坏
2、坏,误操作作造成数据据无法恢复复的灾难性性后果。因因此制定一一个完整的的备份策略略是非常重重要的。二:SVNN备份策略略的内容备份策略的的内容:备备份频度、备备份方式、备备份存放地地点、备份份责任人、灾灾难恢复检检查措施及及规定。备备份频度、存存放地点等等内容可以以根据自己己的实际情情况自行制制定;本文文重点描述述备份方式式。三:SVNN备份方式式备份方式:svn备份份一般采用用三种方式式:1)ssvnaddmin dumpp 22 ) ssvnaddmin hotccopy 3 ) svvnsynnc. 四:SVNN优缺点分分析优缺点分析析: = svnaddmin dumpp是官方推推荐的
3、备份份方式,优优点是比较较灵活,可可以全量备备份也可以以增量备份份,并提供了版本本恢复机制制。 缺点是:如如果版本比比较大,如如版本数增增长到数万万、数十万万,那么ddump的的过程将非非常慢;备备份耗时,恢恢复更耗时时;不利于于快速进行行灾难恢复复。 个人建建议在版本本数比较小小的情况下下使用这种种备份方式式。 svnaddmin hotccopy原原设计目的的估计不是是用来备份份的,只能能进行全量量拷贝,不不能进行增增量备份; 优点是:备备份过程较较快,灾难难恢复也很很快;如果果备份机上上已经搭建建了svnn服务,甚甚至不需要要恢复只需要进行行简单配置置即可切换换到备份库库上工作。 缺点是
4、:比比较耗费硬硬盘,需要要有较大的的硬盘支持持(俺的备备份机有11TB空间间,呵呵)。 svnsyync实际际上是制作作2个镜像像库,当一一个坏了的的时候,可可以迅速切切换到另一一个。不过过,必须ssvn1.4版本以以上才支持持这个功能能。 优点是:当当制作成22个镜像库库的时候起起到双机实实时备份的的作用; 缺点是:当当作为2个个镜像库使使用时,没没办法做到到“想完全抛抛弃今天的的修改恢复复到昨晚的的样子”;而当作作为普通备备份机制每每日备份时时,操作又又较前2种种方法麻烦烦。 五:SVNN备份的方方法备份的方法法: = 1、svnnadmiin duump备份份工具 - 这这是subbve
5、rssion官官方推荐的的备份方式式。 11)定义备备份策略: 备份份频度:每每周六进行行一次全量量备份,每每周日到周周五进行增增量备份 备份份地点:备备份存储路路径到/hhome/backkup/ssvn/ 备份份命名:全全量备份文文件名为:weekkly_ffullyy_bacckup.yymmmdd,增增量备份文文件命名为为:daiily-iincreementtal-bbackuup.yyymmddd 备份份时间:每每晚21点点开始 备份份检查:每每月末进行行svnaadminn loaad恢复试试验。 22)建立全全量备份脚脚本: 在/下建立立一个peerl脚本本文件,名名为weee
6、kly_backkup.ppl,执行行全量备份份,并压缩缩备份文件件,代码如如下(本代代码只针对对一个库的的备份,如如果是多个个库请做相相应改动): #!/ussr/biin/peerl -w my $ssvn_rreposs=/hhome/svn/repoos/prrojecct1; my $bbackuup_diir=/homee/bacckup/svn/; my $nnext_backkup_ffile = wweeklly_fuully_backkup.daate +%Y%mm%d; $younngestt=svvnloook yooungeest $svn_repoos; chomp
7、p $yooungeest; printt Baackinng upp to reviisionn $yooungeestn; my $ssvnaddmin_cmd=svnnadmiin duump -revvisioon 0yyounggest $svnn_reppos $bacckup_dir/$nexxt_baackupp_fille; $svnnadmiin_cmmd; open(LOG,$bbackuup_diir/laast_bbackeed_upp); #记录备备份的版本本号 printt LOGG $yooungeest; closee LOGG; #如果想节节约空间,则则再执
8、行下下面的压缩缩脚本 printt Coompreessinng duump ffile.n; printt gzzip -g $bbackuup_diir/$nnext_backkup_ffile; 3)建建立增量备备份脚本: 在在全量备份份的基础上上,进行增增量备份:在/下下建立一个个perll脚本文件件,名为:dailly_baackupp.pl,代代码如下: #!/ussr/biin/peerl -w my $ssvn_rreposs=/hhome/svn/repoos/prrojecct1; my $bbackuup_diir=/homee/bacckup/svn/; my $nne
9、xt_backkup_ffile = ddailyy_inccremeentall_bacckup.ddate +%Y%m%d; open(IN,$bacckup_dir/lastt_baccked_up); $prevviouss_youungesst = ; chompp $prrevioous_yyounggest; closee IN; $younngestt=svvnloook yooungeest $svn_repoos; chompp $yooungeest; if ($younngestt eq $preeviouus_yooungeest) priint No nnew rr
10、evissionss to backkup.nn; exiit 0; my $ffirstt_revv = $prevviouss_youungesst + 1; printt Baackinng upp revvisioons $younngestt .n; my $ssvnaddmin_cmd = ssvnaddmin dumpp -iincreementtal -revvisioon $ffirstt_revvyounngestt $svvn_reepos $bbackuup_diir/$nnext_backkup_ffile; $svnnadmiin_cmmd; open(LOG,$b
11、backuup_diir/laast_bbackeed_upp); #记录备备份的版本本号 printt LOGG $yooungeest; closee LOGG; #如果想节节约空间,则则再执行下下面的压缩缩脚本 printt Coompreessinng duump ffile.n; printt gzzip -g $bbackuup_diir/$nnext_backkup_ffile; 4)配配置/ettc/crrontaab文件 配置置 /ettc/crrontaab 文件件,指定每每周六执行行weekkly_bbackuup.pll,指定周周一到周五五执行daaily_backku
12、p.ppl; 具体体步骤俺就就不啰嗦了了. 5)备备份恢复检检查 在月月底恢复检检查中或者者在灾难来来临时,请请按照如下下步骤进行行恢复:恢恢复顺序从从低版本逐逐个恢复到到高版本;即,先恢恢复最近的的一次完整整备份weeeklyy_fulll_baackupp.0711201(举举例),然然后恢复紧紧挨着这个个文件的增增量备份ddailyy_inccremeentall_bacckup.0712202,再再恢复后一一天的备份份0712203,依依次类推。如如下: user11mkddir nnewreepos user11svnnadmiin crreatee newwrepoos user1
13、1svnnadmiin looad nnewreepos svnnadmiin looad nnewreepos svnnadmiin looad nnewreepos zcaat weeeklyy_fulll_baackupp.0711201 | svvnadmmin lload newrreposs user11zcaat daaily_incrremenntal_backkup.00712002 | svnaadminn loaad neewreppos . (这部分内内容很多参参考了版版本控制之之道) 2、svnnadmiin hootcoppy整库拷拷贝方式 - svvnadmmin
14、 hhotcoopy是将将整个库都都“热”拷贝一份份出来,包包括库的钩钩子脚本、配配置文件等等;任何时时候运行这这个脚本都都得到一个个版本库的的安全拷贝贝,不管是是否有其他他进程正在在使用版本本库。 因此此这是俺青青睐的备份份方式。 1)定定义备份策策略 备备份频度:每天进行行一次全量量备份, 备备份地点:备份目录录以日期命命名,备份份路径到 /homme/baackupp/svnn/$mmmdd 备备份保留时时期:保留留10天到到15天,超超过15天天的进行删删除。 备备份时间:每晚211点开始 备备份检查:备份完毕毕后自动运运行检查脚脚本、自动动发送报告告。 2)建建立备份脚脚本 在自己己
15、homee目录 /下创建建一个文件件,bacckup.sh: #!/biin/baash SRCPAATH=/homee/svnn/reppos/; #定义义仓库paarentt路径 DISTPPATH=/homme/baackupp/svnn/daate +%m%dd/ ; #定义义存放路径径; if -d $DISSTPATTH then else mkkdir $DISSTPATTH chhmod g+s $DISSTPATTH fi echo $DISSTPATTH svnaddmin hotccopy $SRCCPATHH/Proojectt1 $DDISTPPATH/Projjec
16、t11 /hhome/backkup/ssvn/ccprepport.log 2&11; svnaddmin hotccopy $SRCCPATHH/Proojectt2 $DDISTPPATH/Projject22 cp $SSRCPAATH/aaccesss $DISTTPATHH; #备备份acccess文文件 cp $SSRCPAATH/ppasswwd $DISTTPATHH; #备备份passswd文文件 perl /homme/baackupp/svnn/bacckup_checck.pll #运行行检查脚本本 perl /homme/baackupp/svnn/delletDi
17、ir.pll #运运行删除脚脚本,对过过期备份进进行删除。 3)建建立检查脚脚本 在上面面指定的地地方/hoome/bbackuup/svvn/下建建立一个pperl脚脚本:baackupp_cheeck.ppl 备份完整性性检查的思思路是:对对备份的库库运行 ssvnloook yyounggest,如如果能正确确打印出最最新的版本本号,则表表明备份文文件没有缺缺失;如果果运行报错错,则说明明备份不完完整。我试试过如果备备份中断,则则运行svvnloook yooungeest会出出错。 perrl脚本代代码如下: #! /uusr/bbin/pperl # Auuthorr:xueejia
18、nng # 20007-111-100 # htttp:/ use sstricct; use CCarp; use NNet:SMTPP; # defiined the var # my $ssmtp =Nett:SMMTP-new(m, TTimeoout = 300, Deebug = 00)| die cannnt connnect to mmail.scmbbbs.ccomn; my $bbkreppos=/homme/baackupp/svnn/.&get_day;#定义备备份路径 my $sssreppos=httpp:/wwww.sscmbbbs.coom/reepos;#定义
19、义仓库urrl my rreposs = (proojectt1,projject22); my $ttitlee=eccho 如下是昨昨晚备份结结果与真实实库对比的的情况,如如果给出备备份版本数数,则表示示备份成功功;如果给给报错信息息或没有备备份版本数数,则表示示备份失败败: ./reeportt; systeem $ttitlee | diee exxec ffaileedn; foreaach mmy $mmyreppos(repoos) mmy $bbkreppos1=$bkrreposs./.$myyrepoos; my $ssrreposs1=$sssreppos./.$myre
20、epos; my $svnnlookkbk1 = eecho $myyrepoos 昨晚晚备份的版版本是:./repoort;ssvnloook yyounggest .$bbkreppos1. ./rreporrt 2&1; my $svnnlookkss1 = eecho $myyrepoos 真实实库中的最最新版本及及最后修改改时间是:./repport;svn log -rHHEAD .$ssreepos11. ./repoort 22&1; sysstem $svnnlookkbk1 | ddie execc faiilednn; sysstem $svnnlookkss1 | dd
21、ie execc faiilednn; my $bbody =echoo = ./repport; my $bbottoom =echoo 备份份位置:来来自htttp:/www.scmbbbs.ccom的.$bkkrepoos. ./repport; systeem $bbody | diee exxec ffaileedn; systeem $bbottoom | diee exxec ffaileedn; # reeportt thee ressult # open(SESAAME,./reeportt)| diee caan noot oppen ./repport; my ssvnn
22、eews = ; closee(SESSAME); foreaach mmy $lline11 (ssvnneews) priint $linee1.nn; my eemaill_adddressses =(sccmliist.sscmbbbs.coom,leadder1scmbbbs.ccom,leaader22); my $tto = joiin(, , emaail_aaddreessess); $smtpp-maail(scmscmbbbs.ccom); $smtpp-reecipiient(emaail_aaddreessess); $smtpp-daata(); $smtpp-da
23、ataseend(Totoon); $smtpp-daataseend(Fromm: svvnRepportscmbbbs.ccomn); $smtpp-daataseend(Subjject:svn备备份检查报报告.&get_todaay.nn); $smtpp-daataseend(Replly-too:scmmnn); $smtpp-daataseend(svnnnewss); $smtpp-daataennd(); $smtpp-quuit; # sub gget_ttodayy my( $sec, $miin, $hourr, $dday, $monnth, $yeaar ) = l
24、oocalttime( timme() ); $yearr += 19000; $montth+; my $ttodayy = ssprinntf( %044d%022d%022d, $yeaar, $montth, $day); returrn $ttodayy; sub gget_dday mmy( $sec, $miin, $hourr, $dday, $monnth, $yeaar ) = loocalttime( timme() ); $yearr += 19000; $montth+; my $ttodayy = ssprinntf( %022d%022d, $monnth, $d
25、ayy); returrn $ttodayy; 4)定定义删除脚脚本 由于于是全量备备份,所以以备份不宜宜保留太多多,只需要要保留最近近10来天天的即可,对对于超过115天历史史的备份基基本可以删删除了。 在/homee/bacckup/svn/下建立一一个perrl脚本:deleetDirr.pl (注注意,删除除svn备备份库可不不像删除普普通文件那那么简单) 脚本本代码请参参看我的另另一个帖子子:htttp:/www.scmbbbs.ccom/ccn/syystp/20077/12/systtp6.pphp 5)修修改/ettc/crrontaab 文件件 在该该文件中指指定每晚221点
26、执行行“backkup.ssh”脚本。 3、svnnsyncc备份 - 使用ssvnsyync备份份很简单,步步骤如下: 1)在备份份机上创建建一个空库库:svnnadmiin crreatee Proojectt1 2)更改该该库的钩子子脚本prre-reevproop-chhangee(因为ssvnsyync要改改这个库的的属性,也也就是要将将源库的属属性备份到到这个库,所所以要启用用这个脚本本): cd SMP/hookks; cp pre-revpprop-channge.ttmpl pre-revpprop-channge; chmmod 7755 ppre-rrevprrop-cc
27、hangge; vi pre-revpprop-channge; 将该脚脚本后面的的三句注释释掉,或者者干脆将它它弄成一个个空文件。 3)初始化化,此时还还没有备份份任何数据据: svnsyync iinit filee:/homee/bacckup/svn/svnssync/Projject11/ hhttp:/m/reppos/PProjeect1 语法是是:svnnsyncc iniit 你你刚创建的的库urll 源源库urll 注意本本地urll是三个斜斜杠的:/ 4)开始备备份(同步步): svnnsyncc synnc fiile:/hoome/bbackuup/svvn/svvn
28、synnc/Prrojecct1 5)建立同同步脚本 备份完完毕后,建建立钩子脚脚本进行同同步。在源源库/hoooks/下建立/修改poost-ccommiit脚本,在在其中增加加一行,内内容如下: /usr/bin/svnssync syncc -non-inteeracttive filee:/homee/bacckup/svn/svnssync/Projject11 你可能能已经注意意到上面的的备份似乎乎都是本地地备份,不不是异地备备份。实际际上,我是是通过将远远程的备份份机mouunt(请请参阅moount命命令)到ssvn服务务器上来实实现的,逻逻辑上看起起来是本地地备份,物物理上实
29、际际是异地备备份。本文来自Svn中中文网转转发请保留留本站地址址:htttp:/m/svnnpz/2200800702/836.htmll 93its not veryy saffe.Moost ppeoplle liike tto saave ttheirr worrk too thee repposittory freqquenttly,sshoulld soomethhing bad acciidenttallyy happpen to ttheirr worrkingg coppy.Seconnd,itts nnot vvery flexxiblee.If you do yyour w
30、orkk on diffferennt coomputters (perrhapss youu havve a workking copyy of /callc/trrunk on ttwo ddiffeerentt macchinees),yyoulll neeed tto maanuallly ccopy yourr chaangess bacck annd foorth or jjust do aall tthe wwork on aa sinngle compputerr.By thatt samme tooken,itss diffficuult tto shhare yourr c
31、haangess in proggresss witth annyonee elsse.A commmon softtwaree devveloppmentt “bestt praacticce”is tto alllow yourr peeers tto reevieww youur woork aas yoou goo.If noboody seess youur inntermmediaate ccommiits,yyou llose poteentiaal feeedbaack aand mmay eend uup gooing downn thee wroong pathh forr
32、 weeeks bbeforre annotheer peersonn on yourr teaam nooticees.Finallly,wwhen youre ffinisshed withh alll youur channges,you mighht fiind iit veery ddiffiicultt to remeerge yourr finnal wwork withh thee resst off thee commpanyys mmain bodyy of codee.Sallly (or ootherrs)maay haave mmade manyy othher cchangges iin thhe reeposiitoryy thaat arre diifficcult to iincorrporaate iinto yourr worrkingg coppy espeeciallly iif yoou ruun svvn uppdatee aftter wweekss of isollatioon.