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服務端新建空版本庫dump、dump1、dump2
把dump文件導入dump版本庫
svnadmin load E:\Repositories_test\dump < d:\svnrootbak\dumpfile
把dump1文件導入dump1版本庫
svnadmin load E:\Repositories_test\dump1 < d:\svnrootbak\dumpfile1
把dump1和dump2文件導入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服務器同步后截圖如下: