svn備份的三種方法
1)svnadmin dump
2)svnadmin hotcopy
3)svnsync.
注意,svn備份不宜采用普通的文件拷貝方式(除非你備份的時候將庫暫停),如copy命令、rsync命令。
筆者曾經用 rsync命令來做增量和全量備份,在季度備份檢查審計中,發現備份出來的庫大部分都不可用,因此最好是用svn本身提供的功能來進行備份。
優缺點分享
第一種svnadmin dump是官方推薦的備份方式,優點是比較靈活,可以全量備份也可以增量備份,並提供了版本恢復機制。
缺點是:如果版本比較大,如版本數增長到數萬、數十萬,那么dump的過程將非常慢;備份耗時,恢復更耗時;不利於快速進行災難恢復。
個人建議在版本數比較小的情況下使用這種備份方式。
第二種svnadmin hotcopy原設計目的估計不是用來備份的,只能進行全量拷貝,不能進行增量備份;
優點是:備份過程較快,災難恢復也很快;如果備份機上已經搭建了svn服務,甚至不需要恢復,只需要進行簡單配置即可切換到備份庫上工作。
缺點是:比較耗費硬盤,需要有較大的硬盤支持(俺的備份機有1TB空間,呵呵)。
第三種svnsync實際上是制作2個鏡像庫,當一個壞了的時候,可以迅速切換到另一個。不過,必須svn1.4版本以上才支持這個功能。
優點是:當制作成2個鏡像庫的時候起到雙機實時備份的作用;
缺點是:當作為2個鏡像庫使用時,沒辦法做到“想完全拋棄今天的修改恢復到昨晚的樣子”;而當作為普通備份機制每日備份時,操作又較前2種方法麻煩。
dump
命令語法:svnadmin dump 版本庫路徑及名稱 –revision 導出的版本號> 導出的命名
增量備份:使用svnadmin dump的–incremental選項來實現
svnadmin dump 版本庫路徑及名稱 –revision 上次導出的版本號:到本次要導出到的版本號 –incremental > 導出的命名
實驗
創建用戶
創建版本庫
給用戶授權
進行版本庫的全備
客戶端進行同步創建數據(這里是測試所以就隨便創建了123)然后點擊提交
到此我們的環境創建完成
進行版本庫的全備
Svnadmin dump C:\Repositories\hehe-DB > ./bak.dump
進行第一次的增備
客戶端再次創建數據文件456並提交
進行數據的增量備份
svnadmin dump E:\Repositories\測試 -r 1:2 --incremental > E:\inc.bak
增量模式備份, 冒號前后是開始和結束的版本號
第二次增量備份
客戶端再次進行數據創建並提交
服務端進行增量
模擬誤刪除版本庫
客戶端再次提交數據
刪除服務端hehe-DB庫內所有文件
進行數據還原
svnadmin load C:\Repositories\hehe-DB < ./bak.dump
、
由於9和10 在模擬故障前沒有進行數據備份所以就沒有
hotcopy命令
語法:svnadmin hotcopy 路徑/repository 路徑/backup
此時你可以發現在你的E盤下面會有bak文件夾且里面有東西
增量備份
如果此時你需要刪除冗余的日志文件只需在后面添加--clean-logs參數即可,如果需要增量備份后面加入--incremental即可
如果要做還原的話可以直接將備份文件里面的東西直接拷貝到版本庫相對路徑下即可。相比dump hotcopy更加方便省事
Svn hotcopy備份腳步
Windows下svn備份腳步這個腳步可放心使用,已經在正式環境下測試過了
@echo 正在備份版本庫%1...... @%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2 @echo 版本庫%1成功備份到了%2!
Backup腳本
1 echo off 2 3 rem Subversion的安裝目錄 4 5 set SVN_HOME="D:\Program Files\VisualSVN Server" 6 7 rem 所有版本庫的父目錄 8 9 set SVN_ROOT=D:\Repositories 10 11 rem 備份的目錄 12 13 set BACKUP_SVN_ROOT=E:\Backup 14 15 set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10% 16 17 if exist %BACKUP_DIRECTORY% goto checkBack 18 19 echo 建立備份目錄%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log 20 21 md %BACKUP_DIRECTORY% 22 23 rem 驗證目錄是否為版本庫,如果是則取出名稱備份 24 25 for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\simpleBackup.bat "%%~fI" %%~nI 26 27 goto end 28 29 :checkBack 30 31 echo 備份目錄%BACKUP_DIRECTORY%已經存在,請清空。 32 33 goto end 34 35 :end
這里只有日期定義格式為“-”才能正常運行,如果是“/”就會提示找不到備份目錄須要定義日期格式
Windows下定義格式
echo “%date:~0,10%”
echo “%date:~0,4%_%date:~5,2%_%date:~8,2%”