Svn在Windows下实现自动全量增量备份和异地备份汇总.docx
《Svn在Windows下实现自动全量增量备份和异地备份汇总.docx》由会员分享,可在线阅读,更多相关《Svn在Windows下实现自动全量增量备份和异地备份汇总.docx(18页珍藏版)》请在冰豆网上搜索。
Svn在Windows下实现自动全量增量备份和异地备份汇总
SVN在Windows下实现自动全量增量备份和异地备份
1SVN备份介绍
1.1SVN备份内容
SVN在Windows下的自动备份实现,包括:
1)SVN目录的全备份(1周或1个月备份1次,由windows计划来调度执行);
2)SVN增量备份(每日备份1次,由windows计划来调度执行);
1.2SVN备份流程
上述2类备份分别进行的流程如下:
1)通过windows定时任务功能,调度进行备份、压缩、FTP上传功能的bat文件;
2)将自动备份成按每日日期.dmp备份到SVN本机的其他磁盘空间中,分全备份和增量备份;
3)启动ftp上传命令,将备份的rar包立即上传在异地服务器上。
异地服务器需提前架好ftp服务器并建立好相关上传目录,建议使用用FileZilla_Server、serverU或者简单ftp软件进行搭建。
4)整个上传过程,详细记录备份、压缩、FTP上传各步骤详细日志,随时可以查阅每次备份记录的详细情况。
1.3SVN还原功能
可以进行还原所有版本库
2SVN备份BAT设计
1.4全备份BAT
1)SVN的全备份,AllBackUp.bat
:
Begin
@echooff
setlocalenabledelayedexpansion
echo正在准备备份所有版本库……
echo.
:
:
设置SVN命令目录
setSVN_CMD="E:
\VisualSVNServer\bin"
:
:
设置所有版本库根目录
setREPOS_ROOT=D:
\Repositories
:
:
设置所有版本库备份根目录
setREPOS_BACKUP_ROOT=F:
\[SvnBackup]\全备份
ifnotexist%REPOS_BACKUP_ROOT%mkdir%REPOS_BACKUP_ROOT%
:
:
设置所有版本库备份目录
setBACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:
~0,10%.dmp
setBACKUP_DIRECTORY=%BACKUP_DIRECTORY:
/=-%
remifexist%BACKUP_DIRECTORY%gotoError2
remmkdir%BACKUP_DIRECTORY%
ifnotexist%BACKUP_DIRECTORY%mkdir%BACKUP_DIRECTORY%
:
:
设置用户权限信息备份目录
setREPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfo
ifnotexist%REPOS_USER_INFO_DIRECTORY%mkdir%REPOS_USER_INFO_DIRECTORY%
:
:
备份所有版本库
:
:
i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号
echo===================%date%%time:
~0,8%:
执行全部全量备份版本库.===================>>%REPOS_BACKUP_ROOT%\BackUp.log
echo备份的版本库版本信息如下:
>>%REPOS_BACKUP_ROOT%\BackUp.log
:
:
读取版本库根目录下每个文件夹,并判断其是否是一个版本库
for/r%REPOS_ROOT%%%iin(.)doifexist%%i\conf\svnserve.conf(
:
:
将当前版本库的最新版本信息写入tmp文件
%SVN_CMD%\svnlookyoungest%%~fi>%%~ni_last_revision.tmp
:
:
取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理
for/f%%jin(%%~ni_last_revision.tmp)doif%%jgtr0(
echo.
echo开始备份版本库%%~ni……
:
:
全量备份版本库
%SVN_CMD%\svnadmindump--deltas%%~fi>%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp
echo%time:
~0,8%%%~ni:
0-%%j>>%REPOS_BACKUP_ROOT%\BackUp.log
echo版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!
)
:
:
删除临时文件
del%%~ni_last_revision.tmp
)
echo.
echo开始备份用户权限信息……
xcopy/y%REPOS_ROOT%\authz%REPOS_USER_INFO_DIRECTORY%
xcopy/y%REPOS_ROOT%\authz-windows%REPOS_USER_INFO_DIRECTORY%
xcopy/y%REPOS_ROOT%\htpasswd%REPOS_USER_INFO_DIRECTORY%
echo---------------------------------->>%REPOS_BACKUP_ROOT%\BackUp.log
echo.
echo用户权限信息备份成功!
echo%time:
~0,8%用户权限信息备份成功!
>>%REPOS_BACKUP_ROOT%\BackUp.log
echo.
echo全部版本库备份成功!
echo%time:
~0,8%全部版本库备份成功!
>>%REPOS_BACKUP_ROOT%\BackUp.log
AllBackupByFtp
gotoend
:
Error2
echo.
echo备份目录已经存在,请确认后删除该目录,重新运行程序!
gotoEnd
:
End
echo.
echo程序执行结束!
2)SVN的全备份进行FTP上传,AllBackupByFtp.bat
@echooff
REM======设置区Start================================
setftpUser=svn
setftpPass=svnbackup
setftpIP=192.168.1.22
setftpPort=2016
REM指定从FTP下载下来的文件存放到本机哪个目录
setftpFolder=/全备份
REM本地需要备份的根目录
setSvnBackupRoot=F:
\[SvnBackup]\全备份
REM本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)
setSvnBackupFolder=%SvnBackupRoot%\%date:
~0,10%.dmp
REM需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)
setrarToFilePath=%SvnBackupFolder%.rar
REMRAR执行文件的路径
setrarExePath="C:
\ProgramFiles\WinRAR\"
REMRAR执行文件的路径
setbakupLogFilePath=%SvnBackupRoot%\BackUp.log
REMFTP命令执行文件缓存
setftpFile=%cd%\TempFTP.txt
>"%ftpFile%"(
echo,open%ftpIP%%ftpPort%
echo,%ftpUser%
echo,%ftpPass%
echocd"%ftpFolder%"
echopromptoff
echobin
echoput%rarToFilePath%
echoput%bakupLogFilePath%
echobye
)
setPath=%Path%;%rarExePath%
setlogFilePath=%SvnBackupRoot%\ftpUp.log
REM======设置区End================================
echo===================%date%执行异地版本库全量备份开始=================>>%logFilePath%
ifnotexist%SvnBackupFolder%gotoError1
echo%time:
~0,8%备份压缩开始...>>%logFilePath%
WinRAR.exea-ep1-k-r-s-ibck%rarToFilePath%%SvnBackupFolder%
echo%time:
~0,8%备份压缩成功,压缩的文件路径为:
%rarToFilePath%>>%logFilePath%
echo%time:
~0,8%备份压缩继续上传FTP开始...>>%logFilePath%
ftp-v-i-s:
"%ftpFile%"
echo%time:
~0,8%上传FTP成功,上传FTP目录为:
%ftpFolder%>>%logFilePath%
del/q/s/f%rarToFilePath%
echo.>>%logFilePath%
gotoend
:
Error1
echo.
echo%time:
~0,8%提示:
需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!
>>%logFilePath%
echo%time:
~0,8%备份失败!
>>%logFilePath%
echo.>>%logFilePath%
echo提示:
echo需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!
:
End
echo.
echo程序执行结束!
1.5增量备份BAT
1)SVN数据库的增量备份,IncreBackUp.bat
:
Begin
@echooff
setlocalenabledelayedexpansion
echo正在准备备份所有版本库……
echo.
:
:
设置SVN命令目录
setSVN_CMD="E:
\VisualSVNServer\bin"
:
:
设置所有版本库根目录
setREPOS_ROOT=D:
\Repositories
:
:
设置所有版本库备份根目录
setREPOS_BACKUP_ROOT=F:
\[SvnBackup]\增量备份
ifnotexist%REPOS_BACKUP_ROOT%mkdir%REPOS_BACKUP_ROOT%
:
:
获取LastRevisions目录
setREPOS_LAST_REVERSION_DIRECTORY=%REPOS_BACKUP_ROOT%\LastRevisions
remifnotexist%REPOS_LAST_REVERSION_DIRECTORY%gotoError1
ifnotexist%REPOS_LAST_REVERSION_DIRECTORY%mkdir%REPOS_LAST_REVERSION_DIRECTORY%
:
:
设置所有版本库备份目录
setBACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:
~0,10%.dmp
setBACKUP_DIRECTORY=%BACKUP_DIRECTORY:
/=-%
remifexist%BACKUP_DIRECTORY%gotoError2
remmkdir%BACKUP_DIRECTORY%
ifnotexist%BACKUP_DIRECTORY%mkdir%BACKUP_DIRECTORY%
:
:
设置用户权限信息备份目录
setREPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfo
ifnotexist%REPOS_USER_INFO_DIRECTORY%mkdir%REPOS_USER_INFO_DIRECTORY%
:
:
设置LastRevisions备份目录
setREPOS_LAST_REVERSION_BACKUP_DIRECTORY=%BACKUP_DIRECTORY%\LastRevisions
ifnotexist%REPOS_LAST_REVERSION_BACKUP_DIRECTORY%mkdir%REPOS_LAST_REVERSION_BACKUP_DIRECTORY%
:
:
备份所有版本库
:
:
i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号
echo===================%date%%time:
~0,8%:
执行全部版本库备份.===================>>%REPOS_BACKUP_ROOT%\BackUp.log
echo备份的版本库版本信息如下:
>>%REPOS_BACKUP_ROOT%\BackUp.log
:
:
读取版本库根目录下每个文件夹,并判断其是否是一个版本库
for/r%REPOS_ROOT%%%iin(.)doifexist%%i\conf\svnserve.conf(
:
:
将当前版本库的最新版本信息写入tmp文件
%SVN_CMD%\svnlookyoungest%%~fi>%%~ni_last_revision.tmp
:
:
取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理
for/f%%jin(%%~ni_last_revision.tmp)doif%%jgtr0(
:
:
判断以前是否存在该版本库的版本信息,存在说明以前备份过,需要基于其进行备份;否则对该版本库进行全新备份
ifexist%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt(
:
:
读取该版本库上次备份时保存的版本信息,如果小于当前版本信息则进行处理
for/f%%kin(%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt)doif%%klss%%j(
echo.
echo开始备份版本库%%~ni……
:
:
取得该版本库本次备份的起始版本号
setversion=%%k
set/aversion=!
version!
+1
:
:
增量备份版本库
%SVN_CMD%\svnadmindump--deltas%%~fi--revision!
version!
:
head--incremental>%BACKUP_DIRECTORY%\%%~ni-!
version!
-%%j.dmp
echo%%~ni:
!
version!
-%%j>>%REPOS_BACKUP_ROOT%\BackUp.log
echo版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-!
version!
-%%j.dmp!
)
)else(
echo.
echo开始备份版本库%%~ni……
:
:
全量备份版本库
%SVN_CMD%\svnadmindump--deltas%%~fi>%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp
echo%%~ni:
0-%%j>>%REPOS_BACKUP_ROOT%\BackUp.log
echo版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!
)
:
:
将本次版本库备份时的最新版本信息写入文件保存
echo%%j>%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt
echo%%j>%REPOS_LAST_REVERSION_BACKUP_DIRECTORY%\%%~ni_last_revision.txt
)
:
:
删除临时文件
del%%~ni_last_revision.tmp
)
echo.
echo开始备份用户权限信息……
xcopy/y%REPOS_ROOT%\authz%REPOS_USER_INFO_DIRECTORY%
xcopy/y%REPOS_ROOT%\authz-windows%REPOS_USER_INFO_DIRECTORY%
xcopy/y%REPOS_ROOT%\htpasswd%REPOS_USER_INFO_DIRECTORY%
echo.
echo用户权限信息备份成功!
echo.
echo全部版本库备份成功!
IncreBackupByFtp
gotoend
:
Error1
echo.
echo提示:
echo上次备份保存的%REPOS_LAST_REVERSION_DIRECTORY%文件夹不存在,请确认后从上次备份中拷贝LastReversions到%REPOS_BACKUP_ROOT%目录,重新运行程序;
echo或者,不基于上次备份重新执行备份!
echo重新备份?
(Y/N)
set/pinput=
if%input%==Y(
mkdir%REPOS_LAST_REVERSION_DIRECTORY%
gotoBegin
)else(
gotoEnd
)
:
Error2
echo.
echo备份目录已经存在,请确认后删除该目录,重新运行程序!
gotoEnd
:
End
echo.
echo程序执行结束!
2)SVN数据的增量备份的FTP上传,IncreBackupByFtp.bat
@echooff
REM======设置区Start================================
setftpUser=svn
setftpPass=svnbackup
setftpIP=192.168.1.22
setftpPort=2016
REM指定从FTP下载下来的文件存放到本机哪个目录
setftpFolder=/增量备份
REM本地需要备份的根目录
setSvnBackupRoot=F:
\[SvnBackup]\增量备份
REM本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)
setSvnBackupFolder=%SvnBackupRoot%\%date:
~0,10%.dmp
REM需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)
setrarToFilePath=%SvnBackupFolder%.rar
REMRAR执行文件的路径
setrarExePath="C:
\ProgramFiles\WinRAR\"
REMRAR执行文件的路径
setbakupLogFilePath=%SvnBackupRoot%\BackUp.log
REMFTP命令执行文件缓存
setftpFile=%cd%\TempFTP.txt
>"%ftpFile%"(
echo,open%ftpIP%%ftpPort%
echo,%ftpUser%
echo,%ftpPass%
echocd"%ftpFolder%"
echopromptoff
echobin
echoput%rarToFilePath%
echoput%bakupLogFilePath%
echobye
)
setPath=%Path%;%rarExePath%
setlogFilePath=%SvnBackupRoot%\ftpUp.log
REM======设置区End================================
echo===================%date%执行异地版本库增量备份开始.===================>>%logFilePath%
ifnotexist%SvnBackupFolder%gotoError1
echo%time:
~0,8%备份压缩开始...>>%logFilePath%
WinRAR.exea-ep1-k-r-s-ibck%rarToFilePath%%SvnBackupFolder%
echo%time:
~0,8%备份压缩成功,压缩的文件路径为:
%rarToFilePath%>>%logFilePath%
echo%time:
~0,8%备份压缩继续上传FTP开始...>>%logFilePath%
ftp-v-i-s:
"%ftpFile%"
echo%time:
~0,8%上传FTP成功,上传FTP目录为:
%ftpFolder%>>%logFilePath%
del/q/s/f%rarToFilePath%
echo.>>%logFilePath%
gotoend
:
Error1
echo.
echo%time:
~0,8%提示:
需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!
>>%logFilePath%
echo%time:
~0,8%备份失败!
>>%logFilePath%
echo.>>%logFilePath%
echo提示:
echo需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!
:
End
echo.
echo程序执行结束!
3SVN还原BAT设计
SVN的还原LoadBackUp.bat
@echooff
echo正在准备还原所有版本库……
echo.
:
:
设置SVN命令目录
setSVN_CMD="E:
\VisualSVNServer\bin"
:
:
设置所有版本库根目录
setREPOS_ROOT=D:
\Repositories
:
:
设置所有版本库备份根目录
setREPOS_BACKUP_ROOT=F:
\[SvnBackup]\增量备份
ifnotexist%REPOS_BACKUP_ROOT%gotoError
:
:
还原所有版本库
echo===================%date%%time:
~0,8%:
执行版本库执行还原操作===================>>%REPOS_BACKUP_ROOT%\SvnLoad.log
echo还原的版本库版本信息如下:
>>%REPOS_BACKUP_ROOT%\SvnLoad.log
:
:
将所有保存版本库备份的文件夹名写入tmp
dir