慢日志使用前的准备工作

使用慢日志之前,需要确定服务器的 MySQL 是否开启了慢日志,使用下述 SQL 语句进行查询(需要有权限,如果你是 root 账户,直接操作即可)

show variables  like '%slow_query_log%';

查询结果如下所示,只有开启了日志,才能进行慢日志文件查看。

elk mysql慢查询日志 mysql查看慢日志_elk mysql慢查询日志

除此之外,在使用下述命令查看一下,当前服务器配置的慢日志记录时间,即SQL查询超过多长时间才会被记录。

show variables like 'long_query_time';

例如下图所示,当前慢日志记录的时间为 3+ 秒。

elk mysql慢查询日志 mysql查看慢日志_数据库_02

如果服务器没有开启慢日志,在搜索引擎寻找开启颁发,然后重启 MySQL 即可。

慢日志开启之后,服务器运行几天,就可以去下载慢日志文件了,例如当前我(橡皮擦)使用的慢日志如下所示。

elk mysql慢查询日志 mysql查看慢日志_数据库_03

慢日志的格式如下图所示:

elk mysql慢查询日志 mysql查看慢日志_elk mysql慢查询日志_04

上图中的相关参数说明如下:

User@Host: 账号[密码] @ 服务器地址 []  Id: 570368
Query_time: 7.025717  Lock_time: 0.000000 Rows_sent: 286349  Rows_examined: 286349

Query_time 表示用了 7.025717 秒, Lock_time 表示锁了 0.000000 秒, Rows_sent 表示返回 286349 行, Rows_examined 表示一共查到 286349 行。

解析慢日志

从远程服务器下载慢日志文件之后,就可以对其进行分析了,这里重点使用的工具是 mysqldumpslow ,此时需要注意,分析是在本地电脑实施的,所以需要检查本地 mysqldumpslow 是否正常运行。

进入 MySQL 安装目录的 bin 文件夹,寻找 mysqldumpslow.exe 程序,如果发现仅有 mysqldumpslow.pl 文件(该文件一般是由于你的 MySQL 是使用 PhpStudy 工具安装的),需要再安装一个工具,名称为 ActivePerl ,这是由于 mysqldumpslow.pl 是 perl 程序,我们需要 perl 编译器。

安装 ActivePerl 时,注意配置 Path 环境变量,然后通过控制台进入到 MySQL 下的 bin 目录,首先使用 perl mysqldumpslow.pl --help ,查看是否能正常使用 mysqldumpslow 工具。

出现下图输出,即表示配置成功。

elk mysql慢查询日志 mysql查看慢日志_mysql慢日志_05

其中涉及到很多关键字,稍微需要记忆一下:

  • -s:是表示按照何种方式排序,ORDER 参数可以为 c:访问次数l:锁定时间r: 返回记录t: 查询时间al: 平均锁定时间ar: 平均返回记录数at: 平均查询时间
  • -t:表示 top n 的意思,返回前面多少条数据;
  • -g:后面可以编写正则表达式,进行数据筛选;

有了上述内容之后,就可以进行慢日志相关检索了,例如下述命令,其中 log 文件为慢日志文件路径。

perl mysqldumpslow.pl -s c -t 20 C:\Users\Administrator\Downloads\mysql-slow.log

按照访问此处排序获取前20条。

elk mysql慢查询日志 mysql查看慢日志_服务器_06

输出内容如上所示,其中 LIMIT N,N 是由于 mysqldumpslow 会认为这是一种类型的语句,合并显示。

上述红框内的数据为:

Count: 47  Time=3.20s (150s)  Lock=0.00s (0s)  Rows=0.0 (0), username[password]@localhost

解释如下:

Count: 47(执行总次数) Time=3.20s(单次执行时间) (150s)(总执行时间) Lock=0.00s (0s)(等待锁的时间) Rows=0.0(单次返回记录数) (0)(总返回记录数), username[password]@localhost