企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏、误操作造成数据无法恢复的灾难性后果。因此制定一个完整的备份策略非常重要。 一般来说,备份策略应规定如下几部分内容:备份频度、备份方式、备份存放地点、备份责任人、灾难恢复检查措施及规定。 备份频度、存放地点等内容可以根据自己的实际情况自行制定;本文重点描述备份方式。 svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync. 注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。 笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。 优缺点分析: 第一种svnadmin dump是官方推荐的备份方式 优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。 缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时,文件巨大;不利于快速进行灾难恢复。 个人建议在版本数比较小的情况下使用这种备份方式。 第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份; 优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。 缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。 第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。 优点是:当制作成2个镜像库的时候起到双机实时备份的作用; 缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。 下面具体描述这三种的备份的方法: dump方法 因为需要,需要将Server A 上SVN仓库 repos1中的项目pro1迁移到Server B 上的SVN仓库中。 1、复制,做了一下尝试,重新启动svn,测试OK 2、先把项目pro1 checkout到本地,然后再将本地的项目 import 到 ServerB的svn仓库中,但这样一来,ServerB上的SVN仓库中 就好比完全是一个新的pro1项目了,也就失去了svn管理的意义了。 下面的方法是在网上找到的,整理了一下: 在进行下面的操作时,请注意备份仓库数据,以免操作出错,损坏数据;同时保证需要迁移的项目,都已经commit,以免丢失修改。 1.首先关闭两台服务器的svn所有服务,比如(apache、svn),(以避免在进行迁移时又有其他的用户访问提交,更新什么的 2.将ServerA上的 项目pro1所在的仓库进行备份,使用命令: svnadmin dump oldrepos > reposdumpfile 上面的oldrepos表示服务器Server1上需要备份的仓库,如:/home/svn/svnrepo,reposdumpfile表示一个中转的文件; 运行完上面的命名后,文件reposdumpfile就存储了仓库oldrepos的信息和所有项目; 3.如果需要将Server A上repos1中的所有项目迁移到Server2上,则将reposdumpfile文件直接拷贝到Server2上,然后转到步骤5; 4.如果我们只需要repos1仓库中的pro1则我们需还要对reposdumpfile文件进行过滤,命令如下: svndumpfilter include pro1 < reposdumpfile< pro1dumpfile 上面的 include 表示 包含的意思,也就是说,将reposdumpfile中的 pro1 的项目取来放到文件 pro1dumpfile 中;如果使用 exclude 这表示相反的意思,将不是项目pro1的项目存放到文件中去;然后将pro1dumpfile文件拷贝到Server2上; 5.在Server2上运行如下命令,则完成了项目的迁移; 5.1 创建新的svn仓库 svnadmin create newrepo 5.2 导入数据到仓库 svnadmin load newrepo < pro1dumpfile 上面的newrepos表示:Server2电脑上的 svn仓库的路径 如:/home/svn/repomove 6.最后打开svn服务,这样就成功的将项目迁移到了其他仓库中 7.校验转移前后文件是否一致 在两台服务器上打包之后进行md5校验 2、svnsync备份 ----------------------- 参阅:http://www.scmbbs.com/cn/svntp/2007/11/svntp4.php 使用svnsync备份很简单,步骤如下: 1)在备份机上创建一个空库:svnadmin create Project1 2)更改该库的钩子脚本pre-revprop-change(因为svnsync要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本): cd SMP/hooks; cp pre-revprop-change.tmpl pre-revprop-change; chmod 755 pre-revprop-change; vi pre-revprop-change; 将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。 3)初始化,此时还没有备份任何数据: svnsync init file:///home/backup/svn/svnsync/Project1/ http://svntest.subversion.com/repos/Project1 语法是:svnsync init {你刚创建的库url} {源库url} 注意本地url是三个斜杠的:/// 4)开始备份(同步): svnsync sync file:///home/backup/svn/svnsync/Project1 5)建立同步脚本 备份完毕后,建立钩子脚本进行同步。在源库/hooks/下建立/修改post-commit脚本,在其中增加一行,内容如下: /usr/bin/svnsync sync --non-interactive file:///home/backup/svn/svnsync/Project1 你可能已经注意到上面的备份似乎都是本地备份,不是异地备份。实际上,我是通过将远程的备份机mount(请参阅mount命令)到svn服务器上来实现的,逻辑上看起来是本地备份,物理上实际是异地备份。