SVN完全備份,增量備份,庫同步


 

  svn備份一般采用三種方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.

優缺點分析:

==============

第一種svnadmin hotcopy只能進行全量拷貝,不能進行增量備份;

   優點:備份過程較快,災難恢復也很快;如果備份機上已經搭建了svn服務,甚至不需要恢復,只需要進行簡單配置即可切換到備份庫上工作。

   缺點:比較耗費硬盤,需要有較大的硬盤支持.

 

第二種svnadmin dump是官方推薦的備份方式,

優點:比較靈活,可以全量備份也可以增量備份,並提供了版本恢復機制。

  缺點:如果版本比較大,如版本數增長到數萬、數十萬,那么dump的過程將非常慢;備份耗時,恢復更耗時;不利於快速進行災難恢復。

 

第三種svnsync實際上是制作2個鏡像庫,當一個壞了的時候,可以迅速切換到另一個。不過,必須svn1.4版本以上才支持這個功能。

  優點:當制作成2個鏡像庫的時候起到雙機實時備份的作用;

  缺點:當作為2個鏡像庫使用時,沒辦法做到“想完全拋棄今天的修改恢復到昨晚的樣子”;而當作為普通備份機制每日備份時,操作又較前2種方法麻煩。     

 

下面具體描述這三種的備份的方法:

===============

就以下圖project版本庫為實例

 

 

1, svnadmin hotcopy

 

svnadmin hotcopy是將整個庫都“熱”拷貝一份出來,包括庫的鈎子腳本、配置文件等;任何時候運行這個腳本都得到一個版本庫的安全拷貝,不管是否有其他進程正在使用版本庫。

 

svnadmin dump命令語法

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

 

如果要把project備份到d:svnrootbak目錄下,只需要運行:

svnadmin hotcopy E:\Repositories_test\project d:\svnrootbak\project

project版本庫用hotcopy命令備份前后文件大小相同,如下圖。

 

 

 

2, svnadmin dump

 

svnadmin dump命令語法

svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]

 

svnadmin dump命令用於導出整個Repository或Repository下的某個范圍的修訂版本。REPOS_PATH是版本庫的路徑,[-r LOWER[:UPPER]]用於指定導出的修訂版本范圍,由參數-r和兩個用:號隔開阿拉伯數字組成。例如:-r 0:50表示導出才版本0到版本50之間的所有修訂版,-r是revision的縮寫。

 

而另一個關鍵參數是--incremental。 它使用增量方式來導出版本,即每次都只導出自上一個版本以來的修改。這樣的好處是第一:可以把一個大的文 件切分成若干個小的文件。第二:在版本庫已經存在的情況下,我們只需要每次導出修改的部分,不需要每次都導出整個版本庫的內容。甚至可以通過hook腳本 每天晚上自動將當天的修改dump出來做備份用。

 

首先用 svnlook youngest查看一下project最新的版本號,顯示最新版本記錄為4。

svnlook youngest E:\Repositories_test\project

 

 

svnadmin dump命令做全量備份

svnadmin dump E:\Repositories_test\project > d:\svnrootbak\dumpfile

 

 

 

svnadmin dump命令做版本0-2的備份

svnadmin dump E:\Repositories_test\project -r 0:2 --incremental  > d:\svnrootbak\dumpfile1

  

 

svnadmin dump命令做版本3-4的備份

svnadmin dump E:\Repositories_test\project -r 3:4 --incremental  > d:\svnrootbak\dumpfile2

 

 

 

三個dump文件大小如下圖:

 

 

分別在SVN服務端新建空版本庫dumpdump1dump2

dump文件導入dump版本庫

svnadmin load E:\Repositories_test\dump < d:\svnrootbak\dumpfile

 

dump1文件導入dump1版本庫

svnadmin load E:\Repositories_test\dump1 < d:\svnrootbak\dumpfile1

 

dump1dump2文件導入dump1版本庫(注: dump2文件不能導入沒有1-2版本的原庫中)

svnadmin load E:\Repositories_test\dump2 < d:\svnrootbak\dumpfile1

svnadmin load E:\Repositories_test\dump2 < d:\svnrootbak\dumpfile2

 

執行上述命令后SVN服務端文件目錄如下:

 

 

3, svnsync

語法是:svnsync init{你剛創建的庫url}{源庫url}

svnsync sync : {你剛創建的庫url}

 

在要備份的機器上建立版本庫project1

進入project1版本庫的hooks目錄,例如D:\Repositories\TestRepostitory\hooks


③創建pre-revprop-change.bat文件:復制pre-revprop-change.tmpl,將擴展名改為pre-revprop-change.bat,並且清空原有的所有內容,保存。


④修改文件:修改pre-revprop-change.tmpl文件,用記事本打開該文件,把文件最后的exit 1改為exit 0

(原腳本的意思是如果修改的是svn:log屬性,將允許修改,返回0;否則,不允許,返回1,我們要將它改為允許修改所有的屬性,在腳本中直接返回0


⑤同步初步:          
在目標機器上,打開命令提示符窗口運行
svnsync init file:///D:/Repositories/project1 http://192.168.2.12:8080/svn/project

⑥實現同步:
在目標機器上,打開命令提示符窗口運行
svnsync sync file:///D:/Repositories/project1

 目標機SVN服務器同步后截圖如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM