初玩MySQL慢查询的小伙伴可能会碰到这样一个问题,在使用慢查询分析工具mysqldumpslow的时候会报一个这样的错误
-bash:mysqldumpslow: command not found
原因:
系统默认是在/usr/bin目录下找mysqldumpslow命令,如果你的Mysql没有安装在这个路径下,那就报错给你看
解决办法:
- 因为系统会来这找命令,所以直接把MySQL安装在这就好(什么?已经安装到其他路径下了不想再重新安装?那就使用下面一招)
- 告诉系统,到指定的路径下找mysqldumpslow文件,给服务器一个指令,告诉它你的文件在这里,比如我的安装路径和文件在/www/server/mysql/bin下
所以我要告诉服务器到这里去找mysqldumpslow文件
ln -s /www/server/mysql/bin/mysqldumpslow /usr/bin;
当然有伙伴或出现 文件已存在的情况
莫慌,我们可以把它覆盖掉,在原有命令上加f即可(注意: /usr/bin前面有一个空格)
ln -sf /www/server/mysql/bin/mysqldumpslow /usr/bin;
回车后,如果什么都没有,那就说明系统已经找到mysqldumpslow这个文件了,测试一下,如果出现下面的画面,说明文件已经找到,接下来就可以使用mysqldumpslow分析慢日志了
mysqldumpslow --help
测试:
我的慢查询时间设定是3S,分别执行下面2条命令,模拟SQL执行5秒和8秒的情况,再查看慢日志有没有记录下
select sleep(5);
select sleep(8);
执行完成,理论上说超过我设定的3秒,肯定会被记录到慢日志中了,啥?你不知道你日志文件放在哪了?!?执行下面代码
show variables like '%slow_query_log%';
比如执行后,我的位置在/www/server/data/mysql-slow.log,记住这个位置,待会要用到
然后exit退出MySQL,因为日志文件不在MySQL中
知道慢日志文件位置,就可以结合一下命令,用mysqldumpslow来分析日志了
-s 按照那种方式排序
c:访问计数
l:锁定时间
r:返回记录
al:平均锁定时间
ar:平均访问记录数
at:平均查询时间
-t 是top n的意思,返回多少条数据。
-g 可以跟上正则匹配模式,大小写不敏感
mysqldumpslow -s c -t 2 /www/server/data/mysql-slow.log;
我添加了一个5秒一个8秒的模拟慢SQL,查询出来的综合时间13秒,共2条数据,执行的SQL语言是select sleep(秒),能出现这样的结果说明mysqldumpslow分析慢查询OK