技术分享
SVN备份方案
2020-10-20
1. 备份恢复机制
1.1. 备份策略
出于资源安全性考虑,为了防止由于配置管理服务器硬件或者软件故障,而导致SVN配置库资源丢失且无法恢复的情况发生,需要对配置库资源进行定期的备份。这里采用的备份策略为“定期大备份,时时小备份”,即定期对配置库根目录下的所有配置库资源进行整体备份,而对各配置库而言,如果库内资源发生了有效修改(即对资源进行了修改并成功进行了提交操作),则仅对发生修改的信息内容进行备份。下面分别对“定期大备份”和“时时小备份”的实现进行描述。
1.2. “定期大备份”的实现步骤
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上就可以了.但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此使用提供的“svnadmin hotcopy”的命令,可以防止这种问题。
例如:SVN版本库的父目录为C:\svnRepositories\
现在将C:\svnRepositories\所有SVN版本库备份到C:\svnRe_back目录下,只需要运行:
Backup.bat
1.3. 实现脚本
1. Backup.bat内容如下
@echo off
rem Subversion的安装目录
set SVN_HOME="C:\soft\VisualSVN Server"
rem 所有版本库的父目录
set SVN_ROOT=C:\svnRepositories\
rem 备份的目录
set BACKUP_SVN_ROOT=C:\svnRe_back
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%
if exist %BACKUP_DIRECTORY% goto checkBack
:startBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%BACKUP_SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\sim_bk.bat "%%~fI" %%~nI
goto end
:checkBack
rd /s /q %BACKUP_DIRECTORY%
goto startBack
end
2. Backup.bat需要调用到sim_bk.bat脚本, sim_bk.bat内容如下:
@echo 正在备份版本库%1.......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2
pause
goto clean
:clean
del /Q %BACKUP_SVN_ROOT%\ModifiedBackup\*.dump
del /Q %BACKUP_SVN_ROOT%\ModifiedBackup\*.log
goto end
:end
3. 将编写好的Backup.bat和sim_bk.bat批处理文件放到配置库根目录下(这里是C:\svnRepositories\),测试程序能否成功执行,进入配置库根目录后双击文件Backup.bat,然后进入备份目录C:\svnRe_back查看配置库根目录下的所有配置库是否都得到了备份,备份日志是否输出正确,如果这两点都通过,则说明程序没有问题了
4. 将文件Backup.bat的执行放到系统任务计划中,使得备份能够定期自动的进行。点击“开始”->“控制面板”->“任务计划”->“添加计划任务”打开“任务计划向导”窗口,如图:
5.点击“下一步”按钮,进入下一窗口,点击“浏览”按钮,在弹出的“选择程序以进行计划窗口”选择配置库根目录下的Backup.bat文件进行添加
6.进入下一窗口后可以设置添加的该任务名称和任务执行的间隔时间类型,如果任务名称和程序名相同,设置每周执行一次备份。
7.点击“下一步”按钮,进入下一窗口设置任务执行的起始时间和起始日期,间隔时间类型选择不同的话,该窗口显示的内容也不同。这里设置每周五的13:00执行任务,如图:
8.点击“下一步”按钮,设置任务执行时需要的用户名和密码,用户名采用默认即可(默认为本机Administrator用户),密码输入本机Administrartor用户的登陆密码, 点击“下一步”按钮
9.下一窗口中点击“完成”按钮,就完成了此项计划任务的添加。这样系统就可以根据设置的计划任务信息,自动地进行配置库的备份操作了,因为“定期大备份”是对所有配置库最新版本的整体备份,所以每次进行时,会自动删除上次大备份之后的所有“时时小备份”。
1.4. “时时小备份”的实现步骤
1. 编写post-commit.bat批处理文件
echo off
set SVN_HOME=C:\soft\VisualSVN Server
set SVN_ROOT=C:\svnRepositories
set SVN_MODIFIED_BACKUP_ROOT=C:\svnRe_back\ModifiedBackup
set SVN_RE_NAME=SMS
set LOG_FILE=%SVN_MODIFIED_BACKUP_ROOT%\%SVN_RE_NAME%_modi_bk.log
echo 增量备份配置库版本 %2 所作的修改 >> %LOG_FILE%
cd %SVN_HOME%\bin
svnadmin dump %SVN_ROOT%\%SVN_RE_NAME% --incremental --revision %2 >> %SVN_MODIFIED_BACKUP_ROOT%\%SVN_RE_NAME%_modi.dump
goto end
:end
2. 其中SVN_RE_NAME为SVN版本库的名称,每个版本库下的hooks目录下都放这个post-commit.bat文件,把其中的SVN_RE_NAME改为相应的版本库名称,如版本库SMS则放在C:\svnRepositories\SMS\hooks下。
3. 测试“时时小备份”是否实现,在SVN的本地工作空间中,对实现了“时时小备份”的配置库的内容进行修改并提交,然后进入对应的备份目录中(此处为C:\svnRe_back\ModifiedBackup)检查是否输出了备份文件(此处为*_modi.dump)和备份日志(此处为*_modi_bk.log)。如果这两者都存在,说明备份成功了。
4. 对于配置库根目录下的每个配置库都应该进行上述操作,以使每个配置库都能实现“时时小备份”的功能。
1.5. 配置库备份的还原
由于配置库的备份有“定期大备份”和“时时小备份”两种方式,所以备份数据的还原策略也有如下两种:
1. 如果进行了“定期大备份”后,配置库根目录下的所有配置库内容均未发生过有效修改,(也就是“时时小备份”的备份目录下么有备份的数据文件),此时还原备份时间最近的大备份的备份数据文件即可,方法如下:点击“开始”->“所有程序”->“VisualSVN Server”启动VisualSVN Server 可视化控制面板,选中配置库根目录节点“Repositories”,点击鼠标右键选择“所有任务”->“Import Existing Repository…”,打开“Import Existing Repository”窗口,在该窗口的“Existing Repository Location”输入框输入要导入的配置库备份文件路径(或者点击“Browse”按钮进行浏览选择),然后在“New Repository Name”输入框输入新的配置库名称,点击“ok”按钮,完成备份数据库的还原。(每个配置库备份都要进行如上操作)2. 如果在进行“定期大备份”之前,配置库根目录下的某些配置库内容发生了有效修改,则先要将发生了内容修改的配置库的修改备份(小备份.dump)合并到最近的整体备份(大备份)中,合并方法是执行批处理文件Merger.bat,文件内容如下:
set SVN_HOME="C:\soft\VisualSVN Server"
set BACKUP_SVN_ROOT=C:\svnRe_back
set SVN_MODIFIED_BACKUP_ROOT=C:\svnRe_back\ModifiedBackup
set SVN_RE_NAME=SMS
cd %SVN_HOME%\bin
svnadmin load %BACKUP_SVN_ROOT%\20130408\%SVN_RE_NAME%<%SVN_MODIFIED_BACKUP_ROOT%\%SVN_RE_NAME%_modi.dump
pause
(注意:C:\svnRe_back\ModifiedBackup\SMS_modi.dump为配置库SMS“时时小备份”的累积备份MS_modi.dump所在路径,C:\svnRe_back \2013-06-04\SMS为配置库SMS最近一次“定期大备份”的备份库SMS所在路径)该脚本为不同版本库分别合并,请把脚本做相应改动后在执行,然后再按照还原策略1中的方法将各备份库进行还原。没有发生内容被有效修改的配置库,可直接按照还原策略1中的方法进行还原即可。- 标签:
-
技术分享