Linux下svn服务器迁移

1.介绍迁移方式:
1.由于项目工作需要进行svn服务器的迁移,对此简要介绍svn服务器的迁移方案。
2.主要迁移方式:

svnadmin dump
svnadmin hotcopy
svnsync
3.【svnadmin dump】是官方推荐的备份方式。

优点:比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复,建议在版本数比较小的情况下使用这种备份方式。
4.【svnadmin hotcopy】只能进行全量拷贝,不能进行增量备份;

优点:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点:比较耗费硬盘,需要有较大的硬盘支持。
5.【svnsync】直接同步源机器代码库,实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。

优点:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。
6.实际上在Linux下将svn从一台源服务器迁移到另一台目标服务器的操作过程分2步:

1)安装SVN服务端:根据源服务器的svn版本,在目标服务器安装同样版本或者相近版本的SVN;  
2)同步SVN仓库:同步源服务器的SVN代码仓库到目标服务器上。  

2.具体步骤:
由于本人目前处理的svn仓库容量也就几个G而已,所以本文就针对自己的需求以【svnadmin dump】举例进行svn的迁移介绍。

2.1安装svn
1.下面就先具体地介绍安装配置svn服务端,待操作完这一步后续在待迁移目标服务器上安装配置svn服务端就比较方便顺手了。

1.yum方式安装或者源码编译安装svn服务端。这里以yum方式安装为例(假设当前在Linux下已经切换至root用户):  
$yum install subversion    #即可安装svn服务端
$svn help                #查看svn帮助手册
$svn --version            #查看svn当前版本
2.创建svn仓库目录:
$mkdir -p /home/www/svn/web/
$svnadmin create /home/www/svn/web/
3.经【上述第二步】后在/home/www/svn/web下会生成一个svn的仓库工作空间。使用以下查看目录树:  
$tree /home/www/svn/web
4.显示的目录树类似以下结果:
[root@bogon web]# tree /home/www/svn/web
/home/www/svn/web
├── conf
│   ├── authz
│   ├── authz.bak
│   ├── passwd
│   ├── passwd.bak
│   ├── svnserve.conf
│   └── svnserve.conf.bak
├── db
│   ├── current
│   ├── format
│   ├── fsfs.conf
│   ├── fs-type
│   ├── min-unpacked-rev
│   ├── rep-cache.db
│   ├── revprops
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       └── 2
│   ├── revs
│   │   └── 0
│   │       ├── 0
│   │       ├── 1
│   │       └── 2
│   ├── transactions
│   ├── txn-current
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid
│   └── write-lock
├── format
├── hooks
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks
│   ├── db.lock
│   └── db-logs.lock
└── README.txt

10 directories, 35 files
[root@bogon web]# 
5./home/www/svn/web/conf下以.conf结尾的文件:svn仓库的配置。
conf
├── authz:权限控制文件
├── authz.bak
├── passwd:帐号密码文件
├── passwd.bak
├── svnserve.conf:SVN服务配置文件
└── svnserve.conf.bak
6.编辑authz权限控制:
$vim /home/www/svn/web/conf/authz
[/]                    :仓库下所有文件/文件夹
yunwei=rw            :【yunwei】用户具有读写权限
test=r                :【test】用户具有只读权限
*=                    :除上述俩用户外,其他用户没有任何权限
7.编辑passwd账号密码:
$vim /home/www/svn/web/conf/passwd
[users]
yunwei=yunwei        :用户名=密码
8.编辑svnserve.coonf服务配置:
$vim /home/www/svn/web/conf/svnserve.conf
[general]
anon-access=none            :匿名用户没有访问权限
auth-access=write            :已经被授权的用户具有写权限操作的权利
password-db=passwd            :密码信息的文件路径(路径相对于本svnserve.conf而言)
authz-db=authz                :访问控制文件信息的文件路径(路径相对于本svnserve.conf而言)
realm=/home/www/svn/web/    :认证命名空间,svn会在认证提示里显示。
9.启动svn服务端:
$svnserve -d -r /home/www/svn/web  #-d:守护进程;-r:后台运行
10.查看svn进程:
$ps -ef|grep svn
11.如果想要停掉SVN服务,可以下面这样子操作:
$killall svnserve
12.【Windows客户端TortoiseSVN】连接svn服务端,进行检出获取仓库数据:
1)对话框输入地址:【svn://ip地址:端口】    
#ip地址:待检出的svn服务端ip地址    
#端口:默认3690
#这样子一来就可以用来获取这个svn服务端的仓库数据。
2)输入【用户名,如:yunwei】,【密码,如:yunwei】。即可检出。
View Code

2.准备好源服务器和目标服务器。本文假设svn源服务器:10.80.80.238,svn目标服务器:10.80.80.234,svn目标服务器已经完成了svn服务端安装。

2.2使用【svnadmin dump】迁移svn代码仓库
前提说明:源服务器10.80.80.238的svn仓库目录【/home/svn/】,待操作的目标服务器10.80.80.234仓库目录【/home/www/svn/web】,俩服务器svn服务端口均使用默认端口3690。
具体细节:
1)$mkdir -p /home/linux/downloads/ #在源服务器上操作【创建目录】用于存放备份出来的仓库
2)$svnadmin dump /home/svn/ > /home/linux/downloads/svnRepos.dump.backup
#在源服务器备份svn仓库
#svnRepos.dump.backup :已备份好的svn仓库
3)使用【scp把/home/linux/downloads/svnRepos.dump.backup从源服务器传输到目标服务器】或者【sz下载至本地然后rz上传至目标服务器】。
4)假设源服务器的仓库已经备份至目标服务器的【/home/linux/svnbackupdir/svnRepos.dump.backup】
5)加载到目标服务器仓库:
$svnadmin load /home/www/svn/web < /home/linux/svnbackupdir/svnRepos.dump.backup
6)拷贝源服务器【/home/svn/conf】下的3个配置文件至目标服务器【/home/www/svn/web/conf】。
7)启动目标服务器:
$svnserve -d -r /home/www/svn/web/
由于服务端svn的ip地址变更了导致原有的客户端如果不做配置变更那就无法连接服务端,所以客户端想要连接到目标服务器svn需进行类似如下的操作变更:
1)Windows下【TortoiseSVN】对仓库目录做变更【鼠标右键】:


【确定】完即可。
2)Linux下,对客户端连接变更:
2.1)本地仓库路径:【/home/linux/downloads/svntestprojects/pro1dir/】。使用【$svn info】查看连接信息,结果类似如下(可看到源服务器ip:10.80.80.238)

[root@localhost pro1dir]# svn info
Path: .
Working Copy Root Path: /home/linux/downloads/svntestprojects/pro1dir
URL: svn://10.80.80.238
Repository Root: svn://10.80.80.238
Repository UUID: d40b338c-41be-439f-aade-8b6a1aebb690
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: yunwei
Last Changed Rev: 2
Last Changed Date: 2019-01-07 15:11:39 +0800 (Mon, 07 Jan 2019)

2.2)变更:
​ $svn switch --relocate svn://10.80.80.238 svn://10.80.80.234
​ #过程中输入本地【root】密码->输入目标服务器svn被授权的用户名和密码->进行验证->验证成功->接着连接到目标服务端svn即可。
​ $svn info

posted @ 2020-03-12 13:24  山河永慕~  阅读(1293)  评论(0编辑  收藏  举报