Svn版本管理备份策略规划.docx

上传人:1398****507 文档编号:44272562 上传时间:2022-09-21 格式:DOCX 页数:18 大小:18.09KB
返回 下载 相关 举报
Svn版本管理备份策略规划.docx_第1页
第1页 / 共18页
Svn版本管理备份策略规划.docx_第2页
第2页 / 共18页
点击查看更多>>
资源描述

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

1、Svn版本管理备份策略规划V:1.0 精选管理方案Svn 版本管理备份策略规划2020- -6 6- -8 8Svn 版本管理备份策略规划 文件名称 n Svn 版本管理备份策略文件编号 SHGJ2010-O00001编制日期 2010-06-13版本号 V 1.0.0拟定者:汪中华 审核者:发布日期:文档状态√ 文控章文 档 修 改 历 史 记 录 版本号 修改日期 修改内容 修改者 上海 共进通信技术 有限公司新建文档(移除旧版本,创建新文档)修改文档(修正部分内容,更新版本号)陈旧文档(已停止运用该文档)Svn 版本管理备份策略规划书目 一:N SVN 版本管 理备份目的Sv

2、n 版本管理备份策略规划二:N SVN 备份策略的内容三:N SVN 备份方式四:N SVN 优缺点分析五:N SVN 备份的方法一:N SVN 版本管理备份目的 配置管理的一个重要使命是保证数据的平安性,防止服务器硬盘损坏,误操作造成数据无法复原的灾难性后果。因此制定一个完整的备份策略是特别重要的。二:N SVN 备份策略的内容Svn 版本管理备份策略规划备份策略的内容:备份频度、备份方式、备份存放地点、备份责任人、灾难复原检查措施及规定。备份频度、存放地点等内容可以依据自己的实际状况自行制定;本文重点描述备份方式。三:N SVN 备份方式 备份方式: svn 备份一般采纳三种方式:1)sv

3、nadmin dump 2 ) svnadmin hotcopy 3 ) svnsync. 四:N SVN 优缺点分析 优缺点分析:=svnadmin dump 是官方举荐的备份方式,优点是比较敏捷,可以全量备份也可以增量备份,并 供应了版本复原机制。 缺点是:假如版本比较大,如版本数增长到数万、数十万,那么 dump 的过程将特别慢;备份耗时,复原更耗时;不利于快速进行灾难复原。个人建议在版本数比较小的状况下运用这种备份方式。svnadmin hotcopy 原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;优点是:备份过程较快,灾难复原也很快;假如备份机上已经搭建了 svn

4、 服务,甚至不须要复原 只须要进行简洁配置即可切换到备份库上工作。 缺点是:比较耗费硬盘,须要有较大的硬盘支持(俺的备份机有 1TB 空间,呵呵)。 svnsync 事实上是制作 2 个镜像库,当一个坏了的时候,可以快速切换到另一个。不过,必需 svn1.4 版本以上才支持这个功能。 优点是:当制作成 2 个镜像库的时候起到双机实时备份的作用; 缺点是:当作为 2 个镜像库运用时,没方法做到想完全抛弃今日的修改复原到昨晚的样子;而当作为一般备份机制每日备份时,操作又较前 2 种方法麻烦。 五:N SVN 备份的方法Svn 版本管理备份策略规划备份的方法:= 1、svnadmin dump 备份

5、工具-这是 subversion 官方举荐的备份方式。 1)定义备份策略: 备份频度:每周六进行一次全量备份,每周日到周五进行增量备份 备份地点:备份存储路径到/home/backup/svn/ 备 份 命 名 :全 量 备 份 文 件 名 为 :weekly_fully_backup.yymmdd, 增 量 备 份 文 件 命 名 为 :daily-incremental-backup.yymmdd 备份时间:每晚 21 点起先 备份检查:每月末进行 svnadmin load 复原试验。2)建立全量备份脚本: 在/下建立一个 perl 脚本文件,名为 weekly_backup.pl,执行

6、全量备份,并压缩备份文件,代码如下(本代码只针对一个库的备份,假如是多个库请做相应改动):#!/usr/bin/perl -wmy $svn_repos=/home/svn/repos/project1;my $backup_dir=/home/backup/svn/;my $next_backup_file = weekly_fully_backup.date +%Y%m%d; $youngest=svnlook youngest $svn_repos;chomp $youngest; print Backing up to revision $youngestn;my $svnadmin_

7、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;#假如想节约空间,则再执行下面的压缩脚本print Compressing dump file.n;print gzip -g $backup_dir/$next_backup_file; 3)建立增量备份脚本:在全量备份的基础上,进行增量备份

8、:在/下建立一个 perl 脚本文件,名为:daily_backup.pl,代码如下:Svn 版本管理备份策略规划#!/usr/bin/perl -wmy $svn_repos=/home/svn/repos/project1;my $backup_dir=/home/backup/svn/;my $next_backup_file = daily_incremental_backup.date +%Y%m%d; open(IN,$backup_dir/last_backed_up);$previous_youngest = <IN>chomp $previous_youngest

9、;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 $youngest .n;my $svnadmin_cmd = svnadmin dump -incremental -revision $first_revyoungest $sv

10、n_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/$next_backup_file; 4)配置/etc/crontab 文件 配置 /etc/crontab 文件,指定每周六执行 weekly_backup.pl,指定周

11、一到周五执行 daily_backup.pl; 详细步骤俺就不啰嗦了. 5)备份复原检查 在月底复原检查中或者在灾难来临时,请根据如下步骤进行复原:复原依次从低版本逐个复原到高版本;即,先复原最近的一次完整备份 weekly_full_backup.071201(举例),然后复原紧挨着这个文件的增量备份daily_incremental_backup.071202,再复原后一天的备份 071203,依次类推。如下:user1>mkdir newreposuser1>svnadmin create newreposuser1>svnadmin load newrepos <

12、; weekly_full_backup.071201user1>svnadmin load newrepos < daily_incremental_backup.071202Svn 版本管理备份策略规划user1>svnadmin load newrepos < daily_incremental_backup.071203. 假如备份时采纳了 gzip 进行压缩,复原时可将解压缩和复原吩咐合并,简洁写成:user1>zcat weekly_full_backup.071201 | svnadmin load newreposuser1>zcat dai

13、ly_incremental_backup.071202 | svnadmin load newrepos. (这部分内容许多参考了版本限制之道) 2、svnadmin hotcopy 整库拷贝方式- svnadmin hotcopy 是将整个库都热拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的平安拷贝,不管是否有其他进程正在运用版本库。 因此这是俺青睐的备份方式。 1)定义备份策略 备份频度:每天进行一次全量备份,备份地点:备份书目以日期命名,备份路径到 /home/backup/svn/$mmdd备份保留时期:保留 10 天到 15 天,超过 15 天的

14、进行删除。备份时间:每晚 21 点起先备份检查:备份完毕后自动运行检查脚本、自动发送报告。 2)建立备份脚本在自己 home 书目 /下创建一个文件,backup.sh: #!/bin/bashSRCPATH=/home/svn/repos/; #定义仓库 parent 路径DISTPATH=/home/backup/svn/date +%m%d/ ; #定义存放路径;if -d $DISTPATH thenelse mkdir $DISTPATH chmod g+s $DISTPATHfiecho $DISTPATHsvnadmin hotcopy $SRCPATH/Project1 $DI

15、STPATH/Project1 >/home/backup/svn/cpreport.log 2>1;svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2cp $SRCPATH/access$DISTPATH; #备份 access 文件Svn 版本管理备份策略规划cp $SRCPATH/passwd$DISTPATH; #备份 passwd 文件perl /home/backup/svn/backup_check.pl #运行检查脚本perl /home/backup/svn/deletDir.pl#运行删除脚本,对过期备份进

16、行删除。 3)建立检查脚本在上面指定的地方/home/backup/svn/下建立一个 perl 脚本:backup_check.pl备份完整性检查的思路是:对备份的库运行 svnlook youngest,假如能正确打印出最新的版本号,则表明备份文件没有缺失;假如运行报错,则说明备份不完整。我试过假如备份中断,则运行 svnlook youngest 会出错。perl 脚本代码如下: #! /usr/bin/perl# Author:xuejiang# 2007-11-10# use strict;use Carp;use Net:SMTP; # defined the var # my $

