svn备份

1.1 svn备份


环境请参考svn安装与使用
两边配置保持一样比较好,避免出错

1.1.1 svn主安装版本库

我这里还是写一下

  1. 安装版本库
[root@svn ~]# yum install subversion -y
  1. 创建存储目录
[root@svn ~]# mkdir /svn
[root@svn ~]# svnadmin create /svn/test
  1. 修改配置文件
[root@svn ~]# cd /svn/test
[root@svn test]# cat svnserve.conf
[general]
anon-access = read 
auth-access = write
password-db = passwd
authz-db = authz
realm = This is My First Test Repository   ##这个是提示信息

[root@svn test]# cat passwd
[users]
test = 123456

[root@svn test]# cat authz
[test:/]
test = rw
* = r
  1. 启动svn
$ svnserve -d -r /svn

svnbackup安装svn版本库

[root@svn_backup ~]# yum -y install subversion
[root@svn_backup ~]# svnadmin create /svn/test  #创建恢复库,配置文件和主保持一致。复制即可
[root@svn_backup ~]# svnserve -d -r /svn/   #启动svn

1.2 svn三种备份方式

svn备份一般采用三种方式:
1)svnadmin dump
2)svnadmin hotcopy
3)svnsync
注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。
笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份

1.2.1 svnadmin dump

优缺点解析
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。

备份版本库

[root@svn ~]# svnadmin dump /svn/test/ >/tmp/test.dump  #备份
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
[root@svn ~]# scp /tmp/test.dump 10.0.0.11:/tmp  #将备份传到svnbackup服务器

恢复版本库并重启svn

[root@svn_backup ~]# svnadmin load /svn/backup </tmp/test.dump

使用客户端就可以拉取备份机器上面的代码了

1.2.2 svnadmin hotcopy

第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持

备份版本库

[root@svn ~]# svnadmin hotcopy --clean-logs /svn/test /tmp/test.hotcopy.dump
如果添加 –clean-logs 选项,则 svnadmin 会先执行热拷贝,然后删除不用的Berkeley DB日志文件

还原版本库并重启svn

[root@svn_backup ~]# svnadmin hotcopy /tmp/test.hotcopy.dump/ /svn/backup

1.2.3 svnsync 双机热备

本人就是使用个这种方式,原因是,主的svn宕机之后了,将从的svn的服务器的ip改为主的ip直接接着使用,反正开发就是要这么干,下面说说部署方式及流程

  1. 首先两台机器,一台主,一台备
  2. 两边配置要保持一样
  3. 配置pre-revprop-change hook( 钩子)
  4. svnsync init初始化
  5. 测试数据同步
  6. 在来源SVN配置post-commit hook,启用实时备份

**修改备份SVN库里的钩子脚本pre-revprop-change **

[root@svn_backup ~]# cd /svn/test/hooks/
[root@svn_backup hooks]# cp pre-revprop-change.tmpl pre-revprop-change
[root@svn_backup hooks]# vim pre-revprop-change 将最后一行改为exit 0,或者直接把该文件清空
[root@svn_backup hooks]# chmod +x pre-revprop-change

初始化同步设定

[root@svn_backup hooks]# svnsync init file:///svn/test svn://10.0.0.10/test
Copied properties for revision 0.   #表示成功

语法是:svnsync init {你刚创建的库url} {源库url}
注意本地url是三个斜杠的:///

开始同步

[root@svn_backup hooks]# svnsync sync file:///svn/test
Transmitting file data .................................................................................................................................................................................
Committed revision 1.
Copied properties for revision 1.
Transmitting file data .
Committed revision 2.
Copied properties for revision 2.
Transmitting file data .
Committed revision 3.
Copied properties for revision 3.

##代表同步成功了

**在来源SVN配置post-commit hook,启用实时备份 **

[root@svn hooks]# cd 
[root@svn ~]# cd /svn/test/hooks/
[root@svn hooks]# cp post-commit.tmpl post-commit
[root@svn hooks]# chmod +x post-commit
[root@svn hooks]# vim post-commit  #最后面加上
svnsync synchronize --non-interactive svn://10.0.0.11/test  --username test --password 123456

测试是否同步,在客户端svn主的工作目录中新建一个文件,查看svn从的工作目录中是否存在就可以了

  1. 在数据同步完成之后将从的svn test工作目录checkout下来
  2. 首先要checkout svn主的test,把目录checkout下来
  3. 配置post-commit
  4. 配置完成svn主工作目录创建文件并提交,svn从目录只需要update更新一下就能看到是否有文件了

svn删除上传错误版本

原文地址:https://www.cnblogs.com/blsnt/p/10144916.html