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服務端新建空版本庫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服務器同步後截圖以下: