本文将重点讲述 shell实战中的 mysql index 文件检查机制问题请先看代码:
#!/bin/sh
def_check_index()
{
#code by scpman
#
#mail:
#需求
#
# 通过show master logs; 列出binlog文件序列如果顺序不对或记录重复发告警 发邮件告警
# 查看mysql目录下的index文件如果顺序不对或记录重复发告警
#
#实现
#发送告警函数
def_send_mail()
{
msgip= #syslog服务器
ser_IP=`cat /etc/nf | grep E ifconfig_[em|bce] | awk {print IP:$}| sed n p ` #本机的ip
#echo $ 函数接收的第一个值
if [ n $ ] && [ `echo $|grep c chongfu` gt ] #判断$是否在并且统计下chongfu这个字符是否大于
then
echo /usr/bin/logger p h $msgip the services: $IP mysql index file $ #大于说明有错误的就得告警
exit
elif [ n $ ] && [ `echo $|grep c luanle` gt ] #判断$是否在并且统计下luanle这个字符是否大于
then
echo /usr/bin/logger p h $msgip the services: $IP mysql index file $ #大于说明有错误的就得告警
exit
else
echo ok
fi
}
#判断index是否有重复的情况
def_index_is_one()
{
if [ n $ ]
then
static_index=$
def_send_mail `awk {a[$]++}END{for (j in a) print ja[j]} $static_index | awk v flag=$static_index {if($>) print chongfu>$}`
else
echo def_index_is_one $ is null!exit
exit
fi
}
#检查mysql目录下的index文件内容顺序是否正常
def_static_index_shunxu()
{
bzfile=/usr/dlm_db/mysql/zqtxbinindex
current_line=`cat ${bzfile}|head n |sed e s#/zqtxbin##g`
for i in `cat ${bzfile}`
do
if [ `echo $i|sed e s#/zqtxbin##g` lt $current_line ]
then
def_send_mail luanle:${bzfile}_${current_line}
exit
fi
current_line=`echo $i|sed e s#/zqtxbin##g`
done
}
#检查mysql中show master logs的index文件内容顺序是否正常
def_masterlog_index_shunxu()
{
mysql uroot p s s e show master logs; | awk {print $} | sed e s/zqtxbin//g>/usr/dlm_db/mysql/flag_index
bzfile=/usr/dlm_db/mysql/flag_index
current_line=`cat ${bzfile}|head n `
for i in `cat ${bzfile}`
do
if [ $i lt $current_line ]
then
def_send_mail luanle:master_logs_${i}
exit
fi
current_line=$i
done
}
def_index_is_one /usr/dlm_db/mysql/zqtxbinindex
def_static_index_shunxu
def_masterlog_index_shunxu
def_index_is_one /usr/dlm_db/mysql/flag_index
}
def_check_index