免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SVN完全備份和增量備份

SVN完全備份和增量備份

Posted on 2010-10-14 11:13 幻海藍夢 閱讀(2241) 評論(0)  編輯  收藏 所屬分類: 版本管理

1, 完全備份
最常見和簡單的備份就是直接使用拷貝命令,將版本庫目錄拷貝到備份目錄上,就可以了。但是這樣不是很安全的方式,因為如果在拷貝時版本庫發(fā)生變化,將會造成備份的結(jié)果不夠準確,失去備份的作用,為此Subversion提供了“svnadmin hotcopy”命令,可以防止這種問題。
還記得我們的版本庫目錄嗎?
D:\SVNROOT
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─project2
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks

如果要把project1備份到d:\svnrootbak目錄下,只需要運行:
svnadmin hotcopy d:\svnroot\project1 d:\svnrootbak\project1
2, 增量備份
盡管完全備份非常簡單,但是也是有代價的,當版本庫非常巨大時,經(jīng)常進行完全備份是不現(xiàn)實的,也并不必要,但是一旦版本庫在備份之間發(fā)生問題,該如何呢,這里我們就用到了增量備份。
增量備份通常要與完全備份結(jié)合使用,就像oracle數(shù)據(jù)庫的歸檔日志,記錄著每次Subversion提交的變化,然后在需要恢復時能夠回到最新的可用狀態(tài)。在我們這個例子中我們使用的是,svnadmin dump命令進行增量的備份,使用方法是:
svnadmin dump project1 --revision 15 --incremental > dumpfile2
上面的命令實現(xiàn)了對修訂版本15進行增量的備份,其中的輸出文件dumpfile2只保存了修訂版本15更改的內(nèi)容。
為了記錄每次提交的結(jié)果,我們需要使用一項Subversion的特性--鉤子(hook),看看我們的project1目錄:
├─project1
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
其中的hooks目錄里存放的就是鉤子腳本,我們在此處只使用post-commit鉤子,這個鉤子會在每次提交之后執(zhí)行,為了實現(xiàn)我們的備份功能,我們在hooks下建立一個文件post-commit.bat,內(nèi)容如下:
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
通過這個腳本,可以實現(xiàn)D:\svnroot下的版本庫提交時自動增量備份到D:\svnrootbak\delta(確定這個目錄存在),其中使用的deltaBackup.bat其實可以放在任何地方,只是對腳本的svnadmin dump的包裝,內(nèi)容如下:
@echo 正在備份版本庫%2......
%SVN_HOME%\bin\svnadmin dump %SVN_ROOT%\%1 --incremental --revision %2 >> %DELTA_BACKUP_SVN_ROOT%\%1.dump
@echo 版本庫%2成功備份到了%3!
以上兩個腳本可以直接拷貝到project2的hooks目錄下,不需要修改就可以實現(xiàn)project2的自動備份。
以上的操作已經(jīng)OK了,現(xiàn)在需要做的是將完全備份和增量備份結(jié)合起來,也就是在完全備份后清理增量備份的結(jié)果,使之只保存完全備份后的結(jié)果。
當果真出現(xiàn)版本庫的故障,就要求我們實現(xiàn)版本庫的恢復操作了,這是用要使用svnadmin load命令,同時也需要上次的完全備份例如要把上次完全備份backuprepo,和之后的增量備份dumpfile:
svnadmin load backuprepo < dumpfile
最后的結(jié)果,可以下載svnroot.rar,將之解壓縮到d:\下,然后修改幾個bat文件的SVN_HOME就可以使用了。
3, 版本庫同步
Subversion 1.4增加了同步機制,可以實現(xiàn)一個版本庫同另一個版本庫的同步(但好像只是單向的),我們可以用來實現(xiàn)版本庫的備份或鏡像。
3.1. 對目標庫初始化
svnsync init svn://localhost/project2 svn://localhost/project1

其中project2是目標的版本庫,而project1是源版本庫。其中的目標版本庫必須為空,而且必須允許修訂版本屬性的修改,也就是在目標的版本庫的hooks目錄里添加一個文件pre-revprop-change.bat,內(nèi)容為空即可。
3.2. 同步project2到project1
svnsync sync svn://localhost/project2

