因為公司最近SVN服務器的文件特別多,數據量很大,有500g,而用於備份的外接磁盤除了故障,因此需要在這段時間對svn服務器上的數據做備份,所以特地研究了下svn庫的備份,因為平時不怎麼接觸服務端,一般就用svn客戶端TortoisSVN對代碼checkOut,commit,update簡單的操作。所以整理了份不同服務器間進行庫備份的文檔,並記錄下來,供大家參考,也方便日後復用。svn備份一般采用三種方式:1)svnadmindump2)svnadminhotcopy3)svnsync優缺點分析==============第一種svnadmindump是官方推薦的備份方式,優點是比較靈活,可以全量備份也可以增量備份,並提供了版本恢復機制。缺點是:如果版本比較大,如版本數增長到數萬、數十萬,那麼dump的過程將非常慢;備份耗時,恢復更耗時;不利於快速進行災難恢復。個人建議在版本數比較小的情況下使用這種備份方式。第二種svnadminhotcopy原設計目的估計不是用來備份的,只能進行全量拷貝,不能進行增量備份;優點是:備份過程較快,災難恢復也很快;如果備份機上已經搭建了svn服務,甚至不需要恢復,只需要進行簡單配置即可切換到備份庫上工作。缺點是:比較耗費硬盤,需要有較大的硬盤支持(俺的備份機有1TB空間,呵呵)。第三種svnsync實際上是制作2個鏡像庫,當一個壞了的時候,可以迅速切換到另一個。不過,必須svn1.4版本以上才支持這個功能。優點是:當制作成2個鏡像庫的時候起到雙機實時備份的作用;缺點是:當作為2個鏡像庫使用時,沒辦法做到“想完全拋棄今天的修改恢復到昨晚的樣子”;而當作為普通備份機制每日備份時,操作又較前2種方法麻煩。注:上述介紹摘自網絡下面進入正題,筆者今天介紹的是第三種方式。--------------------------------------------------------------------------------------------------本文中設備:Window筆記本(Lenovoy400)ip:10.16.122.49庫d:/
VMware虛擬機(Centos6.7)ip:192.168.193.100庫/repo/svn/svn-mirror本文做備份采用的SVNServer提供的svnsync命令,這種方式備份其實就是做鏡像,備份服務器上安裝SVNServer(SubVersion)即可提供svn服務雖然文中將的是是window同步至linux,其實反之或者同類型服務器之間都類似,不同的是腳本類型不同window腳本*.bat,Linux腳本隨意命名,需要賦予執行權限
window上打開VisualSVNServerManager選擇Action(操作)—Properties如下圖:1,Network選項卡中將Usesecureconnection(https://)前的復選框去掉勾選,2,看圖
直至創建self-signedcertificate結束。注
:
如果沒有上述的准備的話在
linux
上執行下面的
svnsyncinitfile:////usr/backuprepohttp://yao-pc/svn/MyRepository01/
時候,會報:
SSLhandshakefailed:SSL
錯誤:
Keyusageviolationincertificatehasbeendetected
的錯,因為
virtualsvn
在生成鑒權數據的時候使用了一個插件,而這個插件是
OpenSSL
支持的,但
GnuTls
是不支持
Linux
服務器端操作
1,
創建
Linux
用戶和用戶組
(
重要
)
此用戶是使用
http
協議訪問
svn
庫的認證用戶
[code]#groupaddadmin
[code]#useraddadmin1-gadmin
[code]#passwdadmin1
2,linux服務器中安裝SubVersion命令:[code]#yuminstallsubversion
[code]#yuminstallmod_dav_svn
#
為了
http
協議
http://ip/repo
訪問
svn
庫
,
默認只能
svn://ip/repo
形式
3,創建版本庫svn-mirror(隨意取名)[code]#mkdir–p/repo/svn
#
創建存放
svn
庫的根目錄
[code]#
svnadmincreate/repo/svn/svn-mirror[/code]4將/repo授權給用戶admin1及其組#chown–Radmin1:admin/repo
5,配置備份SVN(Linux)的pre-revprop-changehook(鉤子)[code]#cd/repo/svn/svn-mirror/hooks
[code]#cppre-revprop-change.tmplpre-revprop-change
[code]#chmod+xpre-revprop-change
[code]#vimpre-revprop-change
[code]清空並添加如下腳本
[code]#!/bin/sh
[code]USER="$3"
[code]if["$USER"="admin1"];thenexit0;fi
[code]
[code]echo"Onlytheadmin1usermaychangerevisionproperties">&2
[code]exit1
6,配置備份SVN的start-commithook(可選,但建議配上)[code]#cpstart-commit.tmplstart-commit
[code]#chmod+xstart-commit
[code]#vimstart-commit
[code]清空並添加如下腳本
[code]#!/bin/sh
[code]USER="$2"
[code]if["$USER"="admin1"];thenexit0;fi
[code]
[code]echo"Onlytheadmin1usermaychangerevisionproperties">&2
[code]exit1
注:建議7,8,9步驟(采用本地文件路徑file:///)可以先忽略,待至第二部分配置svn的http訪問(采用http模式)結束後再初始化和同步以及啟動
7,初始化備份SVN[code]#svnsyncinitfile:///
repo/svn/svn-mirror'target='_blank'>http://10.16.122.49/svn/MyRepository01/[/code]8,同步版本庫[code]#svnsyncsyncfile:///
repo/svn/svn-mirror[/code]9,啟動svnserver[code]#svnserve-d-r/
repo/svn#/usr
為
svn
根目錄
即創建版本倉庫
svn-mirror
的目錄
[code]參數
--listen-port3691
可以指定端口
默認
3690
配置svn的http訪問
1編輯httpd.conf[code]#vim/etc/httpd/conf/httpd.conf
ServerNamelocalhost:80#去掉前面的#號User:admin1#將用戶名更改為admin1為了下文root啟動httpd時候用admin1運行Group:admin#將組名更改為admin2編輯subversion.conf配置文件[code]#vim/etc/httpd/conf.d/subversion.conf
增加:<Location/svn-mirror>DAVsvnSVNPath/repo/svn/svn-mirror#前文創建的版本庫</Location>3添加用戶認證在上一步中浏覽器訪問時候任何人都可以匿名訪問,並且擁有寫入,讀取,刪除權限,這不安全,下面配置用戶寫入時需認證[code]#mkdir-p/etc/svn
[code]#htpasswd–c/etc/svn/svnusers.conf
admin1
[code]Newpassword:
[code]Re-typenewpassword:
[code]Addingpasswordforuseradmin1
4修改上文步驟2中配置的subversion.conf文件:[code]<Location/svn-mirror>
[code]DAVsvn
[code]SVNPath/repo/svn/svn-mirror
[code]
#
對庫的寫權限需要用戶認證,訪問讀取時不受限制的
[code]<LimitExceptGETPROPFINDOPTIONSREPORT>
[code]
#
使用用戶名和密碼認證
[code]AuthTypeBasic
[code]
#
認證對話框中提示信息
[code]AuthName"AuthorizationRealm"
[code]
#
認證用戶的文件路徑
[code]AuthUserFile/etc/svn/svnusers.conf
[code]
#
只有認證正確才能訪問
svn
庫
[code]Requirevalid-user
[code]</LimitExcept>
[code]</Location>
5開啟httpd服務[code]#apachectlstart
#root
用戶啟動
[code]浏覽器訪問
http://192.168.193.100/
svn-mirror
[code]注:
svn-mirror
為
subversion.conf
中配置的
<Location/
svn-mirror
>,名稱可以隨意配置
6更改配置/home/admin1/.subversion/servers#vim/home/admin1/.subversion/servers
#
將前面的
#
號放開,並改為
yes
,為了取消在同步時候需要互動(手動填寫提示信息)
store-plaintext-passwords=yes
7
初始化
svn
庫
(Linux
上執行
)
#svnsyncinithttp://192.168.193.100/svn-mirrorhttp://10.16.122.49/svn/MyRepository01/--usernameadmin1–-password123456
8
同步
svn
庫
#svnsyncsynchttp://192.168.193.100/svn-mirror--usernameadmin1--password123456
測試
新建任意文件提交至MyRepository01
庫中,檢查
svn-mirror
庫中的文件是否已經更新