全網備份案例
1、需要備份的文件或目錄(原則上,只要是運維人員寫入或更改的數據,都需要備份):
/var/spool/cron/root、/etc/rc.local、/etc/sysconfig/iptables、/var/www/html、/app/logs
2、為了規範化,每臺web服務器進行本地備份時都備份到/backup目錄下
3、每臺web服務器進行本地備份時,都備到/backup下以本機ip地址命名的目錄中
4、打的tarball文件名中需要包含執行當天的日期
5、統一存儲備份數據的服務器通過rsync daemon方式提供存儲備份數據的目錄/backup
6、由於web服務器本地的存儲空間有限,需要將超過7天的備份數據刪除
7、為了方便的知道每次備份是否成功,我們需要做如下操作:
在每臺web服務器上檢查備份是否成功
在存儲備份數據的服務器上檢查備份是否推送成功,並發送郵件至管理員郵箱
8、由於備份服務器空間有限,需要刪除超過180天的備份數據,但每周六的備份數據需要永久保留
實施步驟
1、在rsync備份服務器上,配置rsync服務,客戶端實現推送(backup服務器)
2、在客戶端nfs服務器上,實現打包、推送、刪除、定時任務推送(前端業務服務器,例如:web服務器)
打包
在客戶端上打包以下目錄到backup目錄下面:
#要打包鏈接文件必須加上h,才能將鏈接的源文件打包
cd /
tar zcvfh /backup/backup_$(date +%F).tar/gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs
推送
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
刪除
find /backup/ -type f -name "*.tar.gz" -mtime+7 #先查找,條件指定越多,越不容易刪錯
find /backup/ -type f -name "*.tar.gz" -mtime+7|xargs rm -f
編寫腳本
在命令測試成功後,寫入服務器上統一存放腳本的目錄下
mkdir -p /server/scripts
cd /server/scripts/
vim bak.sh 填寫如下內容:
#每條命令後面跟 &&\表示前面的命令執行成功,再執行下一條,因為要做定時任務,所以把v參數去掉
#因為要推送的客服端有多臺,為了要分清哪些文件是屬於哪臺機的,所以要獲得本機的IP地址來命名文件。
IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')
Path=/backup
#這一個判斷將要保留的周六的文件特殊命名,以便在備份服務器上永久保留
if [ $(date +%w) -eq 0 ];then
#每天00點備份,實際上文件內容是備份的前一天的。
Time="week_$(date +%F_%w -d "-1day")"
else
#實際工作當中沒有這麽嚴格,都是以日期命名,在每天晚上的23點多一些就開始備份
Time=$($(date +%F -d "-1day") #或者做完某個操作後備份。
fi
#這樣不是很好,每次運行該腳本會創建這樣的目錄?以後自己寫腳本
mkdir $Path/$IP/ -p
cd / &&\
#該例核心是打包完成後,給打包的文件創建md5sum指紋寫入到標記文件當中,推送的時候,一起推送過去。在服務器上/backup目錄,每臺機IP命名的目錄,存放每臺機的備份
tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
#touch /backup/flag_$(date +%F).log &&\
#打完包後,在本地的目錄裏面創建一個flag標誌,將來在備份服務器上,看是否有這個標誌,來判斷是否備份成功
#光打標記還不夠,還需要為該標誌文件做一個指紋,使用md5sum命令來完成。
#md5sum 可以為所有的文件做指紋標識,包括二進制文件,每一個文件的md5sum標記是不一樣的。
#所以下面直接使用md5sum為打包的文件做指紋,並記錄在標記文件中,將來在備份的服務器上,再使用md5sum為該文件做標記,與標記文件中的內容一樣
#就說明在該文件在傳輸過程當中沒有被篡改。
md5sum $Path/$IP/backup_$Time.tar.gz >/backup/flag_$(date +%F).log &&\
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password &&\
find /backup/ -type f -mtime +7 \(-name "*.log" -o -name "*.tar.gz" \)|xargs rm -f
#find命令默認多條件是and,所以這裏使用 -o 或者
保存退出,測試腳本,測試OK後,可以創建定時任務用於每天都執行。
創建定時任務
crontab -e
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
crontab -l #查看
在rsync備份服務器上,做檢查,發郵件給管理員
1、保留每周6的文件,可以在客戶端的腳本當中,將每周6的文件特殊命名。
2、刪除的時候文件名裏有-6這個數字,就保留。
在備份服務器上創建腳本文件,所以服務器腳本存放的路徑都要統一
mkdir -p /server/script
cd /server/script
vim del_date.sh #寫入以下內容
find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f
保存退出,刪除就解決了
檢查數據完整
#比較標誌文件裏的md5值,一樣,就會輸出ok字樣:
md5sum -c /backup/172.16.4.31/flag_week_2016-04-30.log
通過查找文件來比對,錯誤和成功的信息都寫入結果文件裏面:
find /backup/ -type f -name "$(date +%F -d "+1day" )*.log" | xargs md5sum -c >>$(date +%F)_result.log 2>&1
將保存的結果發郵件:
mail -s "標題" 發給誰 <內容來源於哪
mail -s "$(date +%F) bak result" [email protected]<$Path/$(date +%F)_result.log
這樣的結果比較粗焅,可以將成功的記錄底紋變成綠的,不成功的文字底紋變成紅的,再發送出去。
輸出顏色文字
==================================
使用echo 顯示輸出文字的顏色
-e 啟用轉義符
ctrl 用\033來表示
前景色用數字3來引導:編號31-37
背景色用數字4來引導:編號41-47
字體格式,使用一位數字來表示
echo -e "\033[ 字體;前景色;背景色m要修飾的內容\033[0m"
echo -e "\033[31m顯示的內容\033[0m"
後面的\033[0m表示顏色標記結束
==================================
然後將命令整理,放在腳本裏,再創建計劃任務,每天都檢查備份是否成功
發送郵件
linux發郵件2種常見客戶端命令:
1、mail命令語法(推薦)
mail -s "標題" 郵件地址 <文件
mail -s "oldboy" [email protected]< /etc/hosts
2、echo "正文" | mail -s "標題" [email protected]
mailq #查看郵件發送隊列
郵件服務發送的端口: smtp 25 接收:pop3 110
在linux沒有配置郵件服務器與DNS解析之前,通過命令發的郵件,會被當做垃圾郵件給屏蔽了,所以只有在正式的郵件服務器才這樣發郵件
解決辦法:
配置mail使用外部SMTP發郵件
通過修改配置文件可以使用外部SMTP服務器,可以達到不使用sendmail/postfix等內部郵件服務;
而用外部的smtp服務器送郵件到目的地,使用外部郵箱的時候,郵箱要將 smtp授權開啟,使用第三方客戶端發郵件smtp授權後,可以看到郵件下面的smtp地址
修改/etc/mail.rc文件,在最後一行加入
set [email protected] smtp=smtp.qq.com smtp-auth-user=308944299 smtp-auth-password=郵箱第三方授權密碼 smtp-auth=login
說明:
from是發送的郵件地址
smtp是發送的外部smtp服務器地址
smtp-auth-user是外部smtp服務器認證的用戶名
smtp-auth-password是外部smtp服務器認證的用戶密碼
awk '{print ["這裏輸入什麽打印的就是什麽"] $1}'
全網備份案例