腳本實現svn備份與恢復,基於rsync實現遠程備份,並記錄日誌

svn服務器:192.168.40.110 

備份服務器:192.168.40.162

在svn服務器進行本地備份

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.增量備份

# 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.添加定時任務

# 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服務器:

# 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.重啓服務

# /etc/init.d/xinetd restart


 7.同步備份至192.168.40.162


提供認證文件,且權限必須爲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  [email protected]::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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章