网站建设知识
基于pt-query-digest的慢查询日志追踪脚本一例
2025-07-22 09:57  点击:0

percona-toolkit被称为MySQL DBA的“瑞士***”,其强大性不言而喻。而其中的慢查询分析工具“pt-query-digest”相比官方的“mysqldumpslow”提供了很多额外的属性,例如灵活的过滤器,基于库和表的分析排序等等。

今天分享一例基于“pt-query-digest”和邮件自动追踪MySQL慢查询日志的小脚本,同时避免对同类型的sql语句重复提示。

直接上脚本(只要安装了percona-toolkit,该脚本可以说是傻瓜式的,当然还是看看官方文档深入理解一下最好啦)

#!/bin/shdate_ago=`date+%Y-%m-%d\%H:%M:%S--date='15minago'`#获取15分钟以前的时间,因为我的crontab里面每15分钟执行一遍该脚本aliasmysql_con='mysql-uuser-ppwd'#以下两行操作会在test库里创建query_history和query_review两张表pt-query-digest--historyu=user,p=pwd,D=test/mysqldata/dev-env-slow.log--no-reportpt-query-digest--reviewu=user,p=pwd,D=test/mysqldata/dev-env-slow.log--no-reportrm-f/tmp/slow_query_inc2>/dev/null#清空存放上次结果的文件#查询出first_seen时间晚于15分钟前的checksumforiin`mysql_con-N-s-e"SELECTchecksumFROMpercona_schema.query_reviewwherefirst_seen=last_seenandfirst_seen>'$date_ago'"2>/dev/null`;do#从query_history表查询相关信息,并对输出做些许调整mysql_con-e"SELECTsampleasStatment,ts_maxasTime,query_time_pct_95asQuery_Time,Rows_sent_pct_95asRows_Sent,Rows_examined_pct_95asRows_ExaminedFROMpercona_schema.query_historywherechecksum='$i'\G"2>/dev/null|sed's/^[\t]*//g'|awk-F:'{print$1":"$2}'>>/tmp/slow_query_incdoneif[-s/tmp/slow_query_inc];then#/tmp/slow_query_inc文件有内容才发邮件mail-s'slow_loginlast15min----fromDev'k@test

然后在crontab里设置每15分钟运行该脚本,有新的慢查询出现的话,就会收到邮件啦,如下图:

另有一点:sql监控这个环节最好从开发环境做起,将慢sql扼杀在萌芽阶段^_^