mysql 慢查询脚本_生成每日Mysql慢查询简报脚本

最近慢查询较多,想法子自动做数据统计:

生成的简报的内容如下 :

---------------Daily Slow Query Report Create at 110812 18:16:09-----------------

FROM 8:25:17    To 8:25:57

COUNT   SQL_TEXT

----------------

356 select * from (select a.colum1 ,c.column2 ,c.column3,c.column5

45 select a.*,c.column3, c.column4 from table_namea a l

36 select count(*) from table_namea a left join table_namec

FROM 8:25:57    To 8:26:00

COUNT   SQL_TEXT

----------------

18 select * from (select a.colum1 ,c.column2 ,c.column3,c.column5

5 select a.*,c.column3, c.column4 from table_namea a l

FROM 8:26:00    To 8:26:07

COUNT   SQL_TEXT

----------------

68 select * from (select a.colum1 ,c.column2 ,c.column3,c.column5

15 select a.*,c.column3, c.column4 from table_namea a l

10 select count(*) from table_namea a left join table_namec

-------------------------------------------------------------------------------------------

实现脚本

#!/bin/bash

date_mark=`date +%y%m%d`

date_now=`date "+%y%m%d %H:%M:%S"`

name=`hostname |cut -d'.' -f1`

dirpath="/var/mysqldatadir/"

file_name="$name-slow.log"

#分割时间段-汇总1分钟之内的

sed -n "/Time: $date_mark/,$ p" $dirpath/$file_name > /tmp/$file_name-$date_mark

grep "\# Time: $date_mark" /tmp/$file_name-$date_mark |cut  -c1-21 |awk '{print $4}' |uniq > /tmp/$file_name-$date_mark-split.tmp1

echo "" > /tmp/$file_name-$date_mark-split

for tmp in $(cat /tmp/$file_name-$date_mark-split.tmp1)

do

grep '\# Time: ' /tmp/$file_name-$date_mark|grep "$tmp" |awk '{print $4}'|xargs |awk '{print $1"\n"$NF}' >> /tmp/$file_name-$date_mark-split

done

sed -i -e  '/^$/d' -e '$d' /tmp/$file_name-$date_mark-split

echo -ne "\n---------------Daily Slow Query Report Create at $date_now-----------------\n"

steps_cnt=`wc -l /tmp/$file_name-$date_mark-split|awk '{print $1}'`

#分时间段汇总

LIMIT="$steps_cnt"

for ((cnt=1; cnt <= LIMIT ; cnt++))

do

start_time=`sed -n "$cnt p" /tmp/$file_name-$date_mark-split`

indirect_cnt=`expr $cnt + 1`

end_time=`sed -n "$indirect_cnt p" /tmp/$file_name-$date_mark-split`

last_time=`grep "\# Time: $date_mark" /tmp/$file_name-$date_mark|tail -1`

if [ "$indirect_cnt" -gt "$steps_cnt" ]

then

strings=`echo "FROM $start_time \tTo $last_time"|sed -e "s%# Time: %%g"`

echo -ne "\n$strings\n"

sed -n "/$start_time/,$ p"  /tmp/$file_name-$date_mark|grep -v "^#" |sort -nr |cut -c1-60 |uniq -c|sort -nr|awk 'BEGIN {print "COUNT   SQL_TEXT\n----------------"}{print $0}'

rm -f /tmp/$file_name-$date_mark-split/tmp/$file_name-$date_mark-split.tmp1

sleep 5

e_address="monitor@mydomain.com"

mail -s "$name slow query report at $date_now" $e_address < /tmp/email_text

exit 0

fi

strings=`echo "FROM $start_time \tTo $end_time"|sed -e "s%# Time: %%g"`

echo -ne "\n$strings\n"

sed -n "/$start_time/,/$end_time/ p"  /tmp/$file_name-$date_mark|grep -v "^#" |sort -nr |cut -c1-60 |uniq -c |sort -nr|awk 'BEGIN {print "COUNT   SQL_TEXT\n----------------"}{print $0}'

done

每日调用脚本

report_daily_slowlog.sh > /tmp/email_text

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值