版本管理工具Subversion Edge的备份恢复与数据迁移方案

在这里插入图片描述
软件开发生命周期中会使用到多种工具,这些工具的更迭与迁移,备份与恢复都构成了软件开发生命周期的重要部分。这篇文章以当下最新版本的Subversion Edge为例介绍一下其备份恢复与数据迁移方案,因相关内容官方资料不全,类似内容较少,所以进行了此部分整理。在这篇文章中获取当下最新的版本进行了验证,对于实际的使用者相信有较强的借鉴作用。


Subversion Edge的前世今生

2017年8月7日,CollabNet和VersionOne宣布合并,合并后公司保留CollabNet的名称,总部设与亚特兰大,CollabNet首席执行官Flint Brenton将担任合并后公司的CEO,VersionOne的首席执行官Robert Holler将担任首席战略官。作为被Garnter和IDC所青睐的敏捷开发的创新者的VersionOne,一直具有较为稳定的地位,而CollabNet依托与Subversion Edge和Team Forge等也有着不错的口碑。Subversion Edge还是收到很多SVN的使用者的喜爱和追随的。

Subversion Edge的优势

直接使用Subversion,需要配置Apache以及http方式的插件,对于很多运维新手来说非常麻烦,另外如何通过浏览器更好的浏览代码,也需要自行组装ViewVC等工具。而使用Subversion Edge,则可以直接如下等诸多功能:

  • 提供整体的Web页面对用户/权限进行统一管理
  • 内嵌直接提供svn和http协议的访问方式
  • 提供ViewVC的浏览器代码查阅方式
  • 提供基本可用RestAPI可以通过API进行用户和仓库的管理
  • 提供了简单的备份和恢复方式
  • 提供了页面对于svn用户和组进行权限设定的页面

所以可以看到Subversion Edge基本上可以满足大部分功能要求不是很强的中小规模的svn用户群体的需求。


版本事实停更的尴尬

当我们提及版本管理工具,Git和SVN是必提的两个代表,然而,SVN作为存在感逐年弱化的版本管理工具,虽然有众多追随者,但是当下整体没落的趋势已经无法抵挡。半商业化工具Subversion Edge的版本迭代速度已经印证了这一观点,虽然官方还没有说过放弃Edge,但是看一下最新的版本你会发现,目前官网最新版本的Subversion Edge 为5.2.4,所对应的subversion的版本为1.8.19,而官方subversion的1.8版本的更新在2017年后已不再更新,3年不更说明什么?更新不是不及时,而是根本已经是事实上的停新。


Edge环境准备

环境的安装由于官方为提供容器版本,我曾经整理过一键安装脚本,在CentOS的环境上从svn的用户和组的创建一直到防火墙中端口的打开都有设定,一般从官网下载下来相应的tar.gz安装包直接执行即可,详细可参看:

然后在此环境中准备如下的仓库:
在这里插入图片描述
以及如下的用户信息
在这里插入图片描述
后面可以用来确认数据迁移之后相应的仓库和用户信息是否得到了恢复。


备份恢复功能

前文提到Subversion Edge提供了简单的备份/恢复的功能,接下来可以具体来看一下其备份和恢复相关的使用方式。具体的备份方式主要有如下两种

备份方式1:手动备份

可以从页面进行点击选择相应的仓库,然后点击dump按钮即可(当前最新版本只能一个一个的选择)
在这里插入图片描述
然后输入序号或者直接点击Dump按钮即可完成备份
在这里插入图片描述
需要注意的是,这是一个异步操作,实际的完成可能还需要一点时间
在这里插入图片描述
稍等片刻再次刷新即可看到备份的dump的压缩文件了
在这里插入图片描述
而进入到此时csvn的data/dumps目录下也可以看到此文件

[root@liumiaocn demo-repo]# pwd
/opt/subversion/csvn/data/dumps/demo-repo
[root@liumiaocn demo-repo]# ls
demo-repo-r0_6-20201029081030.dump.zip
[root@liumiaocn demo-repo]# 

备份方式2:定时备份

