通过SVN镜像实现异地备份

一、目的
通过SVN再带工具svnsync来实现版本库的同步,实现异地开发中心版本库向北京中心的实时同步。

二、搭建SVN服务器
异地开发中心SVN服务器已经投入使用,需要在北京本地安装配置SVN 服务器。

以Linux操作系统为例:
1、下载SVN安装所需的软件
sqlite-amalgamation-3.6.13.tar.gz
apr-1.2.7.tar.gz
apr-util-1.2.7.tar.gz
httpd-2.2.13.tar.bz2
subversion-1.6.6.tar.bz2
2、检查SVN是否安装成功
在安装服务器上执行svnadmin命令,是否有相应。

3、在北京中心创建镜像库
#mkdir –p /data/svn //创建SVN库存储目录
#svnadmin create mir //创建镜像库,名字可根据实际调整
#netstat -nltp //如果有3690端口在监听,说明运行成功
4、修改配置文件
#cd /data/svn/mir/conf
将svnserve.conf去掉下面几行的注释:
anon-access = read
auth-access = write
password-db = passwd
注意: 上述三行前面不能留有空格,否则要出错。

5、修改密码文件
修改密码文件passwd,添加账号和密码
三、配置手工同步
1、修改同步文件
#cp pre-revprop-change.tmpl pre-revprop-change
#chmod +x pre-revprop-change
#chmod 777 pre-revprop-change
2、同步初始化
#svnsync init file:///data/svn/mir/ http://IP(远程地址)/svn/test_dir
此时北京mir库就是远程test_dir库的异地镜像拷贝
3、手工同步
#svnsync sync svn://IP(远程地址) --username username --password password //IP地址、username、password根据实际填写
通过手工同步方式比较麻烦,需要配置自动同步来实现实时自动同步
四、配置实时同步
自动实时同步需要在异地源SVN服务器上进行配置。

#cd /data/svn/test_dir/hooks
该目录有两个重要的文件:pre-commit.tmpl和post-commit.tmpl
pre-commit.tmpl:该文件是SVN每次提交之前都要执行的脚本;
post-commit.tmpl:该文件是SVN每次提交之后执行的脚本。

此时我们若将同步命令svnsync init file:///data/svn/mir/ http://IP(北京地址)/svn/test_dir写入上述2个脚本中的一个,显然就可以达到实时同步的目的了。

建议:最好将svnsync init file:///data/svn/mir/ http://IP(北京地
址)/svn/test_dir写入post-commit脚本里,而非pre-commit中,如果写入
pre-commit中,是每次提交前同步,显然镜像库会比源库一直会落后一个版本。

#cp post-commit.tmpl post-commit
#chmod +x post-commit
#chmod 777 post-commit
文件内容如下:
# cat post-commit
#!/bin/sh
# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit. Subversion runs # this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
# [1] REPOS-PATH (the path to this repository)
# [2] REV (the number of the revision just committed)
#
# The default working directory for the invocation is undefined, so
# the program should set one explicitly if it cares.
#
# Because the commit has already completed and cannot be undone, # the exit code of the hook program is ignored. The hook program # can use the 'svnlook' utility to help it examine the
# newly-committed tree.
#
# On a Unix system, the normal procedure is to have 'post-commit'
# invoke other programs to do the real work, though it may do the
# work itself too.
#
# Note that 'post-commit' must be executable by the user(s) who will # invoke it (typically the user httpd runs as), and that user must
# have filesystem-level permission to access the repository.
#
# On a Windows system, you should name the hook program
# 'post-commit.bat' or 'post-commit.exe',
# but the basic idea is the same.
#
# The hook program typically does not inherit the environment of
# its parent process. For example, a common problem is for the
# PATH environment variable to not be set to its usual value, so
# that subprograms fail to launch unless invoked via absolute path. # If you're having unexpected problems with a hook program, the
# culprit may be unusual (or missing) environment variables.
#
# Here is an example hook script, for a Unix /bin/sh interpreter.
# For more examples and pre-written hooks, see those in
# the Subversion repository at
# /repos/svn/trunk/tools/hook-scripts/ and
# /repos/svn/trunk/contrib/hook-scripts/
REPOS="$1"
REV="$2"
commit-email.pl "$REPOS" "$REV" commit-watchers@
log-commit.py --repository "$REPOS" --revision "$REV"
svnsync sync svn://ip(北京地址) --username username --password password 
根据以上配置以后,在远程主机上提交相应的文件版本更新后,北京中心也会同步更新。

五、总结
实际中开发的代码或者文件都可以提交到异地各中心的SVN上,而此时北京中心服务器上会形成一个和异地中心服务器上一模一样的镜像库,关键是这种同步是实时的。

