A主從備份:
原由:從我入職公司到現在svn伺服器就一台,年前我就有想法搞一台備的,不然到時候機器挂了資料丢了就尴尬了。
昨天搞了一整天,網上的各種教學,改來改去,遇到一個坑:同步隻能同步版本,不能同步資料。
晚上回家又想了下,沒想通。今天早上來重新對了下各個配置。發現隻有一個沒有改:svnserve.conf裡
anon-access = read 改為了anon-access = none就沒問題了。
附上操作:
svn主搭建忽略。
主svn:svn://192.168.52.102/test1
從svn:svn://192.168.52.103/test1
大部分都是從上操作:
從上操作:
[建svn庫:
mkdir /home/svn/test1
svnadmin create /home/svn/test1
把主上的conf下的檔案拷貝到備上的conf下:簡單配置如下:
[root@localhost conf]# cat authz | grep ^[^#]
[aliases]
[groups]
admin=lipeng
dev=lipengdev
[/]
@admin=rw
@dev=rw
[repository:/]
@admin=rw
@dev=rw
[root@localhost conf]# cat passwd | grep ^[^#]
[users]
lipeng = Lp19910807
lipengdev = lp19910807
[root@localhost conf]# cat svnserve.conf | grep ^[^#]
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
修改hooks下的pre-revprop-change
全部清空,寫入
#!/bin/sh
exit 0
給執行權限:
chmod 755 pre-revprop-change
先把從的svn起起來 svnserve -d -r /home/svn 下圖中是伺服器啟動的,下面會貼上服務腳本。
從上開始初始化:
svnsync init svn://192.168.52.103/test1 svn://192.168.52.102/test1 --username lipeng --password Lp19910807 --no-auth-cache
從上直接同步:
svnsync sync --non-interactive svn://192.168.52.103/test1 --username lipeng --password Lp19910807
上圖就遇到了開頭說的問題,隻同步了版本屬性,沒有同步資料。需要修改
svnserve.conf裡
anon-access = read 改為了anon-access = none就沒問題了。(主從上都要改為none 切記)
改完貌似需要重新初始化。這邊直接删掉重建了庫。
再次同步問題解決:
]###[]内都是從上操作的。
主上操作:
修改hooks的post-commit,使用者送出代碼就會自動備份到從。
修改hooks上的post-commit(初始内容直接清空,寫入以下内容即可)
chmod +x post-commit
#!/bin/sh
svnsync sync --non-interactive svn://192.168.52.103/test1 --username lipeng --password Lp19910807
下面驗證:
在例外一台機器上驗證:
checkout主的test1:
在别的目錄checkout從的test1
主的test1裡面增删改查,并送出。
[root@svn opt]# cd test1/
[root@svn test1]# ls
asdadasd.txt sakjdhkjashdhjk.txt test1_2_3_4_5_6_7_8.txt test1_2_3_4_5_6.txt test1_2_3_4.txt test1_2.txt ysb
askjhdjkha.txt test11111111.txt test1_2_3_4_5_6_7.txt test1_2_3_4_5.txt test1_2_3.txt test1.txt
[root@svn test1]# touch aaaa.txt
[root@svn test1]# svn add aaaa.txt
A aaaa.txt
[root@svn test1]# svn commit -m "add aaaa.txt"
增加 aaaa.txt
傳輸檔案資料.
送出後的版本為 18。
進到從的那個庫裡,直接update看結果:成功。
B:svn啟動服務腳本:
vim /etc/init.d/svnboot
chmod +x /etc/init.d/svnboot
chkconfig --add svnboot
chkconfig svnboot on
腳本内容如下:
#!/bin/bash
# chkconfig: 2345 85 15
# description: svn server
SVN_HOME=/home/svn
SVN_SERVER=/usr/bin/svnserve
if [ ! -x $SVN_SERVER ]; then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve…"
$SVN_SERVER -d -r $SVN_HOME
echo "Finished!"
;;
stop)
echo "Stoping svnserve…"
killall svnserve
echo "Finished!"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac