應用場景:備份公司web服務器數據,日誌以及系統配置信息。
腳本說明:本地使用tar備份,備份完成時使用md5sum 生成標誌以便備份服務器上檢查備份是否成功,備份結果用rsync推送到備份服務器(也可使用ftp方式上傳至ftp服務器),備份服務器檢查備份是否成功併發送郵件通知管理員。
備份本地保留一週,服務器保留一月數據。
分析:需要備份內容(1-4爲配置文件,5-6爲web服務器數據及日誌)
1、定時任務服務的配置文件/var/spool/cron/root
2、日常腳本的目錄
3、web服務器數據,假定爲/var/www/html
4、日誌,假定爲/var/log/httpd
首先,配置好rsync服務器和客戶端,並測試可以使用;
其次,本地tar打包備份;
再次,使用rsync推送到服務器;
最後,服務器端檢查並郵件告警;
測試各個階段都沒問題,設置定時任務。
**************************************************************************************
一、配置rsync 服務端
1.配置rsync.conf
uid= rsync
gid= rsync
usechroot = no
maxconnections = 200
timeout= 300
pidfile = /var/run/rsyncd.pid
lockfile = /var/run/rsync.lock
logfile = /var/log/rsyncd.log
[data]
comment= It's my test data!
path= /data/
ignoreerrors
readonly = false
list= false
hostsallow = 192.168.147.0/24
hostsdeny = 0.0.0.0/32
authusers = rsync_backup
secretsfile = /etc/rsyncd.passwd
2.準備用戶並授權
[root@localhost ~]# mkdir /data
[root@localhost ~]# useradd rsync -s/sbin/nologin -M
[root@localhost ~]# chown -Rrsync.rsync /data
3.配置用於rsync同步的密碼文件
[root@localhost ~]# echo"rsync_backup:123456" >> /etc/rsyncd.passwd
[root@localhost ~]# cat/etc/rsyncd.passwd
rsync_backup:123456
[root@localhost ~]# chmod 600/etc/rsyncd.passwd
[root@localhost ~]# ll/etc/rsyncd.passwd
-rw------- 1 root root 20 Sep 7 17:29 /etc/rsyncd.passwd
4.啓動rsync服務
二、配置rsync客戶端
[root@localhost ~]# echo " 123456">> /etc/rsyncd.passwd
[root@localhost ~]# cat/etc/rsyncd.passwd
123456
[root@localhost ~]# chmod 600/etc/rsyncd.passwd
[root@localhost ~]# ll/etc/rsyncd.passwd
-rw------- 1 root root 20 Sep 7 17:29 /etc/rsyncd.passwd
三、編寫shell腳本
#!/bin/sh
Date=$(date +%Y%m%d)
Back_Dir="/backup/$Date"
Back_file="var/spool/cron/root etc/httpd/conf/httpd.conf "
Back_web_dir=var/www/html
Back_log_dir=var/log/httpd
SIP="172.16.1.51::backup"
Back_list="Back_file Back_web_dir Back_log_dir "
[ -d $Back_Dir ] || mkdir -p $Back_Dir
for i in `echo $Back_list `
do
cd / && tar czf $Back_Dir/$i.tar.gz ${!i}
if [ $? -eq 0 ]
then
cd $Back_Dir
md5sum $i.tar.gz > $i.md5.txt
rsync -avzp {$i.tar.gz,$i.md5.txt} rsync_backup@$SIP --password-file=/etc/rsyncd.passwd
else
echo "bak err!"
fi
doen
#del local backup file,Keep a week data
find $Back_Dir -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
服務器端檢查郵件告警腳本在服務端完成:
#!/bin/bash
#define var
Today=$(date +%F)
Flag_file=/backup/192.168.147.128/flag.$Today.txt
Mail_file=/opt/mail_bak_${Today}.txt
#check flag
if [ ! -f ${Flag_file} ]
then
echo "backup is error,pls view back server" > ${Mail_file}
else
find /backup -type f -name "flag.$(date +%F)*" | xargs md5sum -c | grep FAILED > ${Mail_file}
fi
#check Mail_file
if [ -s ${Mail_file} ]
then
mail -s "$(date +%F-%T) back" [email protected] <${Mail_file}
else
echo "backup is success!"
fi
#del remote bak file,30 days keep data
find /backup -type f -name "*.tar.gz" -mtime +30 | xargs rm -f