应用场景:备份公司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" esen_monitor@163.com <${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