最近在做mysql的监控,本地搭建了一个lepus监控系统,github地址为:https://github.com/Georce/lepus,这个系统只借鉴了mysql 慢日志查询的部分页面和代码,这个系统是mysqlmtop的升级版,因为本地搭建的mysqlmtop缺少慢日志的脚本,现记录下慢日志查询的过程:
慢查询日志概念
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的值来开启,如下图:
若mysql慢日志为OFF,通过set global slow_query_log=1将慢日志开启,单此种方法只对当前数据库生效,如果MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf,修改my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file后,然后重启MySQL服务器
慢日志查询脚本为:lepus_slowquery.sh,路径为:lepus-master\lepus-master\lepus\Lepus\lepus_v3.7\python\client\mysql,代码如下图:
由于慢查询收集需要依赖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%'
如下图:
4)把lepus_slowquery.sh脚本拷贝到被监控端,我上传到/usr/local/bin下,进入到/usr/local/bin,手动运行shell脚本,如下图:
若没报错则执行成功,去数据库中查看上面两张表会有数据,点击页面,显示效果如下图:
详情页如下图:
运行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,忽略掉告警信息,修改脚本部分如下图:
至此解决
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后,脚本可执行,如下图:
至此,pt监控mysql慢查询就实现了
ps:有兴趣的可以关注下我的公众号和小程序,谢谢啦~~