linux 下mysql配置慢日志查询

本文介绍了如何在MySQL中配置慢查询日志,包括在my.cnf中设置参数以及通过命令行动态开启。在配置过程中遇到的问题,如文件权限和配置文件路径不生效,以及通过SET GLOBAL命令临时解决。此外,还讨论了mysqldumpslow工具的使用,以及在执行过程中遇到的版本差异和错误。最后,提到了分析慢日志的替代工具,如使用cat命令。
摘要由CSDN通过智能技术生成

配置起来非常简单 到 vi /etc/my.cnf 进行配置 切记一定要配置到 [mysqld] 下面

# mysql 慢日志查询配置
# 是否已经开启慢查询
slow_query_log=on
# 慢查询日志文件路径
slow_query_log_file=/home/mysql/log/mysql-slow.txt
# 超过多少秒的查询就写入日志
long_query_time=1

常用参数:

slow_query_log : 无效(0或者OFF)、有效(1或者ON)
slow_query_log_file : 指定日志文件
long_query_time : 超过指定时间的SQL会记录到日志文件(默认时间为10)
log_output : 日志存放的地方 参数(TABLE ,FILE) 表示将日志存入文件,默认值是'FILE' log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中.
log_queries_not_using_indexes: 是否指定未使用索引的SQL

然后重启mysql

systemctl start mysqld.service

然后到navicat 客户端查询:

show variables like '%query%';

在这里插入图片描述
这个参数为 ON 就已经打开了
我这里有个问题:上午的时候我在公司,用公司测试系统服务器进行慢日志配置的时候,当我在 my.cnf 里面进行修改的时候,修改完重启以后是可以生效的,但是晚上我用自己的服务器,修改后重启就发现不能生效,任何配置均不生效, 可以看到我上面配置文件图片所放的路径,和下面图片查出来 路径是不一致的(下图的是mysql 默认给的文件),这就是没有不生效,我就百度了一下,尝试了各种方法
1.文件权限不足
刚开始的时候确实只有只读,我为了测试,就直接赋予的 777 权限

chmod -R 777 /home/mysql/log/mysql-slow.txt 

然后重启,发现还是没有效果,
2.mysql 配置读取不一定是当前的配置文件
查找命令如下:

# 拿到mysql 按装地址
which mysql

然后:

/usr/bin/mysql --verbose --help | grep -A 1 'Default options'

在这里插入图片描述
然后我就一个一个的试了试,除了/etc/my.cnf 外其他均没找到具体文件
在这里插入图片描述
这样就得出结论 我配置的慢日志查询没有生效。所以可能跟我使用的数据库版本有关,我使用的是 5.7.29 公司使用的是哪个版本,我也没太注意

然后接着上面,配置文件不生效的情况下,我是如何开启的:

虽然配置不管用,还好命令管用

#开启慢日志查询
SET GLOBAL slow_query_log =on; 
# 设置查询阈值
SET GLOBAL long_query_time = 10

这里有个细节需要注意一下,就是 默认阈值是10秒,但是当我修改为1秒的时候,再查询但是显示的结果并为生效,直到我又重新打开一个查询的窗口的时候,再执行

show variables like '%query%';

发现 这个阈值已经发生变化

然后我又尝试修改了一下日志存放地址:

SET GLOBAL slow_query_log_file ="/home/mysql/log/mysql-slow.txt"

结果报了这个错误:

Variable 'slow_query_log_file' can't be set to the value of '/home/mysql/log/mysql-slow.txt'

我查了一下,说是这个文件不存在,或者权限不足,我777的权限,我也不能说啥了,就这样吧,就用默认的文件吧,然后验证一下

SELECT SLEEP(11)

然后读取慢日志
在这里插入图片描述
发现已经可以取到这个慢查询的SQL了

mysql 慢查询的日志分析工具还有多种,我目前用的是 mysqldumpslow
mysqldumpslow是官方提供的perl脚本
执行命令:

# 分析慢查询日志中前3条命令:
mysqldumpslow -t 3 /var/lib/mysql/localhost-slow.log

但是我执行的时候 报了:

-bash: /usr/bin/mysqldumpslow: /usr/bin/perl: bad interpreter: No such file or directory

应该是差包,这下我就更加确信了,版本的差异问题,因为我上午再公司使用这个命令的时候,并没有提示这个问题,我本来已经准备好迎接这个问题了,结果没有提示
mysqldumpslow 有个缺点就是,当你执行的SQL有动态参数传入的时候 他就显示 N 例如分页就显示 N,N这样是不太友好 所以可以使用其他的分析慢日志的工具,对于我来说,我觉得cat 命令就足够了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值