也可以根据需要创建定时任务,支持在指定时间进行全备或者热备(注意没有增量备份)
在这里插入图片描述


恢复功能

Subversion Edge提供的恢复功能在创建仓库中可以从备份中进行选择,首先我们将备份过的仓库选中之后点击删除按钮
在这里插入图片描述
为了防止误删,需要手工输入I_AM_SURE来确认确实要删除
在这里插入图片描述
点击OK之后即删除
在这里插入图片描述
而此时如果到csvn所在的服务器上进行查看,发现至少此时在repositories的目录中确实已经不再存在。

[root@liumiaocn repositories]# pwd
/opt/subversion/csvn/data/repositories
[root@liumiaocn repositories]# ls
test-repo
[root@liumiaocn repositories]# 

这样就做好了恢复之前的准备了,恢复的过程首先要点击仓库列表页面的Create按钮
在这里插入图片描述
选择Back,即可看到已经备份的dump文件信息
在这里插入图片描述
设定Name信息,然后点击Create按钮即可完成恢复
在这里插入图片描述
再次点击仓库列表页面可以看到确实删除的demo-repo已经恢复
在这里插入图片描述


备份恢复限制

此功能看起来非常正常地能够完成备份和恢复,问题来了,如果需要做迁移,比如只是迁移到另外一台机器上,在另外一台机器上安装相同的Subversion Edge,然后将此zip的dump文件拷贝过去,能不能通过Create的方式恢复呢?让我们来看一下这个Dump文件的内容

[root@liumiaocn demo-repo]# ls demo-repo-r0_6-20201029081030.dump.zip 
demo-repo-r0_6-20201029081030.dump.zip
[root@liumiaocn demo-repo]# unzip demo-repo-r0_6-20201029081030.dump.zip 
Archive:  demo-repo-r0_6-20201029081030.dump.zip
  inflating: demo-repo-r0_6-20201029081030.dump  
[root@liumiaocn demo-repo]# cat demo-repo-r0_6-20201029081030.dump
SVN-fs-dump-format-version: 2

UUID: 9b139063-c713-456d-b23c-f1926d238d7b

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2020-08-23T21:07:31.460781Z
PROPS-END

Revision-number: 1
Prop-content-length: 131
Content-length: 131

K 10
svn:author
V 3
svn
K 8
svn:date
V 27
2020-08-23T21:07:31.931052Z
K 7
svn:log
V 33
Creating_initial_branch_structure
PROPS-END

Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: tags
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END


Revision-number: 2
Prop-content-length: 126
Content-length: 126

K 10
svn:author
V 5
admin
K 8
svn:date
V 27
2020-08-23T21:42:42.442230Z
K 7
svn:log
V 26
commit in MacOS SVN client
PROPS-END

Node-path: trunk/ReadME.md
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 17
Text-content-md5: 967a4e1508e0a424b97a18f782c80f13
Text-content-sha1: dafd24ff94cb6a3e81fafbadd94b938a9e7a1325
Content-length: 27

PROPS-END
Created in MacOS


Revision-number: 3
Prop-content-length: 99
Content-length: 99

K 10
svn:author
V 5
admin
K 8
svn:date
V 27
2020-08-23T23:07:17.742198Z
K 7
svn:log
V 0

PROPS-END

Node-path: trunk/ReadME.md
Node-kind: file
Node-action: change
Text-content-length: 42
Text-content-md5: f52fcc2387ae9480823946c29636095a
Text-content-sha1: 64fdf2ffdefb9bd3d000fec6846a8dedfe7b7347
Content-length: 42

Created in MacOS
test for pre-commit hook


Revision-number: 4
Prop-content-length: 99
Content-length: 99

K 10
svn:author
V 5
admin
K 8
svn:date
V 27
2020-08-23T23:08:42.796810Z
K 7
svn:log
V 0

PROPS-END

Node-path: trunk/ReadME.md
Node-kind: file
Node-action: change
Text-content-length: 62
Text-content-md5: c6cb69cff8bdcb3153036d1ff9409b32
Text-content-sha1: 51dbf272854b88e832bb3600e95af977c1840c12
Content-length: 62

