写在前面:mysql
在实际工做中,按期检查数据库错误日志是必不可少的工做项。可是检查的时候却不必定产生了新的错误信息,或者说咱们更加但愿永远不要有错误信息才好,由于这表示咱们的数据库是健壮的。这种状况下,没法预知错误信息何时产生,而若是咱们检查错误日志又常常是正常的,很容易造成思惟惯性,长此以往没有报错信息,咱们很容易忽略这一工做项。可是错误日志对于咱们来讲又是必不可少的,此时,咱们就但愿,何时产生错误信息,就直接邮件报警通知我,我就能够腾出时间来作一些更有意义的事情了。若是你也有这种需求,那么本文可能会帮到你。sql
脚本文件:
数据库
cat monitor_errorlog.sh
#!/bin/bash
#错误日志监控报警脚本
#监控日期
time=`date +%F`
#time=2018-06-02
cd /home/dbalzb
#按照日期生成error日志监控文件,首先检测当天error日志是否生成过
ls errorlog-$time.txt &> /dev/null
#状态返回值为非0,即表示当天未生成过
if [ $? -ne 0 ];then
cat /home/data/mysql/error.log | grep "$time" | egrep -i 'error|warning' > errorlog-$time.txt
#判断当天是否有错误日志
num=`cat errorlog-$time.txt |wc -l`
if [ $num -ne 0 ];then
mutt lizibin_1@126.com -s "errorlog3306" < errorlog-$time.txt
fi
md5sum errorlog-$time.txt > md5-errorlog-$time.txt
else
cat /home/data/mysql/error.log | grep "$time" | egrep -i 'error|warning' > errorlog-$time-new.txt
#第二次及之后执行的脚本文件会生成新的errorlog文件,并生成新的md5sum值
md5sum errorlog-$time-new.txt >> md5-errorlog-$time.txt
str1=`cat md5-errorlog-$time.txt | sed -n '1p' | awk '{print $1}'`
str2=`cat md5-errorlog-$time.txt | sed -n '2p' | awk '{print $1}'`
#num1=`cat errorlog-$time-new.txt |wc -l`
#cat errorlog-$time.txt >> errorlog-$time-history.txt
#对比两个文件的md5sum值来判断是否有新的错误日志生成
if [ $str1 != $str2 ];then
mutt lizibin_1@126.com -s "new-errorlog3306" < errorlog-$time-new.txt
#cat errorlog-$time-new.txt >> errorlog-$time-history.txt
fi
/bin/rm -f errorlog-$time-new.txt
sed -i '2d' md5-errorlog-$time.txt
fi
bash
添加计划任务:(每小时执行一次,可自行调整)ide
5 */1 * * * sh /home/dbalzb/monitor_errorlog.shspa
条条大路通罗马,你是怎么动态监控数据库错误日志的呢?欢迎下方留言。日志