文章《企业级数据备份,rsync加shell编程,实现增量备份  原文地址:http://yaozb.blog.51cto.com/2762349/509266 ,有读者提问怎么才能判断mysql是否备份成功呢,这个问题问的好,其实可以在真实服务器上的备份程序最后一行加入一个通知命令,当整个程序运行完了之后,运行通知命令即可知道是否备份成功。 现在,我们换一种方法,我们在备份服务器上,利用shell写一个检查程序,每天定时检查一下备份是否成功,备份的数据包大小和路径。并通过email发送到指定邮箱。即可得知道是否备份成功,及备份的数据包大小和路径。如果没有备份成功,即检查未备份时间,并提醒备份。 

注:此服务器必须开放25端口,(如posfix,sendmail等,都可以)

  下面,来贴一下程序代码和配置文件

配置文件:

#vim /home/mulu

这个配置文件里,写着都是数据库压缩包的路径,目录下面全是数据库的压缩包

例如:

再来贴一下程序文件:

# vim checkback.sh

 

源文件:

#! /bin/bash

for i in `cat /home/mulu`

do

server=`echo $i|awk -F \/ '{print $3}'`

if [ -f $i/$server.`date +"%Y%m%d"`.tar ];then

file=$i/$server.`date +"%Y%m%d"`.tar

old=`du -sh $file`

echo "$server 备份完成,数据库包大小为 $old" |mail -s "$server backup complete" 410018348@qq.com

else

last=`ls -r $i/$server*|sed -n 1p`

lasttime=`stat $last|grep Modify|awk  '{print $2}'`

lastchuo=`date -d "$lasttime" +%s`

nowchuo=`date +%s`

cha=$(( $nowchuo - $lastchuo))

all=$(( $cha / 86400 ))

day=`echo $all |awk -F . '{print $1}'`

echo "$server  此服务器已经有 $day 天没有备份了,还不赶快备份" |mail -s "warning $server no backup" 410018348@qq.com

fi

done

这个程序是每天四点半运行一次:如下图:

再来看一下运行结果:

如果备份完成,他会显示此服务器备份完成。并统计数据库压缩包大小,及数据包数据,

如下图:

如果没有备份完成,他会统计最后一次备份时间,并计算出,您已经有几天没有备份:

如下图:

========================================================================

好了,程序就这个功能,现在我们来看一下程序的工作原理:

#! /bin/bash

for i in `cat /home/mulu`     # 我们逐一来读取这个文件里每一行,其实每一行就是服务器备份后的数据库所在路径。

do

server=`echo $i|awk -F \/ '{print $3}'`   # 通过读取的路径,取出服务器的Ip地址给server变量

if [ -f $i/$server.`date +"%Y%m%d"`.tar ];then  #判断目录下是否有今天新备份的压缩文件。

file=$i/$server.`date +"%Y%m%d"`.tar  #如果有的话,把他赋值给file

old=`du -sh $file`  #判断file变量,就是今天的包的大小,并给old变量

echo "$server 备份完成,数据库包大小为 $old" |mail -s "$server backup complete" 410018348@qq.com

#发送信息到 指定的邮箱。信息为:服务器名,包大小。及路径 

Else  #再来判断,如果找不到今天备份的数据库压缩包

last=`ls -r $i/$server*|sed -n 1p`   # 找出最后一个数据库压缩包

lasttime=`stat $last|grep Modify|awk  '{print $2}'`  #找出最后一个数据库压缩包的创建时间

lastchuo=`date -d "$lasttime" +%s`   #把最后一个数据库压缩包的创建时间转化为时间戳

nowchuo=`date +%s`              #取现在的时间戳

cha=$(( $nowchuo - $lastchuo))      #对比两个时间戳。并取出值

all=$(( $cha / 86400 ))              #把对出时间戳取出来的值除以86400(注:86400为一天,并取值)

day=`echo $all |awk -F . '{print $1}'`  #把除的值,取整数。即天数。

echo "$server  此服务器已经有 $day 天没有备份了,还不赶快备份" |mail -s "warning $server no backup" 410018348@qq.com

#发送信息到 指定的邮箱。信息为:最后一次备份数据到目前为止的天数据 。即有几天没有备份了!

fi

Done

结束程序。

 

嗯。好了,每天就可放心的读邮件了,不要像以前那样,一个目录一个目录的进去找,看有没有备份成功,哈哈。有不懂可以联系我:扣扣:410018348

 

最后推广一下我的网站  看电影网