linux服務器數據遷移—全網備份
項目需求說明:
1) 所有服務器的備份目錄必須都為/backup。
2) 要備份的系統配置文件包括但不限於:
a.定時任務服務的配置文件(/var/spool/cron/root)(適合 web 和 nfs 服務器)。
b.開機自啟動的配置文件(/etc/rc.local)(適合 web 和 nfs 服務器)。
c.日常腳本的目錄 (/server/scripts)。
d.防火墻 iptables 的配置文件(/etc/sysconfig/iptables)。
e.自己思考下還有什麽需要備份呢?
3) Web 服務器站點目錄假定為(/var/html/www)。
4) Web 服務器 A 訪問日誌路徑假定為( /app/logs)
5) Web 服務器保留打包後的 7 天的備份數據即可(本地留存不能多於 7 天,因為太多硬盤會滿)
6) 備份服務器上,保留每周一的所有數據副本,其它要保留 6 個月的數據副本。
7) 備份服務器上要按照備份數據服務器的內網 IP 為目錄保存備份,備份的文件按照時間名字保存。
8)需要確保備份的數據盡量完整正確,在備份服務器上對備份的數據進行檢查,把備份的成功及失敗結果
2.備份服務器rsync服務的安裝
1)安裝rsync服務
[[email protected] scripts]# pwd
/server/scripts
[[email protected] scripts]# vim rsyncserver_install.sh
#!/bin/sh
rsync_judge=`rpm -qa|grep rsync|wc -l` #定義判斷的變量
if [ $rsync_judge -eq 1 ] #判斷rsync服務是否安裝
then
echo "rsync in installed"
else
yum install rsync -y
fi
touch /etc/rsyncd.conf #創建rsync配置文件
/bin/cat >/etc/rsyncd.conf<<EOF #導入配置文件
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
uid = rsync
gid = rsync
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
EOF
[ -d /backup ]|| mkdir /backup -p #創建備份目錄
useradd rsync -s /sbin/nologin -M >/dev/null 2>&1 #創建rsync授權用戶
chown -R rsync.rsync /backup #對備份目錄進行授權
echo "rsync_backup:oldboy123" >/etc/rsync.password #創建密碼文件
if [ `netstat -lntup|grep rsync|wc -l` -ne 2 ] #判斷rsync服務是否啟動
then
rsync --daemon
else
echo "rsync is running"
fi
2)測試
[[email protected] scripts]# sh rsyncserver_install.sh
rsync in installed
rsync is running
3.客戶端rsync服務並測試
1)編寫腳本
[[email protected] scripts]# pwd
/server/scripts
[[email protected] scripts]# vim rsyncclient_install.sh
#!/bin/sh
rsync_judge=`rpm -qa|grep rsync|wc -l` #定義變量
if [ $rsync_judge -eq 1 ] #判斷rsync服務是否安裝
then
echo "rsync in installed"
else
yum install rsync -y
fi
[ -d /backup ]|| mkdir /backup -p #創建備份目錄
echo "oldboy123" >/etc/rsync.password #指定rsync的密碼
cd /backup #創建123文件進行推送測試
touch 123.txt
rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.password
2)進行測試
[[email protected] scripts]# sh rsyncclient_install.sh
rsync in installed
[[email protected] backup]# ls #backup服務器被推送過來了
123.txt
4.在web服務器執行客戶端安裝腳本
[[email protected] scripts]# sh rsyncclient_install.sh
5.在nfs01服務器編寫備份腳本
1)進入腳本目錄進行編輯
[[email protected] scripts]# pwd
/server/scripts
[[email protected] scripts]# vim backup_web01.sh
#!/bin/sh
local_ip=`ifconfig eth1|awk -F "[ :]+" ‘NR==2{print $4}‘` #定義本機IP地址
remote_ip="172.16.1.41" #rsync服務器IP
Cron=/var/spool/cron/root #定義備份路徑
RC=/etc/rc.local
Scripts=/server/scripts
Iptable_rules=/etc/sysconfig/iptables
Back_Path=/backup/
Time=`date +%F_%w -d "-1day"` #定義時間,因為是晚上12點備份,所以應該是之前一天的內容
if [ -d $Back_Path ] #判斷備份目錄是否存在,可以不做
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
tar zchfP /$Back_Path/sysinfo_${Time}.tar.gz $Cron $RC $Scripts $Iptable_rules #備份重要文件
sleep 3
cd $Back_Path
md5sum sysinfo_${Time}.tar.gz >${Back_Path}/finger.log #通過md5生成認證日誌
rsync -az $Back_Path [email protected]${remote_ip}::backup/${local_ip} --password-file=/etc/rsync.password #將備份目錄的內容推送到備份服務器,並以自己的ip地址為目錄進行保存
find ./ -type f -name "*.tar.gz" -mtime +7 -exec rm -rf {} \; #刪除7天前的內容
6.在web01上進行編寫備份腳本
[[email protected] scripts]# pwd
/server/scripts
[[email protected] scripts]# vim backup_web01.sh #和nfs的備份腳本一樣,只是多了兩個目錄
#!/bin/sh
local_ip=`ifconfig eth1|awk -F "[ :]+" ‘NR==2{print $4}‘`
remote_ip="172.16.1.41"
Cron=/var/spool/cron/root
RC=/etc/rc.local
Scripts=/server/scripts
Iptable_rules=/etc/sysconfig/iptables
Back_Path=/backup/
Time=`date +%F_%w -d "-1day"`
Log=/app/logs #log日誌目錄
www_backup=/var/html/www #站點目錄
if [ -d $Back_Path ]
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
tar zchfP /${Back_Path}/sysinfo_${Time}.tar.gz $Cron $RC $Scripts $Iptable_rules
tar zchfP /${Back_Path}/log_${Time}.tar.gz $Log
tar zchfP /${Back_Path}/www_${Time}.tar.gz $www_backup
cd $Back_Path
md5sum sysinfo_${Time}.tar.gz log_${Time}.tar.gz www_${Time}.tar.gz >finger.log
#md5sum log_${Time}.tar.gz >>finger.log
#md5sum www_${Time}.tar.gz >>finger.log
rsync -az ${Back_Path} [email protected]::backup/${local_ip} --password-file=/etc/rsync.password
find $Back_Path -type f -mtime +7 -exec rm -rf {} \;
7.服務端配置
1)首先配置郵箱服務
[[email protected] backup]# vim /etc/mail.rc 將下面內容追加到文檔結尾
set [email protected] smtp=smtp.163.com <- 郵件發送郵件服務器域名,此處為163郵箱的發送服務器域名
set [email protected] smtp-auth-password=xxx #是授權碼 smtp-auth=login
重啟postfix服務
[[email protected] backup]# /etc/init.d/postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
2)編輯腳本
[[email protected] backup]# cd /server/scripts/
[[email protected] scripts]# vim check_info.sh
#!/bin/sh
. /etc/init.d/functions #加載函數庫
Back_Path=/backup
Src_address1=172.16.1.31
Src_address2=172.16.1.8
Time=`date +%F_%w -d "-1day"`
#nfs_md5=`md5sum -c md5_2017-08-30_3.log|awk -F "[: ]+" ‘{print $2}‘`
if [ -d $Back_Path ] #判斷備份目錄是否存在
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
cd ${Back_Path}/${Src_address1}
if [ `md5sum -c finger.log|awk -F "[: ]+" ‘{print $2}‘` == "OK" ] #判斷md5校驗是否出錯
then
action "nfs01的備份數據正確" /bin/true
echo "nfs01的備份數據正確" >check_info.log #如果正確就將次信息重定向到Log文件中
else
action "nfs01的備份數據正確" /bin/false
echo "nfs01的備份數據出錯" >check_info.log #如果錯誤就將次信息重定向到Log文件中
fi
#將結果發送到郵箱
/bin/mail -s "check_data mail" [email protected] <${Back_Path}/${Src_address1}/check_info.log
#刪除180天之前的備份結果並保留每周一的內容
find ${Back_Path}/${Src_address1} -type f -name "*.gz" -mtime +180 ! -name "*1.tar.gz" -exec rm -rf {} \;
#下面的結果和上面一樣
cd ${Back_Path}/${Src_address2}
if [ `md5sum -c finger.log|awk -F "[ :]+" ‘NR==1{print $2}‘` == "OK" -a `md5sum -c finger.log|awk -F "[ :]+" \
‘NR==2{print $2}‘` == "OK" -a `md5sum -c finger.log|awk -F "[ :]+" ‘NR==3{print $2}‘` == "OK" ]
then
action "web01備份數據正常" /bin/true
echo "web01備份數據正常" >check_info.log
else
action "web01備份數據出錯" /bin/false
echo "web01備份數據出錯" >check_info.log
fi
/bin/mail -s "check_data mail" [email protected] <${Back_Path}/${Src_address2}/check_info.log
find ${Back_Path}/${Src_address2} -type f -name "*.tar.gz" -mtime +180 ! -name "*1.tar.gz" -exec rm -rf {} \;
3)測試[[email protected] scripts]# sh check_info.sh
backup file is exist
nfs01的備份數據正確 [ OK ]
web01備份數據正常 [ OK ]
本文出自 “10997527” 博客,請務必保留此出處http://11007527.blog.51cto.com/10997527/1962425
linux服務器數據遷移—全網備份