所以不管异地中心服务器的SVN因为OS还是硬件故障挂掉,我们的北京中心服务器都可以立马接替它的工作。

SVN挂掉不影响团队工作,最主要的是做好了SVN的数据安全,更重要的是这种数据是实时的。

合集下载

SVN备份说明

SVN备份说明

团队里有一台SVN服务器,空间达到了几十个G,之前一直是隔段时间全盘拷贝备份,但是感觉太烦锁了,前段时间做了将这台服务器SVN的内容同步到另一台服务器上,挺好用的,总结一下,过程:操作系统:windows server 2008SVN:VisualSVN Server服务器:A表示原来代码服务器,B表示同步服务器备份服务器安装与A相同的VisualSVN Server版本1.在B上的环境变量(path)添加:C:\Program Files (x86)\VisualSVN Server\bin 添加这一步主要是为了下面用到SVN的命令不用输路径2.创建库,由于A服务器已有了很多库,所以做成了批处理文件的方式,文件内容如下:svnadmin create 盘符:/Repositories/项目库1svnadmin create 盘符:/Repositories/项目库2……项目库1、2的名称与A里的一样然后执行这个批处理文件,然后Repositories会出现很多库文件夹了……3..创建目标库的hooks文件,文件名为pre-revprop-change.bat,内容为空,先放在..\sysmodel 目录下4.将上步创建的文件拷到每个库文件夹下,跟上步一样,用批处理文件,文件内容:copy /y 本地盘符:\Repositories\sysmodel\pre-revprop-change.bat 盘符:\Repositories\项目库1\hookscopy /y 本地盘符:\Repositories\sysmodel\pre-revprop-change.bat 盘符:\Repositories\项目库2\hooks……然后执行这个批处理文件5.关联A与B里的库(初始化),还是用批处理:svnsync init file:///本地盘符:/Repositories/项目库1 项目库1的SVN路径(在A服务器上的)svnsync init file:///本地盘符:/Repositories/项目库2 项目库2的SVN路径(在A服务器上的)……然后执行这个批处理文件,这一步是将A的内容同步下来了,时间有点久……6.到上一步,B与A的内容一致了,但是如果A上某个库的项目库有更新怎么办呢?这时要用到windows里的任务计划功能了(1)新建同步库.bat的批处理,内容如下:svnsync sync file:///本地盘符:/Repositories/项目库1svnsync sync file:///本地盘符:/Repositories/项目库2……(2)新建任务计划,在计划里调用上一步建立的批处理文件。

SVNsync配置库同步说明

SVNsync配置库同步说明
2.通过svnmanager建立专用同步用户并赋予其目标库zjb_ln0001_bps的访问权限
3.进入目标库的存放目录,找到/hooks/pre-revprop-change.tmpl,将其tmpl后缀名删除(建议先备份该文件),并使用编辑器编辑其内容,将所有内容删除或者使用“#”注释掉,最后一行写如下命令:“exit 0”(不包含双引号),保存退出即可。
4.在命令行下输入命令:svnsync init http://192.168.10.250/svn/zjb_ln0001_bpshttp://192.168.10.249/svn/zjb_ln0001_bps,按照提示分别输入root命令和源库的svn用户和口令,开始进行初始化(进入命令行通过权限设置使用chmod 775 pre-revpro-change命令将该文件权限升级,否则在过程中会出现如下错误:)
3.需要svn命令行操作svn,需要管理员权限
方法
1.建立目标库B(zjb_ln0001_bps)
2.建立相同名称的用户,并赋予其对数据库的读写权限,建议使用管理员用户
3.设置hook内容,并赋予hook文件权限
4.初始化需要同Βιβλιοθήκη 的两个数据库5.执行正式同步
6.异常同步处理
步骤
1.机器PC-B上建立目标SVN库B,我们这里使用zjb_ln0001_bps项目为例,B机器上建立zjb_ln0001_bps数据库,与A机器上得原库同名:
鲁能软件
配置库同步说明
通过svnsync同步异地svn数据库
规范化-标准化-统一化-从我做起!
yxhink
2010-12-1
1.SVN从1.4开始包含了同步功能,通过使用svnsync功能可以使一个数据库与另一地点的数据库同步内容,可以起到热备和回收资源的功能。

