SVN徹底備份,增量備份,庫同步

 

  svn備份通常採用三種方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.安全

優缺點分析:服務器

==============svn

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

   優勢:備份過程較快,災難恢復也很快;若是備份機上已經搭建了svn服務,甚至不須要恢復,只須要進行簡單配置便可切換到備份庫上工做。url

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

 

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

優勢:比較靈活,能夠全量備份也能夠增量備份,並提供了版本恢復機制。rem

  缺點:若是版本比較大,如版本數增加到數萬、數十萬,那麼dump的過程將很是慢;備份耗時,恢復更耗時;不利於快速進行災難恢復。同步

 

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

  優勢:當製做成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服務器同步後截圖以下:

 

相關文章
相關標籤/搜索