17、smtp =Net:SMTP->new(, Timeout => 30, Debug => 0)| die cannt connect to n; my $bkrepos=/home/backup/svn/.get_day;#定义备份路径my $ssrepos= urlmy repos = (project1,project2); my $title=echo 如下是昨晚备份结果与真实库对比的状况,假如给出备份版本数,则表示备份胜利;假如给报错信息或没有备份版本数,则表示备份失败: >./report;system $title| die exec failedn;fo

18、reach my $myrepos(repos)my $bkrepos1=$bkrepos./.$myrepos;my $ssrepos1=$ssrepos./.$myrepos;my $svnlookbk1 = echo $myrepos 昨 晚 备 份 的 版 本 是 :>>./report;svnlook youngest .$bkrepos1. >> ./report 2>1;my $svnlookss1 = echo $myrepos 真实库中的最新版本及最终修改时间是:>>./report;svn log -rHEAD .$ssrepos1

19、. >> ./report 2>1;system $svnlookbk1 | die exec failedn;system $svnlookss1 | die exec failedn;Svn 版本管理备份策略规划 my $body =echo = >>./report;my $bottom =echo 备份位置:来自 的.$bkrepos. >>./report; system $body | die exec failedn;system $bottom | die exec failedn;# report the result #open(S

20、ESAME,./report)| die can not open ./report;my svnnews = <SESAME>close(SESAME);foreach my $line1 (svnnews)print $line1.n; my email_addresses =(scm,leader1,leader2);my $to= join(, , email_addresses);$smtp->mail(scm);$smtp->recipient(email_addresses);$smtp->data();$smtp->datasend(Toto

21、n);$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_todaySvn 版本管理备份策略规划my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );$year += 1900;$mo

22、nth+;my $today = sprintf( %04d%02d%02d, $year, $month, $day);return $today;sub get_daymy( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );$year += 1900;$month+;my $today = sprintf( %02d%02d, $month, $day);return $today; 4)定义删除脚本由于是全量备份,所以备份不宜保留太多,只须要保留最近 10 来天的即可,对于超过 15 天历史的备份基本可以删除了

23、。 在/home/backup/svn/下建立一个 perl 脚本:deletDir.pl (留意,删除 svn 备份库可不像删除一般文件那么简洁) 脚本代码请参看我的另一个帖子:5)修改/etc/crontab 文件 在该文件中指定每晚 21 点执行backup.sh脚本。 3、svnsync 备份-运用 svnsync 备份很简洁,步骤如下:1)在备份机上创建一个空库:svnadmin create Project12)更改该库的钩子脚本 pre-revprop-change(因为 svnsync 要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本):cd SMP/ho

24、oks;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/Svn 版本管理备份策略规划语法是:svnsync init 你刚创建的库 url 源库 url留意本地 url 是三个斜杠的:/4)起先备份(同步):svnsync sync file:/home/ba

25、ckup/svn/svnsync/Project15)建立同步脚本备份完毕后,建立钩子脚本进行同步。在源库/hooks/下建立/修改 post-commit 脚本,在其中增加一行,内容如下: /usr/bin/svnsync sync-non-interactive file:/home/backup/svn/svnsync/Project1你可能已经留意到上面的备份好像都是本地备份,不是异地备份。事实上,我是通过将远程的备份机 mount(请参阅 mount 吩咐)到 svn 服务器上来实现的,逻辑上看起来是本地备份,物理上实际是异地备份。本文来自Svn中文网转发请保留本站地址:93 its

26、 not very safe.Most people like to save their work to the repository frequently,should something bad accidentally happen to their working copy. Second,its not very flexible.If you do your work on different computers (perhaps you have a working copy of /calc/trunk on two different machines),youll nee

27、d to manually copy your changes back and forth or just do all the work on a single computer.By that same token,its difficult to share your changes in progress with anyone else.A common software development best practiceis to allow your peers to review your work as you go.If nobody sees your intermed

28、iate commits,you lose potential feedback and may end up going down the wrong path for weeks before another person on your team notices. Finally,when youre finished with all your changes,you might find it very difficult to remerge your final work with the rest of the companys main body of code.Sally (or others)may have made many other changes in the repository that are difficult to incorporate into your working copy especially if you run svn update after weeks of isolation.

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

当前位置:首页 > 应用文书 > 工作计划

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

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