绝对有效,亲测无问题
一、备份策略
备份频度:每周六进行一次全量备份。每天进行增量备份(未做);
备份地点:备份存储路径为另外一台机器的文件夹下面(异地备份),备份目录以日期命名
D:\svnserver_all_backup\2017_05_13_23\
备份保留时期:保留10天到15天,超过15天的进行删除。
备份时间:每晚凌晨1点开始,定时备份
备份检查:每月末进行svnadmin load恢复试验。
二、完全备份
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。
一般情况下有许多版本库,如果通过需要为每个版本库写这样一条语句备份比较麻烦,为此写了下面的脚本,实现备份一个目录下的所有版本库。
共包含两个文件hotcopy.bat和最终执行文件fullbackup.bat,放在仓库的父目录下如G:\Repositories下,具体脚本如下:
1) hotcopy.bat
@echo 正在备份版本库%1......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!
备注:svnadminhotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。
2) fullbackup.bat(最终执行文件)
因为个人需要采用是异地备份,因此需要提前设置,具体情况如下:
1、在B服务器上先建立一个存放备份的文件夹,如13svnserver_all_backup;
2、将该文件夹(13svnserver_all_backup)设置为共享,并且将权限全部开放;
? 在A服务器上操作:
3、在A服务器上某盘先建立一个快捷方式,然后在当中输入B的IP地址与备份的文件夹(如:\\172.17.x.x\13svnserver_all_backup)。会弹出需要输入5服务器的密码的提示框,输入信息后,勾选“记住密码”
4、将备份所用的脚本进行相关修改,并当中备份的目录地址写上B服务器上保存的地址,如下图当中红字部份。
注意1:windows下一定使用\,否则会报出错误“svnadmin: E720003: Can't createdirectory 'G:\svnrootback\2014-08-13\project':”系统找不到指定的路径。
注意2:在使用的时候,只需要修改fullbackup.bat开头的三个路径,根据以上的配置,你只需要运行fullbackup.bat,就可以把“SVN_ROOT”下的版本库都备份到“BACKUP_SVN_ROOT”里,并且存放在备份所在的目录里,例如“D:\13svnserver_all_backup \2014-08-14”。
@echo off
rem Subversion的安装目录
set SVN_HOME="C:\Program Files\VisualSVN Server"
rem 所有版本库的父目录
set SVN_ROOT=F:\Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=\\172.17.x.x\13svnserver_all_backup
rem set BACKUP_SVN_ROOT=\\172.17.x.x\13svnserver_all_backup
set datevar=%date:~0,4%_%date:~5,2%_%date:~8,2%
set timevar=%time:~0,2%
if /i %timevar% LSS 10 (
set timevar=0%time:~1,1%
)
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%datevar%_%timevar%
@echo 要保存的路径为:%BACKUP_DIRECTORY%
if exist %BACKUP_DIRECTORY% goto checkBack
echo %BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\hotcopy.bat "%%~fI" %%~nI
goto end
:checkBack
@echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end
三、增量备份(暂时没做)
主要包含三个文件:dump.bat、最终执行文件svndump.bat和配置库名称配置projectlist.conf;
备份步骤:1、备份脚本svndump.bat通过读取projectlist.conf(存放要备份的库的名称)的数据来依次对库进行备份(全部或增量,此地方主要用于增量备份)
2、增量备份会往备份日志中增加记录
注意:需要把dump.bat,log.conf,projectlist.conf存放在备份文件存放的目录(如本例的:z: \\SVN_backup_AF.12.03)
1)dump.bat
---------------------------------------------------------------------------------------------
@ECHO OFF
rem 调用格式:dump 项目库名
if "%1"=="" goto no_args
set PROJECT=%1
if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%
cd %RAR_STORE%\%PROJECT%
SET LOWER=0
SET UPPER=0
@echo 项目库%PROJECT%2...>> %Log_PATH%\%PROJECT%_log.txt
%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP
@echo 项目库%PROJECT%3...>> %Log_PATH%\%PROJECT%_log.txt
@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D
if %UPPER%==0 GOTO :N_EXIT
if not exist %Log_PATH%\%PROJECT%_last_revision.txt GOTO :BAKUP
rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
@FOR /f %%C IN (%Log_PATH%\%PROJECT%_last_revision.txt) DO @setLOWER=%%C
@set /A LOWER=%LOWER%+1
rem 不需要备份,则跳转结束
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
:BAKUP
SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head--incremental >%FILENAME%.dmp
rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %
rem 准备写备份日志信息
IF %LOWER% gtr 0 GOTO :WRITENOTE
@ECHO ------2-----%date% >> %Log_PATH%\%PROJECT%_log.txt
@echo -- 3-------添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt
GOTO :COMPLETE
:WRITENOTE
@ECHO %date% >> %Log_PATH%\%PROJECT%_log.txt
@echo -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt
:COMPLETE
rem 下面一行用于拷贝备份文件到映射的驱动器上
rem copy %PROJECT%.rar %RAR_STORE%\%PROJECT%\
move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\
del %Log_PATH%\A.TMP
@echo %UPPER% > %Log_PATH%\%PROJECT%_last_revision.txt
:N_EXIT
@echo 项目库%PROJECT%处理结束...>> %Log_PATH%\%PROJECT%_log.txt
@CD..
@exit /B
:no_args
@ECHO ON
@echo "正确调用方法: dump 项目库名"
--------------------------------------------------------------
2)svndump.bat
echo off
remSubversion的安装目录及执行文件
setSVN_HOME="D:\Program Files (x86)\VisualSVN Server"
setSVN_ADMIN=%SVN_HOME%\bin\svnadmin.exe
setSVN_LOOK=%SVN_HOME%\bin\svnlook.exe
rem 配置库仓库根目录
setSVN_REPOROOT=G:\Repositories
rem 压缩命令
setRAR_CMD="D:\Program Files\WinRAR\WinRAR.exe"
rem 增量备份文件存放路径
setRAR_STORE="G:\svnincrementW"
rem 日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录
setLog_PATH=G:\svnaddback
@echo 项目库%PROJECT%处理1...>>%Log_PATH%\%PROJECT%_log.txt
rem 读取项目库列表文件,并忽略其中;开头的行
FOR /f "eol=;" %%C IN (projectlist.conf) DO callG:\svnaddscript\dump.bat %%C
3)projectlist.conf
;**************************************************
;01. project1开发库
; 更新频率: 高
;**************************************************
project
;**************************************************
;02. 此处可写注释信息
;**************************************************
test
;**************************************************
;02. 此处可写注释信息
;**************************************************
Yiliaogm
四、定时备份
Windows 20003 server版:
在【控制面板】中选择【任务计划】,按照步骤一步步进行,建立一个定时任务计划。
五、备份恢复检查
(1)全量备份还原
直接把“D:\13svnserver_all_backup\2014-08-14 \XX项目资料库” 复制到“F:\ Repositories\XX项目资料库”;
(2) svnadmin load 要恢复的版本库路径及名称 < 导出的命名
示例:svnadmin load D:\svn\fxq_fxcjg < F:\svnbackup\delta\fxq_fxcjg.dump
svnadmin hotcopy e:\svn\repository e:\svnbackup
以上的操作已经OK了,现在需要做的是将完全备份和增量备份结合起来,也就是在完全备份后清理增量备份的结果,使之只保存完全备份后的结果。
当果真出现版本库的故障,就要求我们实现版本库的恢复操作了,这是用要使用svnadmin load命令,同时也需要上次的完全备份例如要把上次完全备份backuprepo,和之后的增量备份dumpfile:
原创文章如转载,请注明出处“
伊人博客”