概述

为了监控 MySQL 实际执行语句的效率问题,有时候需要关注 SQL 语句执行的时间问题,此时可以启用 MySQL 的慢查询; 而在开发过程中,很多时候 SQL 查询语句的组成可能是有很多个 SQL 碎片拼凑而成,要了解最终 SQL 的实际执行语句, 可能需要断点输出 SQL 或者 将其输出到日志里面,而开启了 MySQL 的查询语句记录,我们只需要查看相关的日志就可以了。

配置文件

一般为 my.cnf,其位置根据安装方式的不同可能需要自定义。本人在 CentOS 下 yum 安装之后,其位置在 /etc/my.cnf

节点为:[mysqld]

启用慢查询

long_query_time=1
slow_query_log=1
slow_query_log_file=/var/log/mysqld/slow.log

long_query_time:最长查询时间,单位为秒。默认为 10s,可根据自己实际情况进行设置
slow_query_log:是否启用慢查询,值为 0 或 1
slow_query_log_file: 日志位置。注意 目标文件夹权限,需要 MySQL 的所有者可写;否则会强制不启用

权限的解决方案有两种:

  • 建立专属的文件夹,比如本人在 log 下创建了 mysqld 目录,并将文件夹所有者改为 MySQL 进程的所有者
  • 手动创建日志文件,并将文件所有者改为 MySQL 进程的所有者(通常不建议 777 权限)

启用 SQL 查询详情

general_log=1
general_log_file=/var/log/mysqld/query.log

slow_query_log:是否启用,值为 0 或 1
slow_query_log_file: 日志位置。注意 目标文件夹权限,需要 MySQL 的所有者可写;否则会强制不启用

设置 MySQL 日志记录时间点

自 MySQL 5.7.2 起,MySQL 日志内记录的时间所采用的时区不再是随系统设置的时区了,而是通过参数 log_timestamps 来控制,其默认值为 “UTC”。

log_timestamps 允许的值为 “UTC” 和 “SYSTEM”,如果恢复之前的时区追随系统设置,只需要设置为:log_timestamps=SYSTEM 即可。

参考资料

  1. Server System Variables
  2. MySQL Server Logs