前段時間把svn版本庫從win遷移到了linux上,沒隔幾天那台win的磁碟就嚴重壞道了。。。。這***什麼運氣!
花費了點時間研究了下svn自己的同步工具。寫個日誌記錄下。
注意:svnsync要求svn版本1.4+
下面的內容來自svnbook-1.4**svn:192.168.2.5svnsync
svnsync是subversion的遠端版本庫映象工具,它允許你把乙個版本庫的內容錄入到另乙個。
在任何映象場景中,有兩個版本庫:源版本庫,映象(或「sink」)版本庫,源版本庫就是svnsync獲取修訂版本的庫,映象版本庫是源版本庫修訂版本的目標,兩個版本庫可以是在本地或遠端—它們只是通過url跟蹤。
svnsync程序只需要對源版本庫有讀許可權;它不會嘗試修改它。但是很明顯,svnsync可以讀寫訪問映象版本庫。
警告svnsync對於不能作為映象操作一部分的修改非常敏感,為了防止發生這個情況,最好保證svnsync是唯一可以修改映象版本庫的程序。
svnsync選項
--config-dir dir
指導subversion從指定目錄而不是預設位置(使用者主目錄的.subversion)讀取配置資訊。
--no-auth-cache
阻止在subversion管理區快取認證資訊(如使用者名稱密碼)。
--non-interactive
如果認證失敗,或者是不充分的憑證時,防止出現要求憑證的提示(例如使用者名稱和密碼)。這在執行自動指令碼時非常有用,只是讓subversion失敗而不是提示更多的資訊。
--password pass
指出在命令列中提供你的密碼—另外,如果它是需要的,subversion會提示你輸入。
--username name
表示你要在命令列提供認證的使用者名稱—否則如果需要,subversion會提示你這一點。
備份svn:192.168.3.10
建立備份空版本庫
$ svnadmin create svn-mirror配置**、備份svn,建立使用者:syncuser
請確認syncuser使用者對備份svn有寫入許可權。對**svn有讀取許可權。且密碼相同。
配置備份svn的pre-revprop-change hook
#配置備份svn的start-commit hook【可選,但建議配上】!/bin/sh
user="$3"
#限制只有syncuser使用者才能提交版本屬性修改到此版本庫
if [ "
$user
" = "
syncuser
" ]; then exit
0; fi
echo
"only the syncuser user may change revision properties
" >&2
exit1#
當然某些網路教程說的是你可以直接清空然後寫入exit 0 ,這種方法雖然可以做,但是注意svnbook中的這句話:
# svnsync的通訊議對於源和目標版本庫版本歷史的不一致非常敏感,因此,雖然svnsync無法要求目標版本庫是唯讀的,[34]最好的辦法就是只允許映象程序修改目標版本庫內容。(ps:映象==**svn 目錄==備份svn)
# [34] 實際上,它不是真的完全唯讀,或者svnsync本身有時間將版本庫歷史拷入。
#初始化備份svn!/bin/sh
user="$2"
#限制只用syncuser使用者才能提交版本修改到版本庫
if [ "
$user
" = "
syncuser
" ]; then exit
0; fi
echo
"only the syncuser user may commit new revisions
" >&2
exit
1
$ svnsync initialize \ \在備份svn測試資料同步--username syncuser --password syncpass
copied properties
for revision 0.
#initialize 可以簡寫為 init 所以上面的命令可以寫作如下:
$ svnsync init \ \
--username syncuser --password syncpass#注意
# 提供給svnsync的url必須是指向目標和源版本庫的根目錄,這個工具不支援對版本庫子樹的映象處理。
$ svnsync synchronize/svn-mirror \
--username syncuser --password syncpass
#注意
# svnsync的最初版本(在subversion 1.4)有一些缺陷—-用來認證的--username和--password命令列引數同時作用於源和目標版本庫。在**svn配置post-commit hook,啟用實時備份# 顯然,我們無法保證同步的使用者認證資訊是相同的,如果不一樣,使用者使用非互動模式(--non-interactive選項)來執行svnsync時會遇到這個問題(ps:也就是認證無法通過)。
# 現在有趣的部分開始了,通過乙個單獨的子命令,我們可以告訴svnsync將所有映象的修訂版本從源版本庫拷貝到目標版本庫。
# [35]svnsync synchronize子命令會檢視目標版本庫特定修訂版本的屬性,並且檢測同步的版本庫是哪乙個,以及最新映象的修訂版本是0。然後它會查詢源版本庫,檢測其最新的修訂版本。
# 最後,它會詢問源版本庫伺服器來開始重演從修訂版本0到最新修訂版本。svnsync從源版本庫伺服器得到返回的結果,然後將其作為新的提交**到目標版本庫伺服器。
# [35] 要預先警告一下,儘管對於普通讀者只需要幾秒鐘就可以理解下面的輸出,而對於整個映象過程花費的時間可能會非常長。
$ svnsync synchronize --non-interactive \異常處理--username syncuser --password syncpass
#--non-interactive 非互動模式,如果程式需要引數,讓程式自行處理
這個錯誤一般不會遇到,svnsync只適用於1.4+版本。請公升級該svn。
**:
SVN增量備份一 svnsync
源庫 8001 svn projects 新建的 庫 要求 8001 svn projects是開發的 源庫,http localhost svn projects是源庫的映象庫,做增量備份。1.建立bat檔案pre revprop change.bat echo changing revision...
SVN增量備份一 svnsync
源庫 8001 svn projects 新建的 庫 要求 8001 svn projects是開發的 源庫,http localhost svn projects是源庫的映象庫,做增量備份。1.建立bat檔案pre revprop change.bat echo changing revision...
rsync notify實時備份
centos7兩台,關閉防火牆和selinux a 備份端 192.168.74.190 服務端 b 備份源 192.168.112.191 客戶端 1 安裝epel yum y install epel release 2 安裝inotify和rsync服務 yum y install inoti...