您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > SVN增量备份实际方案和脚本
SVN增量备份实际方案和脚本该程序为SVN的增量备份脚本,在实际中使用。一、整体思路:1、设置系统需要处理的环境变量,如SVN的安装目录、版本库目录、备份的目标目录(BACKUP_SVN_ROOT)等;2、将系统备份初始修订号(每次提交时,系统自己保存的一个序号)储存在文件夹SVN_LOG_BEGIN下(参数可配置)3、将本次备份结束修订号储存在文件夹SVN_LOG_END(参数可配置)4、如果备份目标目录不存在,则创建之;5、如果系统用项目列表备份目录不存在(保存所备份项目名称),为初次运行任务,则创建之;6、如果系统用起始修订号备份目录(保存所有项目各起始修订号)不存在,为初次运行任务,则创建之;7、如果系统用结束修订号备份目录(保存所有项目各结束修订号)不存在,为初次运行任务,则创建之;8、删除原来的项目列表;9、按备份时间的年月日生成备份目标目录的名称;如已经存在该名称的目录(已经备份),则跳转到checkBack,提示清空目录再备份;10、在备份目标文件夹下建立本次备份的目标目录、项目列表保存目录、修订号起/始保存目录,用于将系统的对应目录转移到本此备份目录下,记录此次备份的情况;11、拷贝MD5校验程序到目标盘,以备还原时校验用;-------------开始备份SVN代码库__增量方式------------------12、循环调用'dir/AD/B',判断为文件夹(项目名称),则调用子程序work_dump_incremental.bat项目名称,以对各个项目逐个增量备份;13、子程序调用结束---各项目备份完毕,则将源项目路径根目录下的所有文件备份---包含认证文件、日志等;14、退出系统。导出脚本主程序及说明:echo2011-01-31copyrightV2.0(V1.0为热点拷贝和整项目DUMP方式)rem本脚本工具为增量备份SVN版本用总脚本,与之配套的脚本为svn_load_in.bat、work_load_in.batechooffremSubversion的安装目录setSVN_HOME=C:\ProgramFiles\VisualSVNServerrem设置SVN代码库所在的驱动器盘符----------------------------需要修改setSVN_DRV=D:rem所有版本库的父目录---------------------------------------需要修改setSVN_ROOT=D:\Repositoriesrem设置SVN代码库所在的目录setSVN_DIR=Repositoriesrem设置当前已经备份项目列表保存目录setSVN_LOG=svn_logrem设置当前备份项目的起始修订号保存目录,其下存以对应的项目名称命名的文件,文件中保存起始修订号setSVN_LOG_BEGIN=svn_log_beginrem设置当前备份项目的结束修订号保存目录,其下存以对应的项目名称命名的文件,文件中保存结束修订号setSVN_LOG_END=svn_log_endrem备份的盘符-----------------------------------------------需要修改setBACKUP_SVN_DRV=F:rem备份的目录-----------------------------------------------需要修改setBACKUP_SVN_ROOT=F:\backupsvnsetBACKUP_SVN_FOLDER=\backupsvnrem如果备份目录不存在,则创建之-----数据源部分ifnotexist%BACKUP_SVN_ROOT%md%BACKUP_SVN_ROOT%rem如果项目列表备份目录不存在,则创建之ifnotexist%SVN_DRV%\%SVN_LOG%md%SVN_DRV%\%SVN_LOG%rem如果修起始订号备份目录不存在,则创建之ifnotexist%SVN_DRV%\%SVN_LOG_BEGIN%md%SVN_DRV%\%SVN_LOG_BEGIN%rem如果结束修订号备份目录不存在,则创建之ifnotexist%SVN_DRV%\%SVN_LOG_END%md%SVN_DRV%\%SVN_LOG_END%rem删除原来的项目列表del/Q%SVN_DRV%\%SVN_LOG%\*.*setBACKUP_DATE=%date:~0,10%echo%BACKUP_DATE%setBACKUP_PATH=%BACKUP_SVN_FOLDER%\%BACKUP_DATE%_dumpsetBACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%BACKUP_DATE%_dumpifexist%BACKUP_DIRECTORY%gotocheckBackrem创建-----目标数据部分echo-------------建立备份目录%BACKUP_DIRECTORY%------------------%SVN_ROOT%/backup.logmkdir%BACKUP_DIRECTORY%mkdir%BACKUP_DIRECTORY%\%SVN_LOG%mkdir%BACKUP_DIRECTORY%\%SVN_LOG_BEGIN%mkdir%BACKUP_DIRECTORY%\%SVN_LOG_END%copy/Y%SVN_HOME%\bin\md5sum.exe%BACKUP_DIRECTORY%\md5sum.exe%SVN_DRV%cd\cd%SVN_DIR%echo-------------开始备份SVN代码库__增量方式------------------%SVN_ROOT%/backup.logrem验证目录是否为版本库,如果是则取出名称备份[不用校验,对不设主干、标签、分支的资料性项目也做备份]remfor/r%SVN_ROOT%%%Iin(.)do@ifexist%%I\conf\svnserve.conf%SVN_ROOT%\simpleBackup.bat%%~fI%%~nIrem列举文件夹(项目名),进入备份具体项目子流程for/F%%din('dir/AD/B')docall%SVN_ROOT%\work_dump_incremental.bat%%dgotoend:checkBackecho备份目录%BACKUP_DIRECTORY%已经存在,请清空。gotoexit:endcopy/Y%SVN_ROOT%\*.*%BACKUP_DIRECTORY%\*.*echo------------备份SVN代码库完毕------------------------%SVN_ROOT%/backup.logsetBACKUP_DATE=%SVN_DRV%cd\@echoon:exit附件1:导出脚本主程序:二、导出脚本各项目具体执行程序设计思路:1、如输入参数为空,则退出本个项目备份(主要为调试用)2、将本次备份的项目名称追加到%SVN_DRV%\%SVN_LOG%\Proj_lst.txt列表中;3、设置BAK_TO为需要备份生成的文件名(含路径);设置本次备份的默认最小、最大修订号均为零SETLOWER=0,SETUPPER=04、如为初次备份(无%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt),则到MK_END_LOG处新建5、否则,将上次备份的结束修订号COPY到本次准备备份的起始修订号文件夹(使用时加1);6、:MK_END_LOG:调用svnlook.exe,将当前系统的修订号取出;7、如果当前的修订号为0,则不需备份8、如为初次备份,则用初始化的LOWER=0;否则,取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证);9、:BAKUP备份项目的起始修订号;10、调用svnadmin.exe进行增量备份;11、调用bzip2进行压缩;12、保存MD5校验,以备检查备份文件是否被非法修改;13、记录备份日志、时间戳;14、每次更新已经备份的项目列表;15、结束echo2010-05-27copyrightV2.0(V1.0为热点拷贝和整项目DUMP方式)rem本脚本工具为增量备份SVN版本用子执行脚本,与之配套的脚本为svn_load_in.bat、work_load_incremental.batecho进入单项目备份setSVN_PROJECT=%1rem参数不正确,结束if%1==gotono_argsrem将项目名称添加到项目列表,以备还原时需要echo%SVN_PROJECT%%SVN_DRV%\%SVN_LOG%\Proj_lst.txtfor/Ftokens=1,2,3delims=-%%1in('Date/T')dosetDATE=%%1-%%2-%%3for/Ftokens=1,2delims=:%%1in('time/T')dosetTIME=%%1:%%2remBAK_TO为需要备份生成的文件名,包含项目名和日期、时间,如需要自动导入时,则不能要日期时间等标识(@符号后面的去掉)【重要】remsetBAK_TO=%BACKUP_DIRECTORY%\%SVN_PROJECT%@%DATE%@%TIME%setBAK_TO=%BACKUP_DIRECTORY%\%SVN_PROJECT%SETLOWER=0SETUPPER=0rem------------------------------------------------------------------------------------rem如为初次备份,则用初始化的LOWER=0,ifnotexist%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txtgoto:MK_END_LOGrem将上次保存的结束修订号,拷到本次作为起始终结号(使用时需要+1)copy/Y%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt%SVN_DRV%\%SVN_LOG_BEGIN%\%SVN_PROJECT%.txtdel/Q%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt:MK_END_LOGrem取当前的修订号为备份终结号--之后,将其存于%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt@%SVN_HOME%\bin\svnlook.exeyoungest%SVN_ROOT%\%SVN_PROJECT%%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt@FOR/f%%DIN(%SVN_DRV%\%SVN_LOG_END%\%SVN_PROJECT%.txt)DOsetUPPER=%%Drem如果当前的修订号为0,则不需备份if%UPPER%==0GOTO:N_EXITrem如为初次备份,则用初始化的LOWER=0ifnotexist%SVN_DRV%\%SVN_LOG_BEGIN%\%SVN_PROJECT%.txtGOTO:BAKUPrem取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)@FOR/f%%CIN(%SVN_DRV%\%SVN_LOG_BEGIN%\%SVN_PROJECT%.txt)DO@setLOWER=%%C@set/ALOWER=%LOWER%+1rem不需要备份,则跳转结束IF%LOWER%gtr%UPPER%GOTO:N_EXIT:BAKUPecho%SVN_PROJECT%%SVN_DRV%\%SVN_LOG%\Proj_bk.txtecho%DATE%%TIME%开始将%SVN_ROOT%\%SVN_PROJECT%,从[%LOWER%]到[%UPPER%]备份到%BAK_TO%...%SVN_ROOT%/backup.l
本文标题:SVN增量备份实际方案和脚本
链接地址:https://www.777doc.com/doc-2850904 .html