Created in MacOS
test for pre-commit hook
new line for ReadMe


Revision-number: 5
Prop-content-length: 99
Content-length: 99

K 10
svn:author
V 5
admin
K 8
svn:date
V 27
2020-08-23T23:16:10.296062Z
K 7
svn:log
V 0

PROPS-END

Node-path: trunk/ReadME.md
Node-kind: file
Node-action: change
Text-content-length: 87
Text-content-md5: a18400b16549c205b32a5f5f6652ff1a
Text-content-sha1: dd58eb1faeee9fc6f51cec5aded66cfabbdf45fa
Content-length: 87

Created in MacOS
test for pre-commit hook
new line for ReadMe
test for pre-commit hook


Revision-number: 6
Prop-content-length: 99
Content-length: 99

K 10
svn:author
V 5
admin
K 8
svn:date
V 27
2020-08-24T08:45:49.531467Z
K 7
svn:log
V 0

PROPS-END

Node-path: trunk/ReadME.md
Node-kind: file
Node-action: change
Text-content-length: 106
Text-content-md5: 7844d119c03ee940202f3bad0549c73b
Text-content-sha1: cb0cd44e406563a7b4074c511c961ecde05dd0d6
Content-length: 106

Created in MacOS
test for pre-commit hook
new line for ReadMe
test for pre-commit hook
add for root test 


[root@liumiaocn demo-repo]# 

看完之后就会发现,不可以,因为它只是一个简单的文本信息的文件。因为明显地看出此删除不是真正的删除,而是标记一下,此Dump也非真正意义上的可以直接用来恢复的数据,而是根据本机上的其他数据进行恢复的部分信息而已,所以备份和恢复的功能只能在本机上使用,而且还有一部分比如数据库使用到的数据的部分也需要进行备份的。


数据迁移

场景:如果需要将此Edge运行在另外一台机器上,需要做进行怎样的步骤和进行怎样的准备呢?

步骤1: 事前备份

进行如下部分内容的备份:

所在目录备份对象备份对象说明
/opt/subversion/csvn/datacsvn-production-hsqldb.scriptEdge本身的数据库用户以及Job等信息都在此文件中保存
/opt/subversion/csvn/data/confsvn_auth_file用户和密码信息
/opt/subversion/csvn/data/confsvn_access_file用户和组的权限控制信息
/opt/subversion/csvn/data/repositories所有仓库目录svn的所有仓库内容

将上述内容全部进行备份即可,其余不用。


步骤2: 安装Subversion Edge

在目标机器上安装相同版本的Subversion Edge,建议安装目录也保持一致。详细可参看:


步骤3: 停止Subversion Edge

停止刚刚安装并启动成功的Subversion Edge(此步骤非常重要,尤其是后续的script文件和设定文件,如果在启动状态下,会出现被覆盖的问题)

执行命令:service csvn stop
执行命令:service csvn-httpd stop


步骤4: 拷贝事前备份内容

拷贝事前备份的内容至目标机器

所在目录备份对象备份对象说明
/opt/subversion/csvn/datacsvn-production-hsqldb.scriptEdge本身的数据库用户以及Job等信息都在此文件中保存
/opt/subversion/csvn/data/confsvn_auth_file用户和密码信息
/opt/subversion/csvn/data/confsvn_access_file用户和组的权限控制信息
/opt/subversion/csvn/data/repositories所有仓库目录svn的所有仓库内容

## 步骤5: 启动Subversion Edge服务 使用如下命令启动Subversion Edge服务或者重启机器。 >执行命令:service csvn start >执行命令:service csvn-httpd start

步骤6: 点击仓库列表中的Discover按钮

拷贝过去的仓库信息在仓库中可能看不到,这时只需要点击仓库列表中的Discover按钮,就可以看到迁移的相关仓库了。


总结

这篇文章介绍了Subversion Edge的备份恢复功能以及数据迁移的方案,对于实际的使用有一定的参考意义。

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页