svn備份和還原

2021-09-02 09:23:28 字數 4229 閱讀 7259

[url]

除去最常用的update,checkout, commit等操作, 最常見的就是對svn版本庫的備份和還原。

備份策略

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種方法麻煩。

備份的命令 寫道

全備份:使用svnadmin dump或svnadmin hotcopy或svnsync來做,

hotcopy:

svnadmin hotcopy path/to/repository path/to/backup –clean-logs

dump:

svnadmin dump 版本庫路徑及名稱 –revision 匯出的版本號》 匯出的命名

增量備份:使用svnadmin dump的–incremental選項來實現

svnadmin dump 版本庫路徑及名稱 –revision 上次匯出的版本號:到本次要匯出到的版本號 –incremental > 匯出的命名

svnadmin dump –deltas /repo |bzip2 |tee dump.bz2 | md5sum >dump.md5

bzip2壓縮方案比gzip慢,但換來的更好的壓縮率。

更有趣的是,tee方法將壓縮的資料流轉向到檔案dump.bz2,同時將其輸出到標準輸出,後者有轉向給了md5摘要計算工具。

還原命令 寫道

還原版本:svnadmin load 要恢復的版本庫路徑及名稱 < 匯出的命名

svnadmin hotcopy path/to/repository path/to/backup –clean-logs

我的svn是搭建在windows上的,用visual svn挺方便, 參考網上的bat備份svn的命令,我寫了乙個備份和還原全部版本庫的bat指令碼,

備份,需要把指令碼放在版本庫根目錄下執行,例如dumpall.bat, 不指定引數則備份到當前目錄下,否則備份到指定目錄:

bat** 收藏**

@echo off

set dumpto_dir="."

if not "%1" == "" (

echo back up all to %1

set dumpto_dir=%1

) set var_date=%date:~0,4%%date:~5,2%%date:~8,2%

dir /b /ad > dirs

if exist dump_files (

del /q dump_files

) for /f %%i in (dirs) do (

set repos_name=%%i

call :dump_repos

) set repos_name=

echo.

if exist %dumpto_dir%\repos_%var_date%.zip (

echo delete existing compressed dump file

del %dumpto_dir%\repos_%var_date%.zip

) echo compressing dump files...

zip -j %dumpto_dir%\repos_%var_date%.zip %dumpto_dir%\*.bin

echo delete dump files...

for /f %%i in (dump_files) do (

del /q %dumpto_dir%\%%i

) del /q dirs

del /q dump_files

set dumpto_dir=

echo successed.

goto :eof

::==== functions ====

:dump_repos

set dump_file=%repos_name%.bin

echo dumping repository ^"%repos_name%^" ...

svnadmin dump ^"%repos_name%^" -q > %dumpto_dir%/%dump_file%

if %errorlevel%==0 (

echo %dump_file% >> dump_files

) else (

del /q %dump_file%

echo dump ^"%repos_name%^" failed.

) set dump_file=

echo.

還原:cd到備份目錄,再執行,例如loadall.bat, 如果不指定引數,則認為當前目錄就是備份的目錄,否則從指定目錄進行還原。另外, 如果是備份到了壓縮包,需要先解壓。

bat** 收藏**

set var_is_empty_dir=true

set load_dir=".";

if not "%1"=="" (

set load_dir=%1

) echo %load_dir%

set var_is_empty_dir=

dir /b /a-d %load_dir%\*.bin > dump_files

if "%errorlevel%"=="0" (

echo finded dump file.

) else (

echo error : can not find dump file.

del dump_files

goto :eof

) for /f %%i in (dump_files) do (

set repos_file=%%i

call :load_repos

) set repos_file=

del /q dump_files

echo successed.

goto :eof

::==== functions ====

:load_repos

set repos_name=%repos_file:~0,-4%

mkdir %repos_name%

echo %repos_name%

echo loading repository ^"%repos_name%^" ...

svnadmin create %repos_name%

svnadmin load -q %cd%\%repos_name% < %load_dir%/%repos_file%

if %errorlevel%==0 (

echo %dump_file% >> dump_files

) else (

rmdir /q %repos_name%

echo load ^"%repos_name%^" failed.

) set repos_name=

echo.

再配合一下計畫任務, 就可以實現定時備份了。

svn備份和還原

全量備份 color darkblue svnadmin dump e repositories document tec c svn bankup document tec.backup color 全量還原 color darkblue svnadmin create e repositorie...

svn備份還原

備份svn庫。將svn庫備份匯出到c svnbak,生成dump檔案。在cmd命令列裡輸入 svnadmin dump c svnroot repos1 c svnbak repos1.dump 匯入備份庫到新的svn庫下。匯入備份庫到新的svn庫下時,一定要新建庫!1,在svnroot目錄下新建空...

SVN備份還原

本文是對svn備份還原的乙個簡單記錄 千萬不能用visualsvn server powershell,否則在還原load的時候會發生錯誤e140001,具體參考 進入命令列 cd c program files visualsvn server bin svn的安裝目錄 檢視最新版本 svnloo...