svn服務器:192.168.40.110 shell
備份服務器:192.168.40.162vim
在svn服務器進行本地備份bash
1.全量備份服務器
# vim /data/shell/backup_svn.sh #!/bin/sh # PATH=$PATH:/usr/local/subversion/bin export PATH #定義時間變量,用於文件名後綴 DATE=$(date +%F) #定義SVN庫目錄變量 SVN_DIR_docs=/data/Repositories/docs SVN_DIR_tools=/data/Repositories/tools #定義備份文件存放目錄變量 SVN_BAK_DIR=/data/bak/ #初始化版本號,全庫備份必定是從0版本號開始 echo '0' > /data/svnnum/docs_svn_id echo '0' > /data/svnnum/tools_svn_id #取初始化版本號 NUM_docs1=$(cat /data/svnnum/docs_svn_id) NUM_tools1=$(cat /data/svnnum/tools_svn_id) #取當前最新的版本號 NUM_docs2=$(svnlook youngest $SVN_DIR_docs) NUM_tools2=$(svnlook youngest $SVN_DIR_tools) #備份用戶認證以及受權文件 \cp /data/Repositories/{authz,passwd} /data/bak/. #開始備份 #判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用 All_Backup_svn(){ svnadmin dump $SVN_DIR_docs -r $NUM_docs1:$NUM_docs2 --incremental > $SVN_BAK_DIR/docs_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_docs2 > /data/svnnum/docs_svn_id else echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log fi svnadmin dump $SVN_DIR_tools -r $NUM_tools1:$NUM_tools2 --incremental > $SVN_BAK_DIR/tools_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_tools2 > /data/svnnum/tools_svn_id else echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log fi } All_Backup_svn
2.增量備份socket
# vim /data/shell/day_backup_svn.sh #!/bin/bash # PATH=$PATH:/usr/local/subversion/bin export PATH #定義時間變量,用於文件名後綴 DATE=$(date +%F) #定義SVN庫目錄變量 SVN_DIR_docs=/data/Repositories/docs SVN_DIR_tools=/data/Repositories/tools #定義備份文件存放目錄變量 SVN_BAK_DIR=/data/bak/ #取初始化版本號 NUM_docs1=$(cat /data/svnnum/docs_svn_id) NUM_tools1=$(cat /data/svnnum/tools_svn_id) #取當前最新的版本號 NUM_docs2=$(svnlook youngest $SVN_DIR_docs) NUM_tools2=$(svnlook youngest $SVN_DIR_tools) #開始備份 #判斷備份是否成功,若成功,則記錄當前最新的版本號到臨時文件中,用於下次增量備份使用 Day_Backup_svn(){ if [ $NUM_docs1 -lt $NUM_docs2 ]; then svnadmin dump $SVN_DIR_docs -r $NUM_docs1:$NUM_docs2 --incremental > $SVN_BAK_DIR/docs_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_docs2 > /data/svnnum/docs_svn_id else echo "$(date +%F) docs backup fail...." >> /tmp/svnback.log fi fi if [ $NUM_tools1 -lt $NUM_tools2 ]; then svnadmin dump $SVN_DIR_tools -r $NUM_tools1:$NUM_tools2 --incremental > $SVN_BAK_DIR/tools_bak_$DATE if [ $? -eq 0 ]; then echo $NUM_tools2 > /data/svnnum/tools_svn_id else echo "$(date +%F) tools backup fail...." >> /tmp/svnback.log fi fi } Day_Backup_svn
3.添加定時任務ide
# crontab -e #start 0 2 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1 #每週日作一次全量備份 59 23 * * 0 /data/shell/backup_svn.sh &>/dev/null #對svn進行增量備份 59 23 * * 1-6 /data/shell/day_backup_svn.sh
4.配置rsync服務器:svn
# rpm -qa rsync(若是安裝 yum install rsync -y) rsync-3.0.6-12.el6.x86_64 # yum install xinetd -y 啓用rsync # vim /etc/xinetd.d/rsync # default: off # description: The rsync server is a good addition to an ftp server, as it \ # allows crc checksumming etc. service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
提供rsync配置文件 # vim /etc/rsyncd.conf #rsync --daemon --config=/etc/rsyncd.conf #全局選項 strict modes =yes # 是否檢查口令文件的權限 port = 873 # 默認端口873 log file = /var/log/rsyncd.log # 日誌記錄文件 pid file = /var/run/rsyncd.pid # 運行進程的ID寫到哪裏 [svn] path = /data/bak # 這裏是認證的模塊名,在client端須要指定 max connections = 0 # 客戶端最大鏈接數,默認0(沒限制) uid = root # 指定該模塊傳輸文件時守護進程應該具備的uid gid = root # 指定該模塊傳輸文件時守護進程應該具備的gid ignore errors # 能夠忽略一些無關的IO錯誤 read only = yes # no客戶端可上傳文件,yes只讀 write only = no # no客戶端可下載文件,yes不能下載 hosts allow = * # 充許任何主機鏈接 #hosts deny = 10.5.3.1 # 禁止指定的主機鏈接 auth users = root # 認證的用戶名,若是沒有這行,則代表是匿名 secrets file = /etc/backserver.pas # 指定認證口令文件位置
5.提供認證文件,且權限必須爲600測試
# vim /etc/backserver.pas root:123456 # chmod 600 /etc/backserver.pas
6.重啓服務ui
# /etc/init.d/xinetd restart
7.同步備份至192.168.40.162spa
提供認證文件,且權限必須爲600
# vim /etc/backserver.pas 123456 # chmod 600 /etc/backserver.pas # mkdir -p /data/bak/svn # vim /home/bak/backup_svn.sh #!/bin/bash #備份svn倉庫 /usr/bin/rsync -vzrtopg --progress --delete root@192.168.40.110::svn /data/bak/svn --password-file=/etc/backserver.pas 添加定時任務 # crontab -e #Start 0 2 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1 #備份svn 35 01 * * * /home/backup_svn.sh &> /dev/null #End
8. svn恢復測試
# mkdir docs # svnadmin create newrepos # svnadmin load newrepos < docs_bak_Mon # svnadmin load newrepos < docs_bak_Tue # svnadmin load newrepos < docs_bak_Wed # svnadmin load newrepos < docs_bak_Thu # svnadmin load newrepos < docs_bak_Fri # svnadmin load newrepos < docs_bak_Sun