lepus pt-query-digest 分析mysql慢日志查询

     最近在做mysql的监控,本地搭建了一个lepus监控系统,github地址为:https://github.com/Georce/lepus,这个系统只借鉴了mysql 慢日志查询的部分页面和代码,这个系统是mysqlmtop的升级版,因为本地搭建的mysqlmtop缺少慢日志的脚本,现记录下慢日志查询的过程:

  • 需要先开启mysql慢日志

        慢查询日志概念

     MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

慢查询日志相关参数

MySQL 慢查询的相关参数解释:

slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭。

log-slow-queries  :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。

log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。

log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件

默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下图:

lepus pt-query-digest 分析mysql慢日志查询_第1张图片

若mysql慢日志为OFF,通过set global slow_query_log=1将慢日志开启,单此种方法只对当前数据库生效,如果MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf,修改my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器

  • 下载压缩包后,将sql导入到库中,文件路径为:lepus-master\lepus-master\lepus\Lepus\lepus_v3.7\sql,慢日志查询用到两张表,分别为:mysql_slow_query_review,mysql_slow_query_review_history

 慢日志查询脚本为:lepus_slowquery.sh,路径为:lepus-master\lepus-master\lepus\Lepus\lepus_v3.7\python\client\mysql,代码如下图:lepus pt-query-digest 分析mysql慢日志查询_第2张图片

由于慢查询收集需要依赖percona-toolkit工具中的pt-query-digest工具做慢查询日志分析,我们需要安装percona-toolkit具体如下:

1)安装该工具依赖的软件包

yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-TermReadKey perl-IO-Socket-SSL -y

2)软件下载:https://www.percona.com/downloads/percona-toolkit

3)将下载的压缩包上传服务器,我上传到/usr/local/bin下,解压,步骤如下:

tar xvf percona-toolkit-2.2.12.tar.gz

cd percona-toolkit-3.0.12

 perl Makefile.PL

make && make install

pt安装好后,用pt-query-digest --version查看版本,若显示版本号,则表示安装成功,安装成功后修改慢日志查询中的相应配置

mysql 安装路径查询:

which mysql

pt-query-digest 安装路径查询:

which pt-query-digest

mysql 慢日志存放位置:

show variables  like '%slow_query_log%'

如下图:

lepus pt-query-digest 分析mysql慢日志查询_第3张图片

4)把lepus_slowquery.sh脚本拷贝到被监控端,我上传到/usr/local/bin下,进入到/usr/local/bin,手动运行shell脚本,如下图:

若没报错则执行成功,去数据库中查看上面两张表会有数据,点击页面,显示效果如下图:

lepus pt-query-digest 分析mysql慢日志查询_第4张图片

详情页如下图:

lepus pt-query-digest 分析mysql慢日志查询_第5张图片

运行shell脚本可能会报错

1)Using a password on the command line interface can be insecure.

这个错误是由于mysql5.6以上版本, mysql -u root -pPASSWORD 或 mysqldump -u root -pPASSWORD 都会输出这样的警告信息,因为这样直接输入密码不安全,可以修改my.cnf中的配置,我嫌烦就没有修改,直接警告信息重定向到/dev/null,忽略掉告警信息,修改脚本部分如下图:

lepus pt-query-digest 分析mysql慢日志查询_第6张图片

至此解决

2:)No such file or directory25: /usr/bin/mysql

这个是由于shell脚本中的空行所致,将空行都删除就可以了

3)pt-query-digest  Unknown option: history

这个报错是由于pt安装的版本问题,我一开始安装的是2.1.12就报这个错误,然后删除后,重新下载最新的3.0.12运行就不会报错了

4)vim 编辑脚本,用:set ff?命令显示当前的格式,默认为dos,这时不能执行的,需要执行:set ff=unix变更为unix后,脚本可执行,如下图:

lepus pt-query-digest 分析mysql慢日志查询_第7张图片

至此,pt监控mysql慢查询就实现了

ps:有兴趣的可以关注下我的公众号和小程序,谢谢啦~~

lepus pt-query-digest 分析mysql慢日志查询_第8张图片lepus pt-query-digest 分析mysql慢日志查询_第9张图片

你可能感兴趣的:(php,学习,sql)