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;
2)同步源服務器的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】。即可檢出。
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)KaTeX parse error: Expected 'EOF', got '#' at position 33: …nux/downloads/ #̲在源服務器上操作【創建目錄】用…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
[root@localhost pro1dir]# svn info
Path: .
Working Copy Root Path: /home/linux/downloads/svntestprojects/pro1dir
URL: svn://10.80.80.234
Repository Root: svn://10.80.80.234
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)