1. 程式人生 > >linux服務器數據遷移—全網備份

linux服務器數據遷移—全網備份

全網備份

  1. 項目需求說明:

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服務器數據遷移—全網備份