引言:在数据库管理和维护中,MySQL慢查询日志是一项非常重要的功能。它能够帮助我们识别出那些执行时间较长的SQL语句,从而进行优化,提高数据库的整体性能。本文将介绍如何查看和配置MySQL慢查询日志。
一、简介
MySQL慢查询日志用于记录执行时间超过设定阈值的SQL语句。通过查看慢查询日志,我们可以找出影响数据库性能的慢查询语句,并进行相应的优化。
二、如何查看慢查询日志状态
可以通过以下命令查看慢查询日志是否开启以及相关配置:
mysql> show variables like 'slow_query%';
+---------------------+------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/instance-1-slow.log |
+---------------------+------------------------------------+
2 rows in set (0.01 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
说明:
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
三、配置慢查询日志
1)临时配置
可以通过以下命令临时开启慢查询日志记录:
mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.00 sec)
mysql> set global slow_query_log_file='/var/lib/mysql/instance-1-slow.log';
Query OK, 0 rows affected (0.00 sec)
mysql> set global long_query_time=2;
Query OK, 0 rows affected (0.00 sec)
long_query_time设置后需要打开一个新的查询窗口(会话)才能看到新设置的值。老的查询窗口还是显示之前的值,其实已经改了。
注意:这些设置在MySQL服务重启后会恢复为默认状态。
2)永久配置
要永久开启慢查询日志,需要修改MySQL的配置文件。在/etc/mysql/conf.d/mysql.cnf文件中添加或修改以下配置:
/etc/mysql/conf.d/mysql.cnf
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/instance-1-slow.log
long_query_time = 2
配置完成后,重新启动MySQL服务即可。
四、测试慢查询日志
为了验证慢查询日志是否正常工作,可以执行一个故意耗时的SQL语句:
mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2.00 sec)
然后查看慢查询日志内容:
$ cat /var/lib/mysql/instance-1-slow.log
/usr/sbin/mysqld, Version: 8.0.13 (MySQL Community Server - GPL). started with:
Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
/usr/sbin/mysqld, Version: 8.0.13 (MySQL Community Server - GPL). started with:
Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
# Time: 2018-12-18T05:55:15.941477Z
# User@Host: root[root] @ localhost [] Id: 53
# Query_time: 2.000479 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1545112515;
select sleep(2);
总结:
通过以上步骤,我们可以查看和配置MySQL慢查询日志,从而更好地监控和优化数据库性能。希望本文能对您有所帮助!