通过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配置库同步说明
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下实现自动全量增量备份和异地备份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备份⼀般采⽤三种⽅式: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下实现自动全量增量备份和异地备份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备份命令
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.数据恢复机制:当主数据中心发生灾难性事件导致数据无法恢复时,需要通过数据恢复机制从异地备份服务器上恢复数据。
通过SVN镜像实现异地备份
通过SVN镜像实现异地备份一、目的通过SVN再带工具svnsync来实现版本库的同步,实现异地开发中心版本库向北京中心的实时同步。
二、搭建SVN服务器异地开发中心SVN服务器已经投入使用,需要在北京本地安装配置SVN 服务器。
以Linux操作系统为例:1、下载SVN安装所需的软件sqlite-amalgamation-3.6.13.tar.gzapr-1.2.7.tar.gzapr-util-1.2.7.tar.gzhttpd-2.2.13.tar.bz2subversion-1.6.6.tar.bz22、检查SVN是否安装成功在安装服务器上执行svnadmin命令,是否有相应。
3、在北京中心创建镜像库#mkdir –p /data/svn //创建SVN库存储目录#svnadmin create mir //创建镜像库,名字可根据实际调整#netstat -nltp //如果有3690端口在监听,说明运行成功4、修改配置文件#cd /data/svn/mir/conf将svnserve.conf去掉下面几行的注释:anon-access = readauth-access = writepassword-db = passwd注意: 上述三行前面不能留有空格,否则要出错。
5、修改密码文件修改密码文件passwd,添加账号和密码三、配置手工同步1、修改同步文件#cp pre-revprop-change.tmpl pre-revprop-change#chmod +x pre-revprop-change#chmod 777 pre-revprop-change2、同步初始化#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服务器上进行配置。
SVN备份研究
1.全量备份的实现步骤最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上就可以了.但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此使用提供的“svnadmin hotcopy”的命令,可以防止这种问题。
例如:有如下的SVN版本库F:/SVN_ROOT/00-Organization├─conf├─db│├─revprops││└─0│├─revs││└─0│├─transactions│└─txn-protorevs├─hooks└─locks现在将00-Organization备份到G:\SVN_FULL_BAK目录下。
1.1实现脚本全量备份,包含两个文件hotcopy.bat和最终执行文件fullBackup.bat。
1.1.1hotcopy.bat脚本:@echo 正在备份版本库%1……@%SVN_HOME%\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2@echo 版本库%1成功备份到了%2!1.1.2fullBackup.bat脚本:rem Subversion的安装目录set SVN_HOME="D:\Program Files\svn-win32-1.6.6\bin"rem 所有版本库的父目录set SVN_ROOT=F:\SVN_ROOTrem 备份的目录set BACKUP_SVN_ROOT=G:\SVN_FULL_BAKset BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%if exist %BACKUP_DIRECTORY% goto checkBackecho 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.logmkdir %BACKUP_DIRECTORY%rem 验证目录是否为版本库,如果是则取出名称备份for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nIgoto end:checkBackecho 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
linux下面SVN的单库和多库自动备份
Linux下面SVN的自动备份本文档是实现SVN 全库备份,即SVNAdmin hotcopy备份。
以http://192.168.103.198为例.第一步,创建一个存放备份数据的路径,由于全库备份需要的磁盘空间较大,需要找一个空间比较的目录,检查磁盘空间大小命令:#df –h#mkdir /home/public2/backup/#mkdir /home/public2/backup/svn/,保存备份库第二步,采用shell脚本的方式实现自动备份,在~/或者/home目录下创建Shell脚本,指单库备份。
第三步,运行脚本命令,如果该脚本没有执行权限,需要加上执行权限#chmod 777 /home/baksvn_hotcopy.sh#./home/baksvn_hotcopy.sh或者到该目录下运行,运行命令:./baksvn_hotcopy.sh第四步,把这个脚本添加到计划任务中,实现周期性的自动备份,如下内容所示:#vim /etc/crontab,在最后一行添加脚本如下,也可以用crontab –e添加(步骤较复杂):以上实现的是使用hotcopy的方式全量备份SVN单库模式,并且只保留最近3天的备份数据下面介绍多库的全量备份第一步, 创建一个存放备份数据的路径,由于全库备份需要的磁盘空间较大,需要找一个空间比较的目录,并创建日志目录和库文件列表目录。
#mkdir /home/public2/backup/conf#mkdir /home/public2/backup/log#mkdir /home/public2/backup/svn/,保存备份库。
第二步,采用shell脚本的方式实现自动备份,在~/或者/home目录下创建Shell脚本。
# Vim baksvn_hotcopy.sh#第三步,把这个脚本添加到计划任务中,实现周期性的自动备份,如下内容所示:#vim /etc/crontab,在最后一行添加脚本,也可以用crontab –e添加(步骤较复杂)。
SVN版本库无损迁移与自动备份1
SVN版本库无损迁移与自动备份(一)引:最近正在做版本库迁移和自动备份,在网上找过一些相关资料,但都比较凌乱,让人很纠结,相信很多网友会遇到相同的问题,笔者根据自己的整理和实践结果总结了一套可操作(经过实际验证)的方案,打算用两篇博客与大家分享一下,供大家参考。
一、业务目标1、在不改变原来版本库的内容和版本号的前提下,把原来分散在多个服务器上的各个版本库统一迁移到一台服务器上的新版本库上。
2、实现新版本库的定时自动备份。
二、相关指令1、svnadmin dump命令语法svnadmin dump Repository_Path [-r LOWER[:UPPER]] [--incremental](1)svnadmindump命令用于导出整个Repository或Repository下的某个范围的修订版本。
(2)参数说明:Repository_Path是版本库的路径,[-rLOWER[:UPPER]]用于指定导出的修订版本范围,由参数-r和两个用:号隔开阿拉伯数字组成。
例如:-r 0:100表示导出才版本0到版本100之间的所有修订版,-r是revision的缩写。
--incremental,它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。
这样的好处是第一:可以把一个大的文件切分成若干个小的文件。
第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。
甚至可以通过hook脚本,每天晚上自动将当天的修改dump出来做备份用。
2、svnadmin load命令语法svnadmin load Repository_Path(1)svnadminload命令用于从标准输入流/其它流中导入版本库,(2)参数说明:Repository_Path是要导入的目标版本库。
3、dump和load的输出/入重定向svnadmin dump oldRepository> dumpfilesvnadminload newRepository < dumpfile默认情况下dump和load命令分别输出到默认输出设备(屏幕)和从默认输入设备(键盘)导入。
svn 数据迁移 方案
svn 数据迁移方案迁移SVN(Subversion)数据通常涉及将版本控制系统的仓库、历史记录等内容从一个环境迁移到另一个环境。
下面是一个基本的SVN 数据迁移方案的概述:1.备份原始 SVN 仓库:在进行迁移之前,务必创建原始 SVN 仓库的备份。
这是防止在迁移过程中出现问题时能够回滚到原始状态的关键步骤。
svnadmin dump /path/to/original_repo > original_repo_backup.dump2.设置新的 SVN 仓库:在目标环境中创建新的 SVN 仓库。
svnadmin create /path/to/new_repo3.还原备份到新的 SVN 仓库:将原始 SVN 仓库的备份还原到新的 SVN 仓库中。
svnadmin load /path/to/new_repo < original_repo_backup.dump4.修改仓库配置(可选):在新的仓库中可能需要对配置进行一些修改,这取决于迁移的具体情况。
例如,如果原始仓库使用了钩子脚本,需要确保在新仓库中重新配置。
5.更新工作副本:在进行迁移后,用户的工作副本需要更新以与新仓库同步。
可以通过以下命令在工作副本中进行更新:svn switch --relocate old_repo_url new_repo_url注意事项:版本号处理: SVN 仓库中的版本号可能会发生变化。
在迁移后,需要通知团队并确保所有相关方了解版本号的变化。
外部依赖项:如果原始 SVN 仓库中使用了外部依赖项,确保它们在新仓库中也得到了正确的配置。
权限和用户信息:确保在迁移过程中处理好权限和用户信息,以确保与原始仓库相同的访问和权限设置。
请注意,上述步骤是一个通用的迁移方案,具体的实施可能会根据具体的情况和要求有所调整。
在进行 SVN 数据迁移之前,请务必详细阅读 Subversion 文档,并根据具体需求调整迁移方案。
异地备份方案
3.符合国家相关法律法规要求,确保数据安全合规。
三、方案设计
1.备份策略
(1)全量备份:定期对关键数据进行全量备份,确保备份数据的完整性。
(2)增量备份:在两次全量备份之间,对发生变更的数据进行增量备份,减少备份所需的时间和存储空间。
(3)差异备份:在两次全量备份之间,对发生变更的数据进行差异备份,降低备份复杂度。
异地备份方案
第1篇
异地备份方案
一、背景
随着信息化建设的不断深入,各类业务系统产生的数据量呈爆炸式增长,数据的安全性、可靠性成为企业关注的焦点。为了确保关键数据的安全,降低因自然灾害、人为破坏等因素导致的数据丢失风险,制定一套合法合规的异地备份方案势在必行。
二、目标
1.确保关键数据在异地得到有效备份,降低数据丢失风险。
2.部署备份存储介质、备份传输设备及备份软件。
3.配置备份任务,实现自动化备份。
4.监控备份过程,确保备份任务按计划执行。
5.定期进行备份恢复测试,验证备份数据的完整性和可用性。
6.不断优化备份策略,根据业务发展调整备份方案。
六、异地备份中心建设
1.选址:选择地理位置偏远、自然灾害较少的地区作为备份中心。
2.按照实施方案,分阶段、分步骤推进备份工作。
3.对备份过程中出现的问题进行及时调整和优化,确保备份方案的有效性。
五、总结
本异地备份方案旨在确保关键数据的安全,降低数据丢失风险。通过制定合理的备份策略、备份频率、备份存储介质和备份传输等措施,实现数据的有效备份。同时,定期进行备份恢复测试,确保备份数据的完整性和可用性。本方案符合国家相关法律法规要求,为企业的数据安全提供有力保障。
visualsvn热备份(sync同步)
利用svnsync同步SVN版本库配置环境:主SVN Sever:windows 2003 + VisualSVN-Server-2.5.12备SVN Sever:windows 2003 + VisualSVN-Server-2.5.12目标:将之前主库上的SVN数据迁移到VisualSVN上,然后在实现版本库的远程自动备份,版本库备份到另一台机器上。
VisualSVN服务器端安装双击VisualSVN-Server-2.5.12.msi,然后点击“Next”下一步;点击“Next”下一步选择第一个,点击“Next”下一步Location是VisualSVN Server安装路径,Repositories是版本库路径,port指定端口,Use secure connection:是否用https安全连接;如果不改,点击“Next”下一步;点击“install”继续安装点击“Finish”安装完成VisualSVN主备配置:主库服务器:(IP:192.168.22.66)1.首先将之前SVN版本库目录下的文件COPY到VisualSVN版本库C:\Repositories\目录下,刷新VisualSVN就可以看到;2.添加用户,设置权限:3.创建一个新的空库4.创建用户,设置权限,与主库一致:5.编辑pre-revprop-change文件,增加内容:echo "Changing revision properties other than svn:log is prohibited" >&2 exit 0这个文件存放路径:C:\Repositories\back_svn\hooks6.用命令进行初始化:file:///C:\Pepositories\back_svn→为备份库的所在的物理路径(视实际库路径而定)http://192.168.22.66:88/svn/svn_new→为主库的ChekOut路径(视实际端口号而定)如果不输入--username svn_back --password 111111,命令执行时会提示输入用户名密码,这时将之前创建的用户svn_back及密码输入即可;7.开始同步数据:svnsync sync file:///C:\Repositories\back_svn8.同步成功后,在回到主库编辑post-commit文件,实现事实提交同步;编辑内容:svnsync sync --non-interactive http://192.168.22.62:80/svn/back_svn --username svn_back --password 111111其中http://192.168.22.62:80/svn/back_svn为备份库CheckOut路径配置结束,以后每次commit时,数据都会备份到备份库中。
SVN仓库备份和迁移
SVN仓库备份和迁移author: yunqimg(ccxtcxx0)前言本文主要是讲 SVN 仓库的全量备份和增量备份,只包括基本操作.如有疑问请参考 References.仓库备份•svnadmin dump1.备份方式多样2.如果版本数过多,dump的过程将非常慢3.备份耗时,恢复更耗时4.备份时数据变大,恢复后数据可能会变小5.仓库下的passwd和authz不会备份•全备份在需要备份SVN仓库的服务器上执行如下命令sudo svnadmin dump /path/repository > /path/repository-backup.2019-12-27•做版本0-2的备份sudo svnadmin dump /path/repository -r 0:2 --incremental > /path/repository-backup_0-2.2019-12-27•incremental 参数说明它使用增量方式来导出版本,即每次都只导出自上一个版本以来的修改。
这样的好处是--第一:可以把一个大的文件切分成若干个小的文件。
第二:在版本库已经存在的情况下,我们只需要每次导出修改的部分,不需要每次都导出整个版本库的内容。
甚至可以通过hook脚本每天晚上自动将当天的修改dump出来做备份用。
仓库迁移•使用SCP等工具,将备份的文件传输到目标服务器上,例如/home目录下.# 建立新的svn仓库sudo svnadmin create /path/new_repository# 导入数据sudo svnadmin load /path/new_repository < /home/reposit ory-backup.2019-12-27。
异地备份
异地备份将数据在另外的地方实时产生一份可用的副本,此副本的使用不需要做数据恢复,可以将副本立即投入使用。
这就是异地备份。
异地备份的数据复制目前有如下实现方式:基于主机。
基于主机的数据复制技术,可以不考虑存储系统的同构问题,只要保持主机是相同的操作系统即可,而目前也存在支持异构主机之间的数据复制软件,如BakBone NetVault Replicator就可以支持异构服务器之间的数据复制,可以支持跨越广域网的远程实时复制。
缺点是需要占用一点主机资源。
基于存储系统。
利用存储系统提供的数据复制软件,复制的数据流通过存储系统之间传递,和主机无关。
这种方式的优势是数据复制不占用主机资源,不足之处是需要灾备中心的存储系统和生产中心的存储系统有严格的兼容性要求,一般需要来自同一个厂家的存储系统,这样对用户的灾备中心的存储系统的选型带来了限制。
基于光纤交换机。
这项技术正在发展中,利用光纤交换机的新功能,或者利用管理软件控制光纤交换机,对存储系统进行虚拟化,然后管理软件对管理的虚拟存储池进行卷管理、卷复制、卷镜像等技术,来实现数据的远程复制。
比较典型的有Storag-age,Falcon等。
基于应用的数据复制。
这项技术有一定局限性,都是针对具体的应用。
主要利用数据库自身提供的复制模块来完成,比如OracleDataGuard,Sybase Replication 等。
灾难备份解决方案的分析及选择在推行计算机应用的过程中,银行已深深体会到系统可用性对银行业务的重要性。
在保证到本地机房的高可用性之外,他们还认识到:对于意外引起的包括自然灾害、设备损毁等灾难性事件,仍然需要有相应的保护措施,以保障业务系统的连续运行,从而获得良好的企业形象,保证社会的正常金融秩序。
事实上,对灾难进行预防建设是危机管理的一部分。
据一项美国的研究报告显示,在灾害之后,如果无法在14 天内恢复资讯作业,有75%的公司业务会完全停顿,43%再也无法重新开业,因而有20%的企业在两年之内被迫宣告破产。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、目的
通过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的数据安全,更重要的是这种数据是实时的。