比较简单的一个逻辑,通过information_schema.tables输出表空间数据大小,在两个时间点进行比较,增量大于1000000000b则发邮件警报,我这里设定的时间间隔为七天
#!/bin/bash
mysql=/usr/local/mysql
user=yourdatabaseuser
passwd=yourdatabasepasswd
now=/datalength/now
before=/datalength/before
info=/datalength/info
date=`date +%Y_%m_%d`
#更新上个时间点的表空间数据文件
cat $now > $beforei
echo >> $info
echo "========================$date===========================" >> $info
#输出当前表空间数据
$mysql -u$user -p$passwd -e "SELECT table_name,data_length FROM information_schema.tables WHERE table_name in ('table_a','table_b','table_c') group by table_name" > $now
#邮件标识
mail_flag=0
line=`wc -l $now | cut -d" " -f1`
for ((i=2;i<=$line;i++));do
table=`head -$i $now | tail -1 |awk '{print $1}'`
#当前表空间大小(第i行)
n=`head -$i $now | tail -1 |awk '{print $2}'`
#之前表空间大小(第i行)
b=`head -$i $before | tail -1 |awk '{print $2}'`
#计算增量
increment=`expr $n - $b`
#若增量大于规定的大小,则更新邮件标识
if [ $increment -gt 1000000000 ];then
mail_flag=1
fi;
#输出增量
echo "Table $table increment is $increment b" >> $info
done
#根据邮件标识判断是否发邮件
if [ $mail_flag = 1 ];then
tail -$line $info | mail -s "data_length超量告警 $date" xx@qq.com
fi