`
ssxxjjii
  • 浏览: 950621 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SVN完全备份,增量备份,库同步 .

 
阅读更多

 完全备份
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin hotcopy”命令,可以防止这种问题。

还记得我们的版本库目录吗?

D:/SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks


如果要把project1备份到d:/svnrootbak目录下,只需要运行:

svnadmin hotcopy d:/svnroot/project1 d:/svnrootbak/project1


2, 增量备份
尽管完全备份非常简单,但是也是有代价的,当版本库非常巨大时,经常进行完全备份是不现实的,也并不必要,但是一旦版本库在备份之间发生问题,该如何呢,这里我们就用到了增量备份。

增量备份通常要与完全备份结合使用,就像oracle数据库的归档日志,记录着每次Subversion提交的变化,然后在需要恢复时能够回到最新的可用状态。在我们这个例子中我们使用的是,svnadmin dump命令进行增量的备份,使用方法是:

svnadmin dump project1 --revision 15 --incremental > dumpfile2

上面的命令实现了对修订版本15进行增量的备份,其中的输出文件dumpfile2只保存了修订版本15更改的内容。

为了记录每次提交的结果,我们需要使用一项Subversion的特性--钩子(hook),看看我们的project1目录:

├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks

其中的hooks目录里存放的就是钩子脚本,我们在此处只使用post-commit钩子,这个钩子会在每次提交之后执行,为了实现我们的备份功能,我们在hooks下建立一个文件post-commit.bat,内容如下:

echo off
set SVN_HOME="C:/Program Files/Subversion"
set SVN_ROOT=D:/svnroot
set UNIX_SVN_ROOT=D:/svnroot
set DELTA_BACKUP_SVN_ROOT=D:/svnrootbak/delta
set LOG_FILE=%1/backup.log
echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%/%%~nI/hooks/deltaBackup.bat %%~nI %2
goto end
:end
通过这个脚本,可以实现D:/svnroot下的版本库提交时自动增量备份到D:/svnrootbak/delta(确定这个目录存在),其中使用的deltaBackup.bat其实可以放在任何地方,只是对脚本的svnadmin dump的包装,内容如下:

@echo 正在备份版本库%2......
%SVN_HOME%/bin/svnadmin dump %SVN_ROOT%/%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%/%1.dump
@echo 版本库%2成功备份到了%3!

以上两个脚本可以直接拷贝到project2的hooks目录下,不需要修改就可以实现project2的自动备份。

以上的操作已经OK了,现在需要做的是将完全备份和增量备份结合起来,也就是在完全备份后清理增量备份的结果,使之只保存完全备份后的结果。

当果真出现版本库的故障,就要求我们实现版本库的恢复操作了,这是用要使用svnadmin load命令,同时也需要上次的完全备份例如要把上次完全备份backuprepo,和之后的增量备份dumpfile:

svnadmin load backuprepo < dumpfile

最后的结果,可以下载svnroot.rar,将之解压缩到d:/下,然后修改几个bat文件的SVN_HOME就可以使用了。

3, 版本库同步
Subversion 1.4增加了同步机制,可以实现一个版本库同另一个版本库的同步(但好像只是单向的),我们可以用来实现版本库的备份或镜像。

3.1. 对目标库初始化
svnsync init svn://localhost/project2 svn://localhost/project1 
其中project2是目标的版本库,而project1是源版本库。其中的目标版本库必须为空,而且必须允许修订版本属性的修改,也就是在目标的版本库的hooks目录里添加一个文件pre-revprop-change.bat,内容为空即可。

3.2. 同步project2到project1
svnsync sync svn://localhost/project2 
这时候你update一下你的project2的一个工作拷贝,就会发现有了project1的所有内容。如果project1又有提交,这时候 project2的版本库无法看到最新的变化,还需要再运行一遍sync操作,这样才能将最新的变化同步。需要注意的是,目标版本库只能做成只读的,如果目标版本库发生了变更,则无法继续同步了。

3.3. 同步历史属性的修改
因为同步不会更新对历史属性的修改,所以svnsync还有子命令copy-revprops,可以同步某个版本的属性。

3.4. 钩子自动同步
希望在每次提交时同步,则需要在源版本库增加post-commit脚本,内容如下:

echo offset SVN_HOME="D:/Subversion"%SVN_HOME%/bin/svnsync sync --non-interactive svn://localhost/project2 
把以上内容存放为post-commit.bat,然后放到版本库project1下的hooks目录下,这样project1每次提交,都会引起project2的同步

分享到:
评论

相关推荐

    SVN备份操作(包括完全备份,增量备份和同步版本库)

    Subversion(简称SVN)作为一款广泛使用的集中式版本控制系统,在备份方面提供了多种机制来满足不同场景的需求,主要包括完全备份、增量备份以及版本库同步等方法。 #### 二、完全备份 完全备份是最基础也是最直接...

    svnsync同步增量备份

    ### svnsync同步增量备份详解 #### 一、概述 Subversion (SVN) 是一个广泛使用的版本控制系统,被众多开发团队用于管理源代码。在实际应用中,为了确保数据的安全性和系统的稳定性,通常需要对 SVN 仓库进行备份。...

    Svn最强大的Windows下实现自动全量增量备份和异地备份,一切自动化完成

    最强大的Svn在Windows下实现自动全备份和增量备份,以及异地备份,一切自动化完成 1.SVN备份内容 SVN在Windows下的自动备份实现,包括: 1)SVN目录的全备份(1周或1个月备份1次,由windows计划来调度执行); 2)...

    windows&linux svn自动化全备份&增量备份脚本

    - **linux下-SVN全量和增量备份脚本.docx**:这份文档可能包含了详细的Linux环境下编写SVN备份脚本的步骤和示例代码。 - **svnBackupBat.rar**:这是一个Windows批处理脚本的压缩包,可能包含全备份和增量备份的bat...

    windows下svn异地备份与还原

    在Windows环境下,Subversion(简称svn)作为一款广泛使用的版本控制系统,对于团队协作和项目管理起着至关重要的作用。...文件"svn备份与还原.txt"很可能是详细的操作步骤和指南,建议仔细阅读并按照指导进行实践。

    svn代码库如何备份到本地

    `svnsync`是一个用于在两个SVN仓库之间复制数据的工具,它可以实现增量同步,即只同步自上次同步以来发生改变的数据。 **操作命令**: 1. 初始化同步源: ```cmd svnsync init file:///d:/beifen/CYMS svn://192....

    svn_TortoiseSVN\Svn备份.doc

    本文将深入探讨SVN中的三种主要备份方式:完全备份、增量备份以及同步版本库,特别关注于如何通过自动化脚本来优化备份流程。 #### 一、完全备份 完全备份是最直接也是最基础的备份方式。在SVN中,通过简单的拷贝...

    SVN服务器几种备份策略.docx

    - 策略:每周六全量备份,周日至周五增量备份,备份存储在/home/backup/svn/,文件名根据日期命名,晚上21点执行,每月末进行恢复测试。 - 脚本:使用perl编写,例如`weekly_backup.pl`,包含全量备份命令,记录...

    windows_linux_svn_自动化全备份_增量备份_2.zip

    配置SVN备份通常涉及安装SVN服务器(如VisualSVN Server),创建仓库,然后使用命令行工具或专用备份软件来定期备份。 3. **Linux上的SVN**:在Linux环境中,通常使用命令行工具与SVN进行交互。Apache Subversion...

    svn备份方案补充

    本篇文章将详细探讨“svn备份方案补充”,主要聚焦于如何在Linux环境下实现svn版本库的自动全量备份。 首先,理解svn的核心概念至关重要。svn是一个分布式版本控制系统,它允许团队成员对同一份代码进行协作编辑,...

    SVNsync配置库同步说明

    SVNsync不仅支持增量同步,还能够在不中断服务的情况下进行数据迁移。 #### 二、SVNsync配置步骤详解 ##### 1. 准备工作 - **环境搭建**:假设您已经在两台机器上安装好了Subversion服务,这里称这两台机器分别为...

    linux svn备份方式

    我们可以通过`rsync`结合`ssh`将SVN仓库同步到另一台服务器,实现增量备份。 1. 首先,需要设置无密码SSH登录。在本地主机运行`ssh-keygen`生成RSA密钥对,然后使用`ssh-copy-id`将公钥复制到远程主机。这样,之后...

    LINUX SVN双机热备份shell脚本 附配置文档

    这可能包括定期的全量备份和增量备份,以及使用加密存储和传输来保护敏感数据。 6. **监控和日志**:为了确保系统的健康运行,应实施监控系统来追踪同步状态、错误日志和性能指标。这可以帮助我们及时发现和解决...

    svn自动备份

    - `-d` 或 `--deltas`: 使用增量备份,只备份自上次备份以来的变更,节省存储空间。 4. **备份存储与冗余** - 存储位置:备份文件应存储在与SVN服务器不同的物理位置,以防止同一灾难影响所有数据。 - 多重备份...

    配置库的备份与恢复借鉴.pdf

    - 增量备份:版本库支持增量备份,即只备份自上一个版本以来发生变化的部分。这是通过指定起始修订版本(revision)来实现的。 - 使用gzip压缩:备份时可使用gzip工具来压缩dump文件,以便节省存储空间,同时加快...

    文件自动备份脚本WithSVN

    "AutoCommit.bat"可能是实现自动备份的关键脚本,它可能包含定时任务或事件触发器,定期执行SVN的提交操作,将文件系统的变化同步到SVN仓库中。这种自动化的备份流程可以确保在设定的时间间隔内,文件系统的最新状态...

    SVN等多种工具备份批处理文档

    首先,让我们关注SVN备份。SVN本身并不直接支持自动备份,但可以通过脚本或批处理文件实现。通常,这包括以下步骤: 1. 使用`svnadmin dump`命令创建SVN仓库的完整或增量备份。完整备份将获取仓库的全部内容,而...

    SVN 工程同步器

    SVN(Subversion)是一种广泛使用的版本控制系统,它允许团队成员协同工作,管理代码库中的文件和目录,确保每个人都在同一版本上进行开发。"SVN 工程同步器"是一个工具,它专为团队协作设计,目的是简化项目版本的...

    跨服务器备份数据库(包括建立JOB)

    - 增量备份:只备份自上次完全或增量备份以来发生更改的数据。这种方式可以减少备份时间和存储需求。 - 差异备份:与增量备份类似,但差异备份仅记录自上次完全备份以来的变化。 2. **跨服务器传输**: - 使用...

    svn-1.4.5 svn-1.4.5

    这包括对版本库的增量备份和快速恢复,降低了因硬件故障或其他原因导致的数据丢失风险。 6. 权限管理: 在这一版本中,权限管理可能得到了强化,允许管理员更精细地控制用户对版本库的访问权限,包括读、写、执行...

Global site tag (gtag.js) - Google Analytics