美文网首页首页投稿(暂停使用,暂停投稿)
MySQL日志之普通查询日志和慢查询日志

MySQL日志之普通查询日志和慢查询日志

作者: 健谈的Boris | 来源:发表于2017-09-11 16:20 被阅读0次

    Intro

    之前的一篇分享提到,MySQL的日志类型可以分为三种,错误日志(error_log),查询日志(query_log),和二进制日志(binary_log),error_log的介绍与用法详见MySQL日志之error_log,本文主要介绍general_log和slow_query_log的原理和用法。

    通用查询日志

    通用查询日志(general_log)主要用于查询各client连接数据库时的相关信息与在数据库上执行的SQL语句,配置方法为:

    1、查询通用查询日志是否开启与其存放路径:

    mysql> show variables like "general_log%";
    +------------------+------------------------------+
    | Variable_name    | Value                        |
    +------------------+------------------------------+
    | general_log      | OFF                           |
    | general_log_file | /var/lib/mysql/localhost.log |
    +------------------+------------------------------+
    2 rows in set (0.00 sec)
    
    

    屏幕输出中general_loggeneral_log_file记录了当前通用查询日志的开关状态与路径。

    2、开启通用查询日志

        set global general_log = ON
    

    查询是否成功:

    mysql> show variables like "general_log%";
    +------------------+------------------------------+
    | Variable_name    | Value                        |
    +------------------+------------------------------+
    | general_log      | ON                           |
    | general_log_file | /var/lib/mysql/localhost.log |
    +------------------+------------------------------+
    2 rows in set (0.00 sec)
    
    

    成功。

    退出一下看有没有生成并且正确记录:

    [root@localhost ~]# cat /var/lib/mysql/localhost.log
    /usr/sbin/mysqld, Version: 5.7.19 (MySQL Community Server (GPL)). started with:
    Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
    Time                 Id Command    Argument
    2017-08-14T09:33:11.364650Z     5 Quit  
    2017-08-14T09:33:20.671113Z     6 Connect   root@localhost on  using Socket
    2017-08-14T09:33:20.671323Z     6 Query select @@version_comment limit 1
    2017-08-14T09:33:22.964610Z     6 Query show variables like '%log%'
    2017-08-14T09:33:24.574224Z     6 Quit  
    

    成功,并且我们可以看到,log不仅记录了SQL命令,同时也包括了执行时间、Id、命令类型等相关数据

    慢查询日志

    慢查询日志记录了SQL语句时间超过了预设的long_query_time的语句,在数据量较大的情况下,可以看看慢查询日志中有哪些语句需要进行优化。

    1、慢查询日志的配置

    慢查询日志的配置可以在数据库配置文件my.cnf中查到:

    [root@localhost ~]# cat /etc/my.cnf | grep -E 'long|slow|not_using_indexes'
    long_query_time = 1
    #log-slow-queries = /var/log/mysql/slow.log
    log_queries_not_using_indexes
    

    可以看到:

    long_query_time = 1的意思是SQL语句执行时间超过1s的,对其进行记录;
    log-slow-queries = /var/log/mysql/slow.log是对慢查询日志路径的设置;
    log_queries_not_using_indexes意思为不使用索引的语句,可以缩小记录的目标

    实际配置与通用查询日志相同,在mysql交互界面中输入命令开启慢查询日志:

        set slow_query_log = ON
    

    2、查询是否成功

    [root@localhost ~]# cat /var/lib/mysql/localhost-slow.log
    /usr/sbin/mysqld, Version: 5.7.19 (MySQL Community Server (GPL)). started with:
    Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
    Time                 Id Command    Argument
    
    

    成功。

    但注意,slow_query_log可能会记录到与用户权限和密码相关的语句,因此在使用慢查询日志文件时请注意日志的安全保存。

    相关文章

      网友评论

        本文标题:MySQL日志之普通查询日志和慢查询日志

        本文链接:https://www.haomeiwen.com/subject/tdsfsxtx.html