工作中,会遇到需要查看mysql的top 20 慢sql,逐个进行优化,加上必要的索引这种需求,这时就需要开启数据库的慢查询日志的功能
1.查询当前慢查询日志的状态
# 默认为关闭状态
mysql
----------------------------
show variables like "%slow_query_log%";
----------------------------
# 实例演示:
mysql> show variables like "%slow_query_log%";
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/data/1055-mysql-slow.log |
+---------------------+-------------------------------------------+
2 rows in set (0.00 sec)
# 可以看到,慢查询日志的状态和默认的慢查询日志的文件
[root@1055-mysql ~]# cd /usr/local/mysql/data/
[root@1055-mysql data]# ll
总用量 568888
-rw-r----- 1 mysql root 5888 11月 7 2016 1055-mysql.err-rw-rw---- 1 mysql mysql 56 11月 7 2016 auto.cnf
-rw-rw---- 1 mysql mysql 281018368 12月 4 11:15 ibdata1
-rw-rw---- 1 mysql mysql 50331648 12月 4 11:15 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 12月 12 2017 ib_logfile1
drwx------ 2 mysql mysql 4096 11月 7 2016 mysql
-rw-rw---- 1 mysql mysql 120 12月 4 11:15 mysql-bin.000123
-rw-rw---- 1 mysql mysql 120 12月 4 11:15 mysql-bin.000124
-rw-rw---- 1 mysql mysql 78 12月 4 11:15 mysql-bin.index
drwx------ 2 mysql mysql 4096 11月 7 2016 performance_schema
# 但实际在该位置并未生成慢查询日志的文件
2.手动开启慢查询日志
# 登陆mysql进行设置
mysql
----------------------------
set global slow_query_log=on;
----------------------------
# 实例演示:
mysql> set global slow_query_log=on;
Query OK, 0 rows affected (0.02 sec)
mysql> show variables like "%slow_query_log%";
+---------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql/data/1055-mysql-slow.log |
+---------------------+-------------------------------------------+
2 rows in set (0.00 sec)
# 可以看到,慢查询日志的状态更改了
[root@1055-mysql data]# ll
总用量 568892
-rw-r----- 1 mysql root 5888 11月 7 2016 1055-mysql.err
-rw-rw---- 1 mysql mysql 175 1月 22 18:23 1055-mysql-slow.log-rw-rw---- 1 mysql mysql 56 11月 7 2016 auto.cnf
-rw-rw---- 1 mysql mysql 281018368 12月 4 11:15 ibdata1
-rw-rw---- 1 mysql mysql 50331648 12月 4 11:15 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 12月 12 2017 ib_logfile1
drwx------ 2 mysql mysql 4096 11月 7 2016 mysql
-rw-rw---- 1 mysql mysql 120 12月 4 11:15 mysql-bin.000123
-rw-rw---- 1 mysql mysql 120 12月 4 11:15 mysql-bin.000124
-rw-rw---- 1 mysql mysql 78 12月 4 11:15 mysql-bin.index
drwx------ 2 mysql mysql 4096 11月 7 2016 performance_schema
# 检查文件发现自动生成了慢查询日志的文件
3.修改mysql配置文件保证永久生效
# 由于慢查询日志记录的信息比较多,会影响mysql的性能,所以生产环境不建议长期开启
vim /etc/my.cnf
-----------------------------------
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/slow-query.log
-----------------------------------
# 其他可用的配置参数
long_query_time=1 # 慢查询日志的时间定义(秒),默认为10秒,多久就算慢查询的日志
log_queries_not_using_indexes=1 # 将所有没有使用带索引的查询语句全部写到慢查询日志中
# 修改完配置重启即可生效
==== 完毕,呵呵呵呵 ====