用shell實現web網站全備份

應用場景:備份公司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


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