遇到的問題
這兩天一直在搞svn的主從備份,使用的方法是svnsync做的主從同步,同步大部分的倉庫都沒有什么問題很順利的就同步完成了,不了解svnsync同步的可以看我這篇,但是在在同步2個倉庫的時候遇到了很麻煩的問題,報錯如下:
這個報錯詭異在我前面的創建初始化版本庫都沒問題,從主庫同步的時候一開始也很順利,但是同步到某一個版本時就像上圖一樣中斷了。百度了一堆都是checkout出這個錯的,讓 你清緩存什么的,根本文不對題。google也是沒什么解決方法,看到一個說是svn版本太低有bug,
只找到了這個解決方法,我就試試了,更新了svn版本到1.8,還是200 ok,報錯和之前差不多,這個方法失效。后來在網上找了很久,發現這個鏈接,感覺可以試試
上面的報錯我個人認為是倉庫的某個版本太大導致從庫向主庫同步失敗。繞過這個報錯無非是不用工具同步,直接將主庫目錄拷貝到從庫並修改庫的屬性。
解決方法
下面是具體步驟:
1、將主庫復制到從庫
這里使用什么方法都行,可以用hotcopy,也可以用直接將主庫打包發送到從庫上。我用的是直接打包的方法,建議用hotcopy,因為直接打包拷貝容易被鎖
tar czvf repo.tar.gz repo
2、在從庫上創建初始化倉庫
在這里創建初始化倉庫的目的只有一個就是為了獲取它的屬性。
cd /tmp
svnadmin create repo
chown -R apache:apache repo
cp -p repo/hooks/pre-revprop-change.tmpl repo/hooks/pre-revprop-change
sed -i '3,65d;s/exit 1/exit 0/g' repo/hooks/pre-revprop-change
svnsync init file:///path/to/repo http://master/path/to/repo --username apache --password xxx
上面步驟做完后從庫會生成uuid,repo/db/revprops/0/0等初始化信息
3、將主庫打的包解壓到從庫的svn目錄下,並修改屬性
tar xzvf repo.tar.gz #解壓
cp -p /tmp/repo/hooks/pre-revprop-change repo/hooks #拷貝鈎子到從庫
cp -p /tmp/repo/db/uuid repo/db/uuid #替換uuid
cp -p /tmp/repo/db/revprops/0/0 repo/db/revprops/0/0 #替換初始版本日志
4、從庫同步主庫
svnsync sync file:///path/to/repo --username apache --password xxx
同步可能會遇到如下報錯:
一開始不知道是什么鬼,后來看最后一行說我fs format應該在1到4之間,但是我的如下圖:
所以我把6改成4,再次執行,又遇到如下報錯:
意思是說我版本號對不上,使用
svn propset --revprop -r0 svn:sync-last-merged-rev 6515 http://master/path/to/repo
同步主庫的版本號,6515是你在主庫打包時的版本號
在執行一次同步
svnsync sync file:///path/to/repo --username apache --password xxx
到此,svn主從同步已經完成,整個過程其實沒什么難點,正常同步使用svnadmin create,init,sync三部曲即可完成,但是這里出現了特殊情況,那么就要換一種思路,先將主庫整個拷貝過來,然后替換它的屬性信息,讓它成為從庫。要替換的是uuid、pre-revprop-change和/db/revprops/0/0。