Svn版本管理备份策略.doc

上传人:豆**** 文档编号:17426117 上传时间:2022-05-24 格式:DOC 页数:11 大小:154KB
返回 下载 相关 举报
Svn版本管理备份策略.doc_第1页
第1页 / 共11页
Svn版本管理备份策略.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《Svn版本管理备份策略.doc》由会员分享,可在线阅读,更多相关《Svn版本管理备份策略.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流Svn版本管理备份策略文件名称Svn版本管理备份策略文件编号VBR2010-001编制日期2010-12-31版本号V 1.0.0拟定者:陈鹏审核者: 发布日期:文档状态 修改文档(修正部分内容,更新版本号)陈旧文档(已停止使用该文档)新建文档(移除旧版本,创建新文档)文控章文 档 修 改 历 史 记 录版本号修改日期修改内容修改者目录一:SVN版本管理备份目的二:SVN备份策略的内容三:SVN备份方式四:SVN优缺点分析五:SVN备份的方法一:SVN版本管理备份目的配置管理的一个重要使命是保证数据的安全性,防止服务器硬盘损坏,误操作造成数据

2、无法恢复的灾难性后果。因此制定一个完整的备份策略是非常重要的。二:SVN备份策略的内容备份策略的内容:备份频度、备份方式、备份存放地点、备份责任人、灾难恢复检查措施及规定。备份频度、存放地点等内容可以根据自己的实际情况自行制定;本文重点描述备份方式。三:SVN备份方式备份方式:svn备份一般采用三种方式:1)svnadmin dump 2 ) svnadmin hotcopy 3 ) svnsync. 四:SVN优缺点分析优缺点分析: = svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。 缺点是:如果版本比较大,如版本数增长到数

3、万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。 个人建议在版本数比较小的情况下使用这种备份方式。 svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份; 优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复只需要进行简单配置即可切换到备份库上工作。 缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。 svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。 优点是:当制作成2个镜像库的

4、时候起到双机实时备份的作用; 缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。 五:SVN备份的方法备份的方法: = 1、svnadmin dump备份工具 - 这是subversion官方推荐的备份方式。 1)定义备份策略: 备份频度:每周六进行一次全量备份,每周日到周五进行增量备份 备份地点:备份存储路径到/home/backup/svn/ 备份命名:全量备份文件名为:weekly_fully_backup.yymmdd,增量备份文件命名为:daily-incremental-backup.yymm

5、dd 备份时间:每晚21点开始 备份检查:每月末进行svnadmin load恢复试验。 2)建立全量备份脚本: 在/下建立一个perl脚本文件,名为weekly_backup.pl,执行全量备份,并压缩备份文件,代码如下(本代码只针对一个库的备份,如果是多个库请做相应改动): #!/usr/bin/perl -w my $svn_repos=/home/svn/repos/project1; my $backup_dir=/home/backup/svn/; my $next_backup_file = weekly_fully_backup.date +%Y%m%d; $youngest=

6、svnlook youngest $svn_repos; chomp $youngest; print Backing up to revision $youngestn; my $svnadmin_cmd=svnadmin dump -revision 0youngest $svn_repos $backup_dir/$next_backup_file; $svnadmin_cmd; open(LOG,$backup_dir/last_backed_up); #记录备份的版本号 print LOG $youngest; close LOG; #如果想节约空间,则再执行下面的压缩脚本 prin

7、t Compressing dump file.n; print gzip -g $backup_dir/$next_backup_file; 3)建立增量备份脚本: 在全量备份的基础上,进行增量备份:在/下建立一个perl脚本文件,名为:daily_backup.pl,代码如下: #!/usr/bin/perl -w my $svn_repos=/home/svn/repos/project1; my $backup_dir=/home/backup/svn/; my $next_backup_file = daily_incremental_backup.date +%Y%m%d; ope

8、n(IN,$backup_dir/last_backed_up); $previous_youngest = ; chomp $previous_youngest; close IN; $youngest=svnlook youngest $svn_repos; chomp $youngest; if ($youngest eq $previous_youngest) print No new revisions to backup.n; exit 0; my $first_rev = $previous_youngest + 1; print Backing up revisions $yo

9、ungest .n; my $svnadmin_cmd = svnadmin dump -incremental -revision $first_revyoungest $svn_repos $backup_dir/$next_backup_file; $svnadmin_cmd; open(LOG,$backup_dir/last_backed_up); #记录备份的版本号 print LOG $youngest; close LOG; #如果想节约空间,则再执行下面的压缩脚本 print Compressing dump file.n; print gzip -g $backup_dir

10、/$next_backup_file; 4)配置/etc/crontab文件 配置 /etc/crontab 文件,指定每周六执行weekly_backup.pl,指定周一到周五执行daily_backup.pl; 具体步骤俺就不啰嗦了. 5)备份恢复检查 在月底恢复检查中或者在灾难来临时,请按照如下步骤进行恢复:恢复顺序从低版本逐个恢复到高版本;即,先恢复最近的一次完整备份weekly_full_backup.071201(举例),然后恢复紧挨着这个文件的增量备份daily_incremental_backup.071202,再恢复后一天的备份071203,依次类推。如下: user1mkd

11、ir newrepos user1svnadmin create newrepos user1svnadmin load newrepos svnadmin load newrepos svnadmin load newrepos zcat weekly_full_backup.071201 | svnadmin load newrepos user1zcat daily_incremental_backup.071202 | svnadmin load newrepos . (这部分内容很多参考了版本控制之道) 2、svnadmin hotcopy整库拷贝方式 - svnadmin hotc