Svn在Windows下实现自动全量增量备份和异地备份汇总

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.1全备份BAT1)SVN的全备份,AllBackUp.bat:Begin@echo offsetlocal enabledelayedexpansionecho 正在准备备份所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\全备份if not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部全量备份版本库.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf ( ::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmpecho %time:~0,8% %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~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.logAllBackupByFtpgoto end:Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN的全备份进行FTP上传,AllBackupByFtp.bat@echo offREM ======设置区Start================================set ftpUser=svnset ftpPass=svnbackupset ftpIP=192.168.1.22set ftpPort=2016REM 指定从FTP下载下来的文件存放到本机哪个目录set ftpFolder=/全备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\全备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToFilePath=%SvnBackupFolder%.rarREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLogFilePath=%SvnBackupRoot%\BackUp.logREM FTP命令执行文件缓存set ftpFile=%cd%\TempFTP.txt>"%ftpFile%" (echo,open %ftpIP% %ftpPort%echo,%ftpUser%echo,%ftpPass%echo cd "%ftpFolder%"echo prompt offecho binecho put %rarToFilePath%echo put %bakupLogFilePath%echo bye)set Path=%Path%;%rarExePath%set logFilePath=%SvnBackupRoot%\ftpUp.logREM ======设置区End ================================echo ===================%date% 执行异地版本库全量备份开始================= >> %logFilePath%if not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logFilePath%WinRAR.exe a -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%goto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logFilePath%echo %time:~0,8% 备份失败! >> %logFilePath%echo. >> %logFilePath%echo 提示:echo 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!:Endecho.echo 程序执行结束!1.2增量备份BAT1)SVN数据库的增量备份,IncreBackUp.bat::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\增量备份if not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::获取LastRevisions目录set REPOS_LAST_REVERSION_DIRECTORY=%REPOS_BACKUP_ROOT%\LastRevisionsrem if not exist %REPOS_LAST_REVERSION_DIRECTORY% goto Error1if not exist %REPOS_LAST_REVERSION_DIRECTORY%mkdir %REPOS_LAST_REVERSION_DIRECTORY%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::设置LastRevisions备份目录set REPOS_LAST_REVERSION_BACKUP_DIRECTORY=%BACKUP_DIRECTORY%\LastRevisions if not exist %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%mkdir %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部版本库备份.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf (::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (::判断以前是否存在该版本库的版本信息,存在说明以前备份过,需要基于其进行备份;否则对该版本库进行全新备份if exist %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt (::读取该版本库上次备份时保存的版本信息,如果小于当前版本信息则进行处理for /f %%k in (%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt) do if %%k lss %%j (echo.echo 开始备份版本库%%~ni……::取得该版本库本次备份的起始版本号set version=%%kset /a version=!version!+1::增量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi --revision !version!:head --incremental > %BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmpecho %%~ni: !version!-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmp! )) else (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp echo %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!)::将本次版本库备份时的最新版本信息写入文件保存echo %%j> %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txtecho %%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 全部版本库备份成功!IncreBackupByFtpgoto end:Error1echo.echo 提示:echo 上次备份保存的%REPOS_LAST_REVERSION_DIRECTORY%文件夹不存在,请确认后从上次备份中拷贝LastReversions到%REPOS_BACKUP_ROOT%目录,重新运行程序; echo 或者,不基于上次备份重新执行备份!echo 重新备份?(Y/N)set /p input=if %input%==Y (mkdir %REPOS_LAST_REVERSION_DIRECTORY%goto Begin) else (goto End):Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN数据的增量备份的FTP上传,IncreBackupByFtp.bat@echo offREM ======设置区Start================================set ftpUser=svnset ftpPass=svnbackupset ftpIP=192.168.1.22set ftpPort=2016REM 指定从FTP下载下来的文件存放到本机哪个目录set ftpFolder=/增量备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\增量备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToFilePath=%SvnBackupFolder%.rarREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLogFilePath=%SvnBackupRoot%\BackUp.logREM FTP命令执行文件缓存set ftpFile=%cd%\TempFTP.txt>"%ftpFile%" (echo,open %ftpIP% %ftpPort%echo,%ftpUser%echo,%ftpPass%echo cd "%ftpFolder%"echo prompt offecho binecho put %rarToFilePath%echo put %bakupLogFilePath%echo bye)set Path=%Path%;%rarExePath%set logFilePath=%SvnBackupRoot%\ftpUp.logREM ======设置区End ================================echo ===================%date% 执行异地版本库增量备份开始.=================== >> %logFilePath%if not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logFilePath%WinRAR.exe a -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%goto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logFilePath%echo %time:~0,8% 备份失败! >> %logFilePath%echo. >> %logFilePath%echo 提示:3SVN还原BAT设计SVN的还原LoadBackUp.bat@echo offecho 正在准备还原所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\增量备份if not exist %REPOS_BACKUP_ROOT% goto Error::还原所有版本库echo ===================%date% %time:~0,8%:执行版本库执行还原操作=================== >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 还原的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\SvnLoad.log::将所有保存版本库备份的文件夹名写入tmpdir /b %REPOS_BACKUP_ROOT%\*.dmp > folderName.tmp::依次操作tmp文件中包含的文件夹for /f %%h in (folderName.tmp) do (::将所有版本库文件名写入tmpdir /b /a-d %REPOS_BACKUP_ROOT%\%%h\*.dmp > fileName.tmp::依次操作tmp文件中包含的备份文件for /f %%i in (fileName.tmp) do (::处理备份文件名,以取得版本库名和相应的版本号for /f "tokens=1,2* delims=-" %%j in ("%%~ni") do (echo.echo 开始还原版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l……::版本库根目录不存在和版本库名相同名字的文件夹则创建一个if not exist %REPOS_ROOT%\%%j (mkdir %REPOS_ROOT%\%%j)::版本库根目录中该文件夹不是版本库,则创建一个if not exist %REPOS_ROOT%\%%j\conf\svnserve.conf (%SVN_CMD%\svnadmin create %REPOS_ROOT%\%%j)::还原备份%SVN_CMD%\svnadmin load %REPOS_ROOT%\%%j < %REPOS_BACKUP_ROOT%\%%h\%%i echo %%j: %%k-%%l >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l还原成功!)))::删除临时文件del fileName.tmpdel folderName.tmpecho.echo 全部版本库还原成功!goto end:Errorecho.echo 版本库备份目录%REPOS_BACKUP_ROOT%不存在,请确认后重新运行程序! goto End:End。

SVN迁移及备份的方法【转】

SVN迁移及备份的方法【转】

SVN迁移及备份的⽅法【转】备份策略==============svn备份⼀般采⽤三种⽅式:1)svnadmin dump2)svnadmin hotcopy3)svnsync.注意,svn备份不宜采⽤普通的⽂件拷贝⽅式(除⾮你备份的时候将库暂停),如copy命令、rsync命令。

