跳到主要内容

MySQL的SQL日志

从MySQL的慢SQL日志文件(Slow Log)或是通用SQL日志(General Log)提取待优化的SQL语句.

如何获取MySQL的SQL日志

MySQL通过设置数据库服务器参数来启用SQL日志.

启用慢日志(Slow Log)

MySQL慢日志记录执行时间等于或超过long_query_time(单位为秒)、且扫描的记录行数等于或超过min_examined_row_limit的SQL语句.

  • 启用参数命令

    set global log_output='file'
    set global slow_query_log='on';
    set global slow_query_log_file = '/tmp/localhost-slow.log';
    set global long_query_time = 5;
  • 确认参数是否生效

     show variables like '%slow%';
  • 记录没有使用索引的SQL语句

    对于没有使用索引的查询语句, 默认不在慢日志中记录;如果想要在慢日志中记录没有使用索引的SQL语句,可以通过设置参数log_queries_not_using_indexes来启用.

    set global log_queries_not_using_indexes=on;

启用通用日志(General Log)

General Log是记录数据库行为的通用日志, 它记录从客户端登录到断开链接之间的每个执行的SQL语句记录.

  • 启用参数命令
    set global general_log_file='/tmp/general_log';
    set global general_log=on;
  • 确认是否启用
    show global variables like '%general%';
    +------------------+------------------+
    | Variable_name | Value |
    +------------------+------------------+
    | general_log | ON |
    | general_log_file | /tmp/general_log |
    +------------------+------------------+

参考文档

https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html
https://dev.mysql.com/doc/refman/8.0/en/query-log.html