12、opy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。 因此这是俺青睐的备份方式。 1)定义备份策略 备份频度:每天进行一次全量备份, 备份地点:备份目录以日期命名,备份路径到 /home/backup/svn/$mmdd 备份保留时期:保留10天到15天,超过15天的进行删除。 备份时间:每晚21点开始 备份检查:备份完毕后自动运行检查脚本、自动发送报告。 2)建立备份脚本 在自己home目录 /下创建一个文件,backup.sh: #!/bin/bash SRCPATH=/home/svn/re

13、pos/; #定义仓库parent路径 DISTPATH=/home/backup/svn/date +%m%d/ ; #定义存放路径; if -d $DISTPATH then else mkdir $DISTPATH chmod g+s $DISTPATH fi echo $DISTPATH svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 /home/backup/svn/cpreport.log 2&1; svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2 cp $SRCP

14、ATH/access $DISTPATH; #备份access文件 cp $SRCPATH/passwd $DISTPATH; #备份passwd文件 perl /home/backup/svn/backup_check.pl #运行检查脚本 perl /home/backup/svn/deletDir.pl #运行删除脚本,对过期备份进行删除。 3)建立检查脚本 在上面指定的地方/home/backup/svn/下建立一个perl脚本:backup_check.pl 备份完整性检查的思路是:对备份的库运行 svnlook youngest,如果能正确打印出最新的版本号,则表明备份文件没有缺失

15、;如果运行报错,则说明备份不完整。我试过如果备份中断,则运行svnlook youngest会出错。 perl脚本代码如下: #! /usr/bin/perl # Author:xuejiang # 2007-11-10 # use strict; use Carp; use Net:SMTP; # defined the var # my $smtp =Net:SMTP-new(, Timeout = 30, Debug = 0)| die cannt connect to n; my $bkrepos=/home/backup/svn/.&get_day;#定义备份路径 my $ssrep

16、os= my repos = (project1,project2); my $title=echo 如下是昨晚备份结果与真实库对比的情况,如果给出备份版本数,则表示备份成功;如果给报错信息或没有备份版本数,则表示备份失败: ./report; system $title | die exec failedn; foreach my $myrepos(repos) my $bkrepos1=$bkrepos./.$myrepos; my $ssrepos1=$ssrepos./.$myrepos; my $svnlookbk1 = echo $myrepos 昨晚备份的版本是:./report

17、;svnlook youngest .$bkrepos1. ./report 2&1; my $svnlookss1 = echo $myrepos 真实库中的最新版本及最后修改时间是:./report;svn log -rHEAD .$ssrepos1. ./report 2&1; system $svnlookbk1 | die exec failedn; system $svnlookss1 | die exec failedn; my $body =echo = ./report; my $bottom =echo 备份位置:来自的.$bkrepos. ./report; system

18、 $body | die exec failedn; system $bottom | die exec failedn; # report the result # open(SESAME,./report)| die can not open ./report; my svnnews = ; close(SESAME); foreach my $line1 (svnnews) print $line1.n; my email_addresses =(scm,leader1,leader2); my $to = join(, , email_addresses); $smtp-mail(sc

19、m); $smtp-recipient(email_addresses); $smtp-data(); $smtp-datasend(Toton); $smtp-datasend(From: svnReportn); $smtp-datasend(Subject:svn备份检查报告.&get_today.n); $smtp-datasend(Reply-to:scmn); $smtp-datasend(svnnews); $smtp-dataend(); $smtp-quit; # sub get_today my( $sec, $min, $hour, $day, $month, $year

20、 ) = localtime( time() ); $year += 1900; $month+; my $today = sprintf( %04d%02d%02d, $year, $month, $day); return $today; sub get_day my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() ); $year += 1900; $month+; my $today = sprintf( %02d%02d, $month, $day); return $today; 4)定义删除脚本 由于是全

21、量备份,所以备份不宜保留太多,只需要保留最近10来天的即可,对于超过15天历史的备份基本可以删除了。 在/home/backup/svn/下建立一个perl脚本:deletDir.pl (注意,删除svn备份库可不像删除普通文件那么简单) 脚本代码请参看我的另一个帖子: 5)修改/etc/crontab 文件 在该文件中指定每晚21点执行“backup.sh”脚本。 3、svnsync备份 - 使用svnsync备份很简单,步骤如下: 1)在备份机上创建一个空库:svnadmin create Project1 2)更改该库的钩子脚本pre-revprop-change(因为svnsync要改

22、这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本): cd SMP/hooks; cp pre-revprop-change.tmpl pre-revprop-change; chmod 755 pre-revprop-change; vi pre-revprop-change; 将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。 3)初始化,此时还没有备份任何数据: svnsync init file:/home/backup/svn/svnsync/Project1/ 语法是:svnsync init 你刚创建的库url 源库url 注意本地url是三个斜杠的:/ 4

23、)开始备份(同步): svnsync sync file:/home/backup/svn/svnsync/Project1 5)建立同步脚本 备份完毕后,建立钩子脚本进行同步。在源库/hooks/下建立/修改post-commit脚本,在其中增加一行,内容如下: /usr/bin/svnsync sync -non-interactive file:/home/backup/svn/svnsync/Project1 你可能已经注意到上面的备份似乎都是本地备份,不是异地备份。实际上,我是通过将远程的备份机mount(请参阅mount命令)到svn服务器上来实现的,逻辑上看起来是本地备份,物理上实际是异地备份。.精品文档.格瑞特卷备份容灾项目组

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