這時候你update一下你的project2的一個工作拷貝,就會發(fā)現(xiàn)有了project1的所有內(nèi)容。如果project1又有提交,這時候 project2的版本庫無法看到最新的變化,還需要再運行一遍sync操作,這樣才能將最新的變化同步。需要注意的是,目標版本庫只能做成只讀的,如果目標版本庫發(fā)生了變更,則無法繼續(xù)同步了。
3.3. 同步歷史屬性的修改
因為同步不會更新對歷史屬性的修改,所以svnsync還有子命令copy-revprops,可以同步某個版本的屬性。
3.4. 鉤子自動同步
希望在每次提交時同步,則需要在源版本庫增加post-commit腳本,內(nèi)容如下:
echo off
set SVN_HOME="D:\Subversion"
%SVN_HOME%\bin\svnsync sync --non-interactive svn://localhost/project2

把以上內(nèi)容存放為post-commit.bat,然后放到版本庫project1下的hooks目錄下,這樣project1每次提交,都會引起project2的同步。


一直用這套腳本備份,腳本主體雖不是原創(chuàng),但是從網(wǎng)上得到后因為不能運行也進行了些修改,前兩天看到有人問關于SVN備份的問題,今天又把腳本整理了一下,解決了不能循環(huán)備份多個配置庫的問題。希望對大家有所幫助。在此也謝謝提供腳本主體的高人。wscthjeyrt
我的備份策略是一個月一次全備份,一周一次增量備份,并且每天也進行增量備份,在Window任務里設置定時進行,設置好后就不用管了,再加一層保險就是定期把備份文件移到另外一臺機器存儲。wscthjeyrt
(一)全備份,包含兩個文件hotcopy.bat和最終執(zhí)行文件fullbackup.batwscthjeyrt
1) hotcopy.batwscthjeyrt
@echo 正在備份版本庫%1……wscthjeyrt
rem @%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2wscthjeyrt
@%SVN_HOME%\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2wscthjeyrt
@echo 版本庫%1成功備份到了%2!wscthjeyrt
wscthjeyrt
wscthjeyrt
2)fullbackup.batwscthjeyrt
echo offwscthjeyrt
rem Subversion的安裝目錄wscthjeyrt
rem set SVN_HOME="F:\Program Files\Subversion"wscthjeyrt
set SVN_HOME="F:\Program Files\CollabNet Subversion Server"wscthjeyrt
rem 所有版本庫的父目錄wscthjeyrt
set SVN_ROOT=G:\SVNwscthjeyrt
rem 備份的目錄wscthjeyrt
set BACKUP_SVN_ROOT=h:\svnrootbakwscthjeyrt
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%wscthjeyrt
wscthjeyrt
if exist %BACKUP_DIRECTORY% goto checkBackwscthjeyrt
echo 建立備份目錄%BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.logwscthjeyrt
mkdir %BACKUP_DIRECTORY%wscthjeyrt
rem 驗證目錄是否為版本庫,如果是則取出名稱備份wscthjeyrt
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nIwscthjeyrt
goto endwscthjeyrt
:checkBackwscthjeyrt
echo 備份目錄%BACKUP_DIRECTORY%已經(jīng)存在,請清空。wscthjeyrt
goto endwscthjeyrt
:endwscthjeyrt
wscthjeyrt
wscthjeyrt
(二)增量備份,包含三個文件,dump.bat、最終執(zhí)行文件svndump.bat和配置庫名稱配置projectlist.confwscthjeyrt
1)dump.batwscthjeyrt
@ECHO OFFwscthjeyrt
rem 調(diào)用格式:dump 項目庫名wscthjeyrt
if "%1"=="" goto no_argswscthjeyrt
set PROJECT=%1wscthjeyrt
if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%wscthjeyrt
cd %RAR_STORE%\%PROJECT%wscthjeyrt
SET LOWER=0wscthjeyrt
SET UPPER=0wscthjeyrt
wscthjeyrt
@echo 項目庫%PROJECT%2...>> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMPwscthjeyrt
@echo 項目庫%PROJECT%3...>> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%Dwscthjeyrt
if %UPPER%==0 GOTO :N_EXITwscthjeyrt
if not exist %Log_PATH%\%PROJECT%_last_revision.txt GOTO :BAKUPwscthjeyrt
rem 取出上次備份后的版本號,并做+1處理(注意此算法未在98系統(tǒng)驗證)wscthjeyrt
@FOR /f %%C IN (%Log_PATH%\%PROJECT%_last_revision.txt) DO @set LOWER=%%Cwscthjeyrt
@set /A LOWER=%LOWER%+1wscthjeyrt
rem 不需要備份,則跳轉(zhuǎn)結(jié)束wscthjeyrt
IF %LOWER% gtr %UPPER% GOTO :N_EXITwscthjeyrt
wscthjeyrt
:BAKUPwscthjeyrt
SET FILENAME=%PROJECT%_%LOWER%_%UPPER%wscthjeyrt
@ECHO 開始備份項目庫:%PROJECT%,生成文件=%FILENAME%wscthjeyrt
%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmpwscthjeyrt
rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %wscthjeyrt
rem 準備寫備份日志信息wscthjeyrt
IF %LOWER% gtr 0 GOTO :WRITENOTEwscthjeyrt
@ECHO ------2-----%date% >> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
@echo -- 3-------添加備份文件 %PROJECT%_%UPPER%.rar,從[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
GOTO :COMPLETEwscthjeyrt
wscthjeyrt
:WRITENOTEwscthjeyrt
@ECHO %date% >> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
@echo -- 4------添加增量備份文件 %PROJECT%_%UPPER%.rar,從[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
wscthjeyrt
:COMPLETEwscthjeyrt
rem 下面一行用于拷貝備份文件到映射的驅(qū)動器上wscthjeyrt
rem copy %PROJECT%.rar %RAR_STORE%\%PROJECT%\wscthjeyrt
move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\wscthjeyrt
del %Log_PATH%\A.TMPwscthjeyrt
@echo %UPPER% > %Log_PATH%\%PROJECT%_last_revision.txtwscthjeyrt
wscthjeyrt
:N_EXITwscthjeyrt
@echo 項目庫%PROJECT%處理結(jié)束...>> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
@CD..wscthjeyrt
@exit /Bwscthjeyrt
:no_argswscthjeyrt
@ECHO ONwscthjeyrt
@echo "正確調(diào)用方法: dump 項目庫名"wscthjeyrt
wscthjeyrt
wscthjeyrt
2)svndump.bat wscthjeyrt
echo offwscthjeyrt
rem Subversion的安裝目錄及執(zhí)行文件wscthjeyrt
set SVN_HOME="F:\Program Files\CollabNet Subversion Server"wscthjeyrt
set SVN_ADMIN=%SVN_HOME%\svnadmin.exewscthjeyrt
set SVN_LOOK=%SVN_HOME%\svnlook.exewscthjeyrt
rem 配置庫倉庫根目錄wscthjeyrt
set SVN_REPOROOT=G:\SVNwscthjeyrt
rem 壓縮命令wscthjeyrt
set RAR_CMD="E:\Progra~1\WinRAR\WinRAR"wscthjeyrt
rem 增量備份文件存放路徑wscthjeyrt
set RAR_STORE="H:\svnincrementW"wscthjeyrt
rem 日志及最后一次備份修訂號存放文件目錄,以下是跟增量備份腳本目錄同一目錄wscthjeyrt
set Log_PATH=G:\backup\incrementWwscthjeyrt
wscthjeyrt
@echo 項目庫%PROJECT%處理1...>> %Log_PATH%\%PROJECT%_log.txtwscthjeyrt
rem 讀取項目庫列表文件,并忽略其中;開頭的行wscthjeyrt
FOR /f "eol=;" %%C IN (projectlist.conf) DO call G:\backup\incrementW\dump.bat %%Cwscthjeyrt
wscthjeyrt
wscthjeyrt
3)projectlist.confwscthjeyrt
;**************************************************wscthjeyrt
;01. project1開發(fā)庫wscthjeyrt
; 更新頻率: 高wscthjeyrt
;**************************************************wscthjeyrt
PROJECT1wscthjeyrt
;**************************************************wscthjeyrt
;02. 此處可寫注釋信息wscthjeyrt
;**************************************************wscthjeyrt
PROJECT2wscthjeyrt
PROJECT3wscthjeyrt
PROJECT4wscthjeyrt
PROJECT5wscthjeyrt

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SVN備份腳本完整資料
SVN 每日自動備份
Windows 下SVN 版本庫的自動備份腳本
Svn備份與恢復
批處理獲取當前時間
svn服務器備份與恢復
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服