SVN (subversion) 的備份和還原
阿新 • • 發佈:2019-02-14
開發中常用到的一個版本控制軟體就是SVN. 有時候, 需要對版本控制器的內容進行備份/還原或者遷移. 儘管用得比較少, 但是一旦用到, 該掌握的知識還是要掌握的.
環境: CentOS 6.6
svn的備份還原有三種方式, 這裡重點介紹前兩種:
- 官方提供的dump方法: 優點是穩定; 缺點也非常明顯, 一旦版本過多或者內容本身多的時候, 備份和還原的過程就及其漫長, 不利於生產環境中快速上線. 版本少/內容少的時候, 可以考慮這個方法.
- hotcopy方法: 熱拷貝的優點就是快, 缺點是比較耗費磁碟, 但一般這個方法比較常用.
- 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建立新資料夾, 登入賬號進行同步, 發現是可以的.