版本控制雖然建立了一組repository的版本庫作為各版本比較對照的存放所在,無形中也可以視為一組備份資料。不過實際上這並不是subversion的設計原意。所以repository可以透過其內建的功能hotcopy、svnadmin dump以及svnsync來製作repository的備份,這些工具的應用使得資料的存放更多加了一層保障。備份的說明主要參考自:subversion備份 ,裡面有更詳盡的使用方法喔!

最簡單的備份方式直接使用svnadmin的hotcopy參數,這樣可以在使用者使用的當下將完整的將資料庫給備份出一份。
操作的方法很簡單

svnadmin hotcopy c:\repository d:\repobak
                              來源             備份處

不過這種備份方式當資料量大的時候,如果執行的次數太過頻繁,不僅費時,同時也增加硬碟的負擔。所以在製作一次完整的備份之後,可以使用dump的方式把新增加的版本逐一dump起來,接續在hotcopy之後的備份處理。

執行dump的語法如:

svnadmin dump c:\repository --
incremental --revision 20 > xxx.dump
                          來源(repository所在目錄)                         dump 檔案

incremental 的參數在於讓dump可以持續累積新的版本庫資料,
revision則是指定第幾版的資料置入dump檔案,
使用這兩個參數前必須要有「--」。

在搞定簡單的dump操作方式之後,這還是屬於人工手動操作的範疇,
所以如果可以讓每次更新版本的時候就執行此一功能,這樣可以讓備份的手續簡化不少
這時候就得使用subversion hooks的功能,hooks本身提供不少腳本可以使用
這裏使用的是post-commit這一腳本。
此一腳本在每次版本更新的時候,會送出版本號以及到版本庫的路徑。
透過這個兩參數的發送,當版本庫更新的時候可以執行我們想要的動作,而這個動作就是執行dump的此一指令

subversion備份 提供了兩個.bat範例,針對自己設定的環境稍作修改可以直接拿來使用
因為是在windows的環境下使用,所以副檔名必須是.bat或者是exe之類的執行檔,這樣才能在視窗環境下啟動
以下是post-commit.bat的內容:

echo off
set SVN_HOME="C:\Program Files\Subversion"
set SVN_ROOT=D:\svnroot
set UNIX_SVN_ROOT=D:/svnroot
set DELTA_BACKUP_SVN_ROOT=D:\svnrootbak\delta
set LOG_FILE=%1\backup.log
echo backup revision %2 >> %LOG_FILE%
for /r %SVN_ROOT% %%I in (.) do if D:/svnroot/%%~nI == %1 %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat %%~nI %2
goto end
:end

前面五個變數的設定根據使用者自己的環境來做出修改。
另外執行dump指令則是改以
deltaBackup.bat包裝起來。內容如下:

@echo 正在備份版本庫%2......
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump
@echo 版本庫%2誠供備份到了%3!

這兩個檔案post-commit.bat deltaBackup.bat都放在repository的hooks資料夾裡即可。
設定好之後,只要有版本更新,就會自動將新的版本dump到設定用來備份的dump檔案裡頭。

不過在使用的過程中,有個問題一直無法解決。就是在單機環境中,post-commit的機制一直無法被觸發,可能需要做其它的修訂吧,這已經超出我的能力範圍。不過當使用者以網路終端的身分透過網路來更新repository的時候這個機制就會被啟動。

還原的方法也很簡單
使用svnadmin load的指令

svnadmin load backrepo < dumpfile

backrepo就是使用hotcopy備份的目錄所在。

除了這兩種備份方式之外,在1.4版之後subversion還支援了同步備份的功能,這留待下一篇筆記。
創作者介紹

認真打雜好青年日誌

kennyp 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • 橡皮渣君
  • Hello~
    按照這個做法我想要作自動備份
    但我在其他非server的電腦作commit的動作
    post-commit.bat一直沒有被觸發到
    是否有什麼要設定或注意的地方
    謝謝
  • brian6724
  • 你好:我想請問一下
    hotcopy是備份,但怎麼回復呢?
    我用hotcopy備份完,然後拿到另一台電腦想回復
    但怎麼用就是無法回復成原來的模式
    網路上查到的也幾乎都是說dump->load的方式
    沒有說明怎麼從 hotcopy->原樣 的方式

    謝謝。
找更多相關文章與討論