MySQL动态修改慢查询相关配置和分析慢查询日志

1.查看现有配置:

show variables like '%slow%'


我们可以看到慢查询已经关闭了
?log_slow_queries和slow_query_log区别?
long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s
slow_query_log : 指定是否开启慢查询日志
log_slow_queries : 指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留)
slow_query_log_file : 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
min_examined_row_limit:查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
log_queries_not_using_indexes: 不使用索引的慢查询日志是否记录到索引

2.修改配置(实时生效)

set global slow_query_log_file='/mnt/log/mysql/error.log';
set global slow_query_log=1;
set global slow_launch_time=1;


这样慢查询就配置好了

注意如果报错就修改mysql文件夹的权限

chown mysql:mysql /mnt/log/mysql/

3.分析慢查询日志:

mysqldumpslow slave-slow.log


发现已经产生一条慢查询日志了

分析这条语句

发现已经使用了索引但是索引比较混乱,已近使用了主键索引不可能慢的,通过观察发现SQL语句有问题:IN 里面使用了一个 ‘1’ 是字符 把’1’改成1就好了