mysql慢查询日志

文章发布于 2023-05-17

慢查询日志

记录执行时间超出指定值或条件的sql语句。

参数

参数名 说明
slow_query_log 慢查询开关
slow-query-log-file 记录慢查询语句的文件
long_query_time 记录大于指定N秒的sql语句 ,默认是10秒
log_queries_not_using_indexes 记录没有使用到索引的sql语句,默认值是off
min_examined_row_limit 记录结果集大于N行的sql语句,默认是0行
log_slow_admin_statements 记录管理的慢sql语句
log_throttle_queries_not_using_indexes 限制每分钟写入的慢sql语句的数量,默认是0没有限制

查看慢查询是否开启

mysql -uroot -p123456 -e "show variables like 'slow_query%';";

+---------------------+---------------------------+
| Variable_name       | Value                     |
+---------------------+---------------------------+
| slow_query_log      | ON                        |
| slow_query_log_file | /usr/local/mysql/slow.log |
+---------------------+---------------------------+

开启或关闭慢查询日志

进入my.cnf配置文件中设置成OFF 或ON 即可

vi /usr/local/mysql/my.cnf
[mysqld]
# 慢查询配置
slow-query-log=ON  								# 开启慢查询
slow-query-log-file=/usr/local/mysql/slow.log  	#记录sql语句的文件
long_query_time=2  								#记录大于2秒的sql语句
log_queries_not_using_indexes=ON  				#没有使用到索引的sql语句
min_examined_row_limit=800   					# 记录结果集中大于800 行的sql语句

重启mysql服务

systemctl restart mysql 

刷新(切割)文件

利用计划任务按天切割慢查询日志文件,便于分析。

1. 刷新慢查询日志文件的脚本

创建一个slow.sh的shell脚本

#! /bin/bash

user=root
passwd=123456

cd /usr/local/mysql &&\
mv slow.log slow.log.$(date +%F) &&\
mysqladmin -u$user -p$passwd flush-log
2.创建自动任务

将slow.sh脚本添加到linux计划任务中。

[root@localhost ~]# crontab -e
// 将下面这段代码添加到计划任务中
0 0 * * * sh ./slow.sh > /dev/null 2 > &1
3.重启计划任务服务
systemctl restart crond.service