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. mybatis批量提交

    之前在做项目时,使用mybatis,批量执行sql,这里简单写下步骤 在配置数据库连接时,加入一个参数,例如 jdbc:mysql://127.0.0.1:3307/mvs-report?allowM ...

  2. 【bzoj3598】: [Scoi2014]方伯伯的商场之旅

    Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...

  3. B20J_2836_魔法树_树链剖分+线段树

    B20J_2836_魔法树_树链剖分+线段树 题意: 果树共有N个节点,其中节点0是根节点,每个节点u的父亲记为fa[u].初始时,这个果树的每个节点上都没有果子(即0个果子). Add u v d ...

  4. 电梯调度二——曹玉松&&蔡迎盈

    电梯初步版本    经过去实际大楼的调查和一周的学习,初步完成了电梯的制作,但是这个版本的电梯功能并不是很全面,而且界面有待于改善,现在做出了测试版本,稍后进一步跟进新的版本,现在的版本初步完成的是电 ...

  5. sql查询当前登陆人所管理的校区下的人员

    StringBuilder sql = new StringBuilder("select accountId, concat( ',', GROUP_CONCAT(FIND_IN_SET( ...

  6. css中常见margin塌陷问题之解决办法

    塌陷问题 当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现象. ①垂直并列 首先设置两个DIV,并为其制定宽高 1 /*HTML部分*/ 2 <body> 3 <d ...

  7. NIO(生活篇)

    今晚是个下雨天,写完今天最后一行代码,小鲁班起身合上电脑,用滚烫的开水为自己泡制了一桶老坛酸菜牛肉面.这大概是苦逼程序猿给接下来继续奋战的自己最好的馈赠.年轻的程序猿更偏爱坐在窗前,在夜晚中静静的享受 ...

  8. 边缘计算在物联网(IoT)当中的运用「物联网架构探索系列」

    这里记录的是我对物联网架构的学习.探索和思考,希望对你有所启发…… 边缘计算是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起 ...

  9. Visual Studio动态生成版权信息

    Visual Studio动态生成版权信息 VS2008 1.1,类文件模板:在安装目录打开CS模板文件夹(D:\Program Files (x86)\Microsoft Visual Studio ...

  10. Java集合学习总结

    java集合 collection public interface Collection<E> extends Iterable<E> List public interfa ...