1. 程式人生 > >SVN (subversion) 的備份和還原

SVN (subversion) 的備份和還原

開發中常用到的一個版本控制軟體就是SVN. 有時候, 需要對版本控制器的內容進行備份/還原或者遷移. 儘管用得比較少, 但是一旦用到, 該掌握的知識還是要掌握的.

環境: CentOS 6.6

svn的備份還原有三種方式, 這裡重點介紹前兩種:

  1. 官方提供的dump方法: 優點是穩定; 缺點也非常明顯, 一旦版本過多或者內容本身多的時候, 備份和還原的過程就及其漫長, 不利於生產環境中快速上線. 版本少/內容少的時候, 可以考慮這個方法.
  2. hotcopy方法: 熱拷貝的優點就是快, 缺點是比較耗費磁碟, 但一般這個方法比較常用.
  3. svnsync方法: 製作兩個映象的svn版本庫, 一個崩潰以後迅速切換到另一個, 實際應用較少, 不做介紹.

下面對常用的方法進行介紹:

1. dump方法的介紹

假如, 版本庫的路徑是/var/svn/lius, 我們先備份.

備份:

# svnadmin dump /var/svn/lius > ~/svn.dump

還原: 需要先建立一個版本庫, 再進行還原 (可以是不同的名稱):

# svnadmin create /var/svn/liemer
# svnadmin load /var/svn/liemer < ~/svn.dump 
<<< 開始新的事務,基於原始版本 1
     * 正在增加路徑: TestFile.txt ...完成。

------- 提交後版本 1
>>> <<< 開始新的事務,基於原始版本 2 * 正在增加路徑: 1.jpg ...完成。 * 正在增加路徑: 2.jpg ...完成。 * 正在增加路徑: 3.jpg ...完成。 * 正在增加路徑: 4.jpg ...完成。 ------- 提交後版本 2 >>>

將原來的配置檔案資訊, 複製到新的版本庫的conf目錄, 原來的可以備份到別處:

# pwd
/var/svn/liemerlius/conf
# ls
authz  passwd  svnserve.conf
# mkdir ../bak && mv * ../bak   // 先備份原來的配置檔案
# cp /var/svn/lius/conf/* /var/svn/liemerlius/conf/ // 將原來的配置檔案複製到這裡, 重啟svn服務 # ls authz bak passwd svnserve.conf # killall svnserve # svnserve -d -r /var/svn

windows上, 可以用TortoiseSVN測試一下, 本人測試是可以的.

2. dump增量備份方法的介紹

當然, 如果版本庫的內容已經夠多了, 一次性完全備份是不現實的. 我們可以定期進行增量備份, 節省很多的時間. 將來恢復的時候, 將各個分檔案按順序恢復即可.

首先, 應該知道版本庫的已有版本, 在windows上, 按照下列方法進行:
這裡寫圖片描述

這裡寫圖片描述

這裡的Revision就是版本號的資訊.

增量備份和還原:

# svnadmin dump /var/svn/liemer -r 1:2 --incremental > ~/inc.bak    // 增量模式備份, 冒號前後是開始和結束的版本號
* 已轉存版本 1。
* 已轉存版本 2# svnadmin create /var/svn/liemerlius   // 可以建立, 也可以在一個已有的版本庫裡面進行還原.
# svnadmin load /var/svn/liemerlius < ~/inc.bak 
<<< 開始新的事務,基於原始版本 1
     * 正在增加路徑: TestFile.txt ...完成。
------- 提交後版本 1 >>>
<<< 開始新的事務,基於原始版本 2
     * 正在增加路徑: 1.jpg ...完成。
     * 正在增加路徑: 2.jpg ...完成。
     * 正在增加路徑: 3.jpg ...完成。
     * 正在增加路徑: 4.jpg ...完成。
------- 提交後版本 2 >>>

同樣的, 還原後可以在windows上進行驗證.

3. hotcopy進行熱備份和還原

備份的方法:

# svnadmin hotcopy /var/svn/lius/ ~/hotcopy.bak   // 後面是要備份的路徑, 是一個目錄
# file ~/hotcopy.bak
/root/hotcopy.bak: directory
# ls ~/hotcopy.bak
conf  db  format  hooks  locks  README.txt

–clean-logs選項,是svnadmin執行熱拷貝操作時,刪除不用的Berkeley DB日誌檔案。 可以在任何時候執行這個命令得到一個版本庫的安全拷貝,不管其它程序是否使用這個版本庫。

還原:

# svnadmin hotcopy ~/hotcopy.bak /var/svn/hotsvn
# ls /var/svn/hotsvn
conf  db  format  hooks  locks  README.txt
# killall svnserve
# svnserve -d -r /var/svn/

同樣, 可以可以驗證一下是否可用, 在windows建立新資料夾, 登入賬號進行同步, 發現是可以的.

這裡寫圖片描述

這裡寫圖片描述