欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql表空间增长超量就报警的脚本实现讲解

程序员文章站 2022-03-02 17:27:49
比较简单的一个逻辑,通过information_schema.tables输出表空间数据大小,在两个时间点进行比较,增量大于1000000000b则发邮件警报,我这里设定的时间间隔为七天 #!/...

比较简单的一个逻辑,通过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
mail -s xx@qq.com < $info
fi;