歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> SVN版本庫實時備份整理

SVN版本庫實時備份整理

日期:2017/3/3 12:22:09   编辑:Linux技術
因為公司最近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:/
Repositories/MyRepository01
VMware虛擬機(Centos6.7)ip:192.168.193.100庫/repo/svn/svn-mirror本文做備份采用的SVNServer提供的svnsync命令,這種方式備份其實就是做鏡像,備份服務器上安裝SVNServer(SubVersion)即可提供svn服務雖然文中將的是是window同步至linux,其實反之或者同類型服務器之間都類似,不同的是腳本類型不同window腳本*.bat,Linux腳本隨意命名,需要賦予執行權限

windows需准備工作:

1更改window服務器上的同步庫配置文件
進入安裝
SVNServer
時配置的的倉庫目錄
D:\Repositories\MyRepository01\hooks
復制
post-commit.tmpl
文件
,
重命名
post-commit.bat
並編輯,
刪除尾部沒有以
#
開始的所有行,並在尾部加入:
svnsyncsync--non-interactivehttp://192.168.193.100/svn-mirror--usernameadmin1--password123456
注:參數
--non-interactive
為非交互模式
username
password
為能通過
svn
認證的用戶名和密碼
192.168.193.100
Linux
服務器的
ip
2打開注冊表(win+ràregedit)應該都是64位的機器吧現在,注意鍵名帶引號1.for32-bitsystem(32位):
[HKEY_LOCAL_MACHINE\SOFTWARE\VisualSVN\VisualSVNServer]
添加"CreateGnuTLSCompatibleCertificate"=dword:00000001
2.for64-bitsystem(64位):
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VisualSVN\VisualSVNServer]添加"CreateGnuTLSCompatibleCertificate"=dword:00000001
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
庫中的文件是否已經更新
Copyright © Linux教程網 All Rights Reserved