windows下SVN备份方案

备份策略

svn备份一般采用三种方式:

    1)svnadmin dump 
2)svnadmin hotcopy 
3)svnsync. 

注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。

优缺点分析:

第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。

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

个人建议在版本数比较小的情况下使用这种备份方式。

第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;

优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。

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

第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。

优点是:当制作成2个镜像库的时候起到双机实时备份的作用;

缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。

svnadmin dump全量备份实现

新建一个bat文件,内容如下:

echo on
rem Subversion的安装目录
rem 所有版本库的父目录
set SVN_ROOT=F:/Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=G:\SVN_BAK
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" svnadmin dump %%~fI > %BACKUP_DIRECTORY%/%%~nI
goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end

自动将svn资源目录下的所有版本库被分到“BACKUP_SVN_ROOT年月日”目录下。

结果发现:如果版本库文件较大,则备份时间太长。原本25G的资源目录,备份之后231G,且时间为1个多小时。



考虑svnadmin hotcopy方式

svnadmin hotcopy备份实现

svnadmin hotcopy /path/to/repository /path/to/backup

echo on
rem Subversion的安装目录
rem 所有版本库的父目录
set SVN_ROOT=F:/Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=G:\SVN_BAK
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
if exist %BACKUP_DIRECTORY% goto checkBack
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
rem for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" svnadmin dump %%~fI > %BACKUP_DIRECTORY%/%%~nI
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" svnadmin hotcopy %%~fI %BACKUP_DIRECTORY%/%%~nI goto end
:checkBack
echo 备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto end
:end

备份之后的文件大小和资源库大小一样。

hotcopy备份恢复测试

换个测试机下载svn server,安装完成之后,拷贝某个项目版本库到测试机。【其实也可以进行本机恢复】

hotcopy恢复命令

svnadmin hotcopy /path/to/backup /path/to/repository



创建用户,授权,用小乌龟连接一下,正常能用

dump 备份恢复测试

恢复命令

svnadmin load 要恢复的版本库路径及名称 < 备份文件

  •  mkdir newrepos
  •  svnadmin create newrepos
  •  svnadmin load newrepos < backfile

一定要先创建项目资源库,然后再恢复。

授权,测试,可用。

添加定时任务

修改脚本,备份文件自动循环覆盖

set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%

修改为以下脚本【每十天会覆盖一次】

rem 设置为循环覆盖(每十天)
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~9,1%

最终脚本

echo off
rem Subversion的安装目录
rem 所有版本库的父目录
set SVN_ROOT=F:/Repositories
rem 备份的目录
set BACKUP_SVN_ROOT=G:\SVN_BAK
rem set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
rem 设置为循环覆盖(每十天)
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~9,1% if exist %BACKUP_DIRECTORY% rmdir /s/q %BACKUP_DIRECTORY%
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log
mkdir %BACKUP_DIRECTORY%
rem 验证目录是否为版本库,如果是则取出名称备份
rem for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" svnadmin dump %%~fI > %BACKUP_DIRECTORY%/%%~nI
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I/conf/svnserve.conf" svnadmin hotcopy %%~fI %BACKUP_DIRECTORY%/%%~nI

研究windows下SVN备份及还原恢复方案的更多相关文章

  1. Windows下SVN备份脚本

    本站备份:svn备份与还原_脚本_(dump命令) 以下是转载记录, 转自:https://wuxiaobai.win/archives/111 用法 svnadmin dump REPOS_PATH ...

  2. windows下mysql备份、还原,使用mysqldump

      直接备份 mysqldump -u用户名 -p密码 -h 192.168.1.15 -c   --default-character-set=utf8 数据库名>xxx.sql   使用gz ...

  3. sql server 备份与恢复系列三 简单恢复模式下的备份与还原

    一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...

  4. sql server 备份与恢复系列五 完整模式下的备份与还原

    一.概述 前面介绍了简单恢复模式和大容量恢复模式,这篇继续写完整恢复模式下的备份与还原.在完整恢复模式里最大的优点是只要能成功备份尾日志,就可以还原到日志备份内包含的任何时点("时点恢复&q ...

  5. Windows下SVN服务器搭建方法整理(apache)

    http://skydream.iteye.com/blog/437959 http://www.cnblogs.com/liuke209/archive/2009/09/23/1572858.htm ...

  6. Windows下SVN权限配置过程详解

    本节讲解一下Windows下SVN权限配置说明,针对的是一个目录下多库的情况,下面是具体的介绍,希望通过本文的学习,你能够对SVN权限配置问题有更加深刻的认识. 1.本文档适用于对Subvesion的 ...

  7. Windows下SVN权限配置

    Windows下SVN权限配置          按照前面的教程装完1.6.1版以后,当svnadmin create D;\svn创建仓库后,应该在仓库目录下的config目录有3个文件— auth ...

  8. svn备份与还原_脚本_(dump命令)

    今天备份svn, 能保证好用就行先, 回头再研究 buerguo.bat @echo off :: 关闭回显 :: 说明:如有命令不明白,请使用帮助命令:命令/? .如:for/? :: 设置标题 t ...

  9. sql server 备份与恢复系列四 大容量模式下的备份与还原

    一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...

随机推荐

  1. BZOJ_3343_教主的魔法_分块+二分查找

    BZOJ_3343_教主的魔法_分块+二分查找 题意:教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列被编号为 ...

  2. Linux文件系统选择

    通过综合使用多种标准文件系统Benchmarks对Ext3, Ext4, Reiserfs, XFS, JFS, Reiser4的性能测试对比,对不同应用选择合适的文件系统给出以下方案,供大家参考.文 ...

  3. Sublime text3所遇到的问题

    sublime text3的下载地址:https://www.sublimetext.com/ 解决sublime text上不能使用交互的input的输入问题 通过安装sublimeREPL插件解决 ...

  4. python中os.path.dirname(__file__) 命令行 参数没有绝对路径导致数据库找不到

    (1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/python ...

  5. OSI七层协议与TCP连接

    概述 为了追求效率,我们写代码,不可能去关注底层知识,但往往到出了问题,或者性能调优.我们就会速手无策,仔细为自己查缺补漏,总结知识点. 网络协议 互联网的本质就是一系列的网络协议,让不同计算机能够互 ...

  6. 干货,一文带你超详细了解Session的原理及应用

    session 简介 session 是我们 jsp 九大隐含对象的一个对象. session 称作域对象,他的作用是保存一些信息,而 session 这个域对象是一次会话期间使用同一个对象.所以这个 ...

  7. 如何扩展分布式日志组件(Exceptionless)的Webhook事件通知类型?

    写在前面 从上一篇博客高并发.低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症. 最近一周升级了微服务项目使用的分布式日志组件Exce ...

  8. 【JVM虚拟机】(9)-- JVM是如何处理异常的

    [JVM虚拟机](9)-- JVM是如何处理异常的 上篇博客我们简单说过异常信息是存放在属性表集合中的Code属性表里,那么这篇博客就单独讲Code属性表中的exception_table. 在讲之前 ...

  9. Java8新特性之三:Stream API

    Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式.Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找.过滤.筛选等操作 ...

  10. Keepalived部署与配置详解

    Keepalive详解 工作原理 Keepalived本质就是为ipvs服务的,它也不需要共享存储.IPVS其实就是一些规则,Keepalived主要的任务就是去调用ipvsadm命令,来生成规则,并 ...