文章《企业级数据备份,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
最后推广一下我的网站 看电影网