笔者曾经⽤ rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库⼤部分都不可⽤,因此最好是⽤svn本⾝提供的功能来进⾏备份。

优缺点分析==============第⼀种svnadmin dump是官⽅推荐的备份⽅式,优点是⽐较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。

缺点是:如果版本⽐较⼤,如版本数增长到数万、数⼗万,那么dump的过程将⾮常慢;备份耗时,恢复更耗时;不利于快速进⾏灾难恢复。

个⼈建议在版本数⽐较⼩的情况下使⽤这种备份⽅式。

第⼆种svnadmin hotcopy原设计⽬的估计不是⽤来备份的,只能进⾏全量拷贝,不能进⾏增量备份;优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚⾄不需要恢复,只需要进⾏简单配置即可切换到备份库上⼯作。

缺点是:⽐较耗费硬盘,需要有较⼤的硬盘⽀持(俺的备份机有1TB空间,呵呵)。

第三种svnsync实际上是制作2个镜像库,当⼀个坏了的时候,可以迅速切换到另⼀个。

不过,必须svn1.4版本以上才⽀持这个功能。

优点是:当制作成2个镜像库的时候起到双机实时备份的作⽤;缺点是:当作为2个镜像库使⽤时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样⼦”;⽽当作为普通备份机制每⽇备份时,操作⼜较前2种⽅法⿇烦。

备份的命令==============全备份:使⽤svnadmin dump或svnadmin hotcopy或svnsync来做,hotcopy:svnadmin hotcopy path/to/repository path/to/backup –clean-logsdump:svnadmin dump 版本库路径及名称 –revision 导出的版本号> 导出的命名增量备份:使⽤svnadmin dump的–incremental选项来实现svnadmin dump 版本库路径及名称 –revision 上次导出的版本号:到本次要导出到的版本号 –incremental > 导出的命名⼀个技巧:如果你有⼀个较⼤的Subsersion版本库⽽你⼜想⽤最少的空间来将它备份下来,⽤这个命令(请将/repo替换成你的版本库路径)吧:svnadmin dump –deltas /repo |bzip2 |tee dump.bz2 | md5sum >dump.md5分步解释:最重要的⼀步是 -deltas,将消耗更多的CPU资源,但拥有更有效的差异存储办法。

Svn在Windows下实现自动全量增量备份和异地备份

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服务器并建立好相关上传目录,建议使用用、serverU或者简单ftp软件进行搭建。

4)整个上传过程,详细记录备份、压缩、FTP上传各步骤详细日志,随时可以查阅每次备份记录的详细情况。

