1. 程式人生 > >SVN完全備份,增量備份,庫同步

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

技術分享 實時備份 提示 機制 ima 例如 project 新版本 you

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服務器同步後截圖如下:

技術分享

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