1.3SVN还原功能可以进行还原所有版本库2SVN备份BAT设计1.1全备份BAT1)SVN的全备份,AllBackUp.bat:Begin@echo offsetlocal enabledelayedexpansionecho 正在准备备份所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\全备份if not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部全量备份版本库.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf ( ::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmpecho %time:~0,8% %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~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.logAllBackupByFtpgoto end:Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN的全备份进行FTP上传,AllBackupBy@echo offREM ======设置区Start================================setsetset .1.22setREM 指定从FTP下载下来的文件存放到本机哪个目录set 全备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\全备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLog\BackUp.logREM FTP命令执行文件缓存set \Temp>"%" (echo,open % %echo,%echo,%echo cd "%"echo prompt offecho binecho put %rarToecho put %bakupLogecho bye)set Path=%Path%;%rarExePath%set log\REM ======设置区End ================================echo ===================%date% 执行异地版本库全量备份开始================= >> %logif not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logWinRAR.exe a -ep1 -k -r -s -ibck %rarTo %SvnBackupFolder%echo %time:~0,8% 备份压缩成功,压缩的文件路径为:%rarTo >> %logecho %time:~0,8% 备份压缩继续上传FTP开始... >> %log-i -s:"%"echo %time:~0,8% 上传FTP成功,上传FTP目录为:% >> %logdel /q /s /f %rarToecho. >> %loggoto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logecho %time:~0,8% 备份失败! >> %logecho. >> %logecho 提示:echo 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!:Endecho.echo 程序执行结束!1.2增量备份BAT1)SVN数据库的增量备份,IncreBackUp.batif not exist %REPOS_BACKUP_ROOT% mkdir %REPOS_BACKUP_ROOT%::获取LastRevisions目录set REPOS_LAST_REVERSION_DIRECTORY=%REPOS_BACKUP_ROOT%\LastRevisionsrem if not exist %REPOS_LAST_REVERSION_DIRECTORY% goto Error1if not exist %REPOS_LAST_REVERSION_DIRECTORY%mkdir %REPOS_LAST_REVERSION_DIRECTORY%::设置所有版本库备份目录set BACKUP_DIRECTORY=%REPOS_BACKUP_ROOT%\%date:~0,10%.dmpset BACKUP_DIRECTORY=%BACKUP_DIRECTORY:/=-%rem if exist %BACKUP_DIRECTORY% goto Error2rem mkdir %BACKUP_DIRECTORY%if not exist %BACKUP_DIRECTORY% mkdir %BACKUP_DIRECTORY%::设置用户权限信息备份目录set REPOS_USER_INFO_DIRECTORY=%BACKUP_DIRECTORY%\UserInfoif not exist %REPOS_USER_INFO_DIRECTORY% mkdir %REPOS_USER_INFO_DIRECTORY%::设置LastRevisions备份目录set REPOS_LAST_REVERSION_BACKUP_DIRECTORY=%BACKUP_DIRECTORY%\LastRevisions if not exist %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%mkdir %REPOS_LAST_REVERSION_BACKUP_DIRECTORY%::备份所有版本库::i->版本库、j->版本库最新版本号、k->上次完全备份时版本库的版本号echo ===================%date% %time:~0,8%:执行全部版本库备份.=================== >> %REPOS_BACKUP_ROOT%\BackUp.logecho 备份的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\BackUp.log::读取版本库根目录下每个文件夹,并判断其是否是一个版本库for /r %REPOS_ROOT% %%i in (.) do if exist %%i\conf\svnserve.conf (::将当前版本库的最新版本信息写入tmp文件%SVN_CMD%\svnlook youngest %%~fi > %%~ni_last_revision.tmp::取出当前版本库的最新版本信息,判断其是否大于0,是则进行处理for /f %%j in (%%~ni_last_revision.tmp) do if %%j gtr 0 (::判断以前是否存在该版本库的版本信息,存在说明以前备份过,需要基于其进行备份;否则对该版本库进行全新备份if exist %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt (::读取该版本库上次备份时保存的版本信息,如果小于当前版本信息则进行处理for /f %%k in (%REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txt) do if %%k lss %%j (echo.echo 开始备份版本库%%~ni……::取得该版本库本次备份的起始版本号set version=%%kset /a version=!version!+1::增量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi --revision !version!:head --incremental > %BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmpecho %%~ni: !version!-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-!version!-%%j.dmp! )) else (echo.echo 开始备份版本库%%~ni……::全量备份版本库%SVN_CMD%\svnadmin dump --deltas %%~fi > %BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp echo %%~ni: 0-%%j >> %REPOS_BACKUP_ROOT%\BackUp.logecho 版本库%%~ni已经成功备份到%BACKUP_DIRECTORY%\%%~ni-0-%%j.dmp!)::将本次版本库备份时的最新版本信息写入文件保存echo %%j> %REPOS_LAST_REVERSION_DIRECTORY%\%%~ni_last_revision.txtecho %%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 全部版本库备份成功!IncreBackupByFtpgoto end:Error1echo.echo 提示:echo 上次备份保存的%REPOS_LAST_REVERSION_DIRECTORY%文件夹不存在,请确认后从上次备份中拷贝LastReversions到%REPOS_BACKUP_ROOT%目录,重新运行程序; echo 或者,不基于上次备份重新执行备份!echo 重新备份?(Y/N)set /p input=if %input%==Y (mkdir %REPOS_LAST_REVERSION_DIRECTORY%goto Begin) else (goto End):Error2echo.echo 备份目录已经存在,请确认后删除该目录,重新运行程序!goto End:Endecho.echo 程序执行结束!2)SVN数据的增量备份的FTP上传,IncreBackupBy@echo offREM ======设置区Start================================setsetset .1.22setREM 指定从FTP下载下来的文件存放到本机哪个目录set 增量备份REM 本地需要备份的根目录set SvnBackupRoot=F:\[SvnBackup]\增量备份REM 本地需要打压缩包的备份目录(今天备份文件夹2016-01-01.dmp)set SvnBackupFolder=%SvnBackupRoot%\%date:~0,10%.dmpREM 需要压缩成的文件路径及文件名(今天备份上传文件2016-01-01.dmp.rar)set rarToREM RAR执行文件的路径set rarExePath="C:\Program Files\WinRAR\"REM RAR执行文件的路径set bakupLog\BackUp.logREM FTP命令执行文件缓存set \Temp>"%" (echo,open % %echo,%echo,%echo cd "%"echo prompt offecho binecho put %rarToecho put %bakupLogecho bye)set Path=%Path%;%rarExePath%set log\REM ======设置区End ================================echo ===================%date% 执行异地版本库增量备份开始.=================== >> %logif not exist %SvnBackupFolder% goto Error1echo %time:~0,8% 备份压缩开始... >> %logWinRAR.exe a -ep1 -k -r -s -ibck %rarTo %SvnBackupFolder%echo %time:~0,8% 备份压缩成功,压缩的文件路径为:%rarTo >> %logecho %time:~0,8% 备份压缩继续上传FTP开始... >> %log-i -s:"%"echo %time:~0,8% 上传FTP成功,上传FTP目录为:% >> %logdel /q /s /f %rarToecho. >> %loggoto end:Error1echo.echo %time:~0,8% 提示: 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成! >> %logecho %time:~0,8% 备份失败! >> %logecho. >> %logecho 提示:echo 需要进行压缩打包的备份文件夹%SvnBackupFolder%不存在,请确认SVN是否本地备份完成!:Endecho.3SVN还原BAT设计SVN的还原LoadBackUp.bat@echo offecho 正在准备还原所有版本库……echo.::设置SVN命令目录set SVN_CMD="E:\VisualSVN Server\bin"::设置所有版本库根目录set REPOS_ROOT=D:\Repositories::设置所有版本库备份根目录set REPOS_BACKUP_ROOT=F:\[SvnBackup]\增量备份if not exist %REPOS_BACKUP_ROOT% goto Error::还原所有版本库echo ===================%date% %time:~0,8%:执行版本库执行还原操作=================== >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 还原的版本库版本信息如下: >> %REPOS_BACKUP_ROOT%\SvnLoad.log::将所有保存版本库备份的文件夹名写入tmpdir /b %REPOS_BACKUP_ROOT%\*.dmp > folderName.tmp::依次操作tmp文件中包含的文件夹for /f %%h in (folderName.tmp) do (::将所有版本库文件名写入tmpdir /b /a-d %REPOS_BACKUP_ROOT%\%%h\*.dmp >::依次操作tmp文件中包含的备份文件for /f %%i in () do (::处理备份文件名,以取得版本库名和相应的版本号for /f "tokens=1,2* delims=-" %%j in ("%%~ni") do (echo.echo 开始还原版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l……::版本库根目录不存在和版本库名相同名字的文件夹则创建一个if not exist %REPOS_ROOT%\%%j (mkdir %REPOS_ROOT%\%%j)::版本库根目录中该文件夹不是版本库,则创建一个if not exist %REPOS_ROOT%\%%j\conf\svnserve.conf (%SVN_CMD%\svnadmin create %REPOS_ROOT%\%%j)::还原备份%SVN_CMD%\svnadmin load %REPOS_ROOT%\%%j < %REPOS_BACKUP_ROOT%\%%h\%%i echo %%j: %%k-%%l >> %REPOS_BACKUP_ROOT%\SvnLoad.logecho 版本库%REPOS_BACKUP_ROOT%\%%h\%%j-%%k-%%l还原成功!)))::删除临时文件deldel folderName.tmpecho.echo 全部版本库还原成功!goto end:Errorecho.echo 版本库备份目录%REPOS_BACKUP_ROOT%不存在,请确认后重新运行程序! goto End:End。

数据异地备份方案

数据异地备份方案

数据异地备份方案1. 引言数据备份是保证数据安全和可恢复性的关键措施之一。

在企业和个人日常的数据管理过程中,由于各种原因,比如硬件故障、自然灾害、人为失误等,导致数据的丢失或损坏成为一个常见的问题。

为了保证数据的安全性,异地备份成为了一种重要的备份策略。

本文将介绍一种有效的数据异地备份方案,旨在让用户在数据丢失的情况下能及时恢复数据。

2. 方案概述数据异地备份是指将数据备份到与原始数据位于不同地理位置的存储介质上。

该方案的关键目标是实现数据的安全性、可靠性和可恢复性。

下面是该方案的一些基本原则和步骤:2.1 原则•多重备份: 备份数据需要在不同的位置存储多份副本,确保备份的可靠性和安全性。

•数据加密: 对备份的数据进行加密是重要的一步,以保护数据的隐私和安全性。

•定期备份: 为了保证备份的实效性,需要定期执行备份操作,确保备份数据是最新的。

2.2 步骤1.选择备份存储介质: 选择一种适合的备份存储介质,比如云存储服务、外部硬盘或网络存储设备等。

2.数据分析和划分: 对需要备份的数据进行分析,根据数据的重要性和敏感性进行合理的划分。

3.备份策略规划: 制定合理的备份策略,包括备份频率、备份时间、增量备份还是全量备份等。

4.数据加密和压缩: 对备份数据进行加密和压缩,以确保数据的安全性和存储效率。

5.备份操作执行: 执行备份操作,将数据备份到指定的存储介质上。

6.备份验证和监控: 验证备份数据的完整性和可恢复性,并监控备份过程中的异常情况。

7.定期检查和更新: 定期检查备份存储介质的状态,并根据需要进行更新和维护。

3. 备份存储介质选择数据备份的存储介质选择是关键的一步。

以下是几种常见的备份存储介质及其特点:•云存储服务: 云存储服务提供了高可靠性、高安全性的数据存储方案。

用户可以选择主流云服务提供商(如AWS、Azure、Google Cloud等)的备份服务,将数据备份到其云服务器上。

云存储服务具有数据冗余和备份的特性,能够有效保障数据的安全性和可靠性。

如何实现虚拟化存储的异地备份与恢复(十)

实现虚拟化存储的异地备份与恢复随着信息技术的不断发展,虚拟化技术在企业和组织中得到广泛应用。

在虚拟化环境中,存储是至关重要的一环,对于业务的高可用性和数据的安全性有着重要的影响。

实现虚拟化存储的异地备份与恢复是保障数据连续可用的重要手段。

本文将就如何实现虚拟化存储的异地备份与恢复展开探讨。

一、制定备份策略在实现虚拟化存储的异地备份与恢复过程中,首先需要制定合理的备份策略。

备份策略包括备份频率、备份存储位置和备份数据的保留期等。

备份频率应根据业务需求和数据变动频繁程度确定,可以选择每天、每周或每月备份。

备份存储位置应选在异地,以防止因本地灾害导致的数据丢失。

备份数据的保留期可以根据法规和数据的价值来确定,一般建议保留一定时间的历史备份,以应对意外情况。

二、选择合适的备份方案虚拟化环境中,有多种备份方案可供选择。

其中,基于快照的备份方案和基于复制的备份方案是比较常见的。

基于快照的备份方案通过创建虚拟机快照来捕获虚拟机的状态,并将快照数据存储到备份存储中,从而实现备份。

这种方式备份速度快,占用的存储空间相对较小,但恢复时间相对较长。

基于复制的备份方案则是将存储数据实时复制到备份存储中,从而实现备份。

这种方式备份速度较慢,但恢复时间较短。

在选择备份方案时,需要根据业务需求和数据的重要性来进行权衡和选择。

三、确保数据传输的安全性在实现虚拟化存储的异地备份与恢复过程中,数据传输的安全性尤为重要。

对于数据的传输,可以采用加密技术来保障数据的机密性。

通过使用加密传输协议,可以有效防止数据在传输过程中被窃取或篡改。

此外,还可以使用身份验证和访问控制等措施,确保只有授权的人员可以访问备份数据。

四、定期测试备份的可用性与完整性实施备份策略和备份方案后,还需要定期测试备份的可用性与完整性。

定期测试可以保证备份系统正常运行,并及时发现并修复备份故障。

测试内容可以包括备份数据的完整性、备份数据的恢复性以及备份系统的响应时间等。

Svn版本管理备份策略


解决办法
SVN命令错误:检查 SVN命令是否正确, 可以查阅SVN手册或 在线文档。
权限问题:检查备份 文件的读写权限,确 保有足够的权限进行 备份。
文件锁定:在备份过 程中,确保没有其他 进程锁定备份文件。
备份文件损坏
解决办法
磁盘故障:定期对磁盘进行检查 和维护,确保磁盘的稳定性和可 靠性。
原因:文件写入错误、磁盘故障 、病毒攻击等。
03
SVN版本备份常见问题及解决办法
备份中断
解决办法
SVN服务器故障:定期备份SVN 服务器,并对备份文件进行完整 性检查。
原因:网络中断、SVN服务器故 障、磁盘空间不足等。
网络故障:检查网络连接,确保 网络畅通。
磁盘空间不足:定期清理磁盘空 间,确保有足够的空间进行备份 。
备份错误
原因:SVN命令错误 、权限问题、文件锁 定等。
SVN与常用的版本控制系统(如CVS)相比,具有更好的性 能和更丰富的功能,如版本控制、冲突解决、历史记录查询 等。
SVN服务器架设
1 2
选择SVN服务器
可以选择多种SVN服务器,如Apache、 VisualSVN Server等。
安装SVN服务器
根据所选服务器类型进行安装,并进行必要的 配置。
文件写入错误:检查备份文件的 完整性,如有需要可以重新备份 。
病毒攻击:安装杀毒软件,定期 进行全盘扫描,防止病毒攻击备 份文件。
04
SVN版本备份实际操作
Windows系统SVN备份
安装VisualSVN Server
在Windows服务器上安装VisualSVN Server,以便在Windows平台上进行版本控制和备份。
周备份

svn备份命令

但是这样不是很安全的方式因为如果在拷贝时版本库发生变化将会造成备份的结果不够准确失去备份的作用为此subversion提供了svnadminhotcopy命令可以
svn备份命令
Svn备份命令
Svn全库备份 本地方式
导出:
Svnadmin dump 版本的路径及名称 –-revision 导出的版本号>导出的路径及民称 例 :svnadmin dump f:\\SVN\\itss –-revision 9 >f:\\***\\itss-9
导入:
Svnadmin load 要恢复的版本路径及名Байду номын сангаас <导出的路径及名称
例:svnadmin load f:\\SVN\\item < f:\\***\\itss-9
Svn增量备份 本地方式
Svnadmin dump 版本库路径及名称 –-revision 上次导出的版本号:到本次要导出到的版本号 –-incremental >导出文件的路径及名称

异地备份解决方案

异地备份解决方案引言在当今数字化时代,数据的重要性变得越来越突出。

对于企业和个人来说,数据的安全性和可靠性非常关键。

然而,突发事件如火灾、地震、洪水等可能对数据中心造成严重的破坏,导致数据丢失或无法访问的风险。

为了解决这个问题,异地备份成为了一种常见的解决方案。

什么是异地备份?异地备份是指将数据备份复制到一个离主数据中心相距较远的地方存储。

通常,备份数据存储在地理位置距离主数据中心数百或数千公里的备份服务器上。

这样,当主数据中心发生灾难性事件导致数据无法恢复时,可以从备份服务器上恢复数据,从而降低数据丢失的风险。

异地备份解决方案的目标异地备份解决方案的主要目标是确保数据的持久性、安全性和可恢复性。

以下是一个完善的异地备份解决方案应该具备的目标:1.数据持久性:备份数据应该能够长期保存,并且不受地理位置的限制。

2.数据安全性:备份数据应该能够受到强大的加密和访问控制机制的保护,以防止未经授权的访问。

3.数据可恢复性:备份数据应该能够在主数据中心发生灾难性事件后快速恢复,以确保业务的连续性和可用性。

异地备份解决方案的组成部分一个完善的异地备份解决方案通常由以下几个关键组成部分组成:1.主数据中心:主数据中心是数据的源头,负责数据的生成、存储和处理。

它通常位于企业或个人的办公场所。

2.异地备份服务器:异地备份服务器是备份数据的目标,通常位于主数据中心相距较远的地方。

它负责接收、存储和保护备份数据。

3.数据传输通道:数据传输通道用于将主数据中心的数据传输到异地备份服务器。

这通常基于网络传输,可以使用传统的互联网、局域网、广域网或专用线路等方式。

4.数据加密和压缩:为了保护备份数据的安全性和降低数据传输的成本,通常需要对备份数据进行加密和压缩处理。

加密可以确保数据在传输过程中不会被篡改或窃取,而压缩可以减少数据传输时间和带宽占用。

5.数据恢复机制:当主数据中心发生灾难性事件导致数据无法恢复时,需要通过数据恢复机制从异地备份服务器上恢复数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档