• MySQL查询日志介绍


    MySQL查询日志介绍

      MySQL的查询日志记录了所有MySQL数据库请求的信息。无论这些请求是否得到了正确的执行。默认文件名为hostname.log。默认情况下MySQL查询日志是关闭的。生产环境,如果开启MySQL查询日志,对性能还是有蛮大的影响的。另外很多时候,MySQL慢查询日志基本可以定位那些出现性能问题的SQL,所以MySQL查询日志应用的场景其实不多,有点鸡肋的感觉,它跟SQL Server中的profiler有点类似,但是这个不能跟踪某个会话、用户、客户端。它只能对整个数据库进行跟踪。MySQL查询日志本身比较简单,网上介绍的不多,官方资料也就那么短短一篇。

    MySQL查询日志配置

      MySQL中的参数general_log用来控制开启、关闭MySQL查询日志,参数general_log_file用来控制查询日志的位置。所以如果你要判断MySQL数据库是否开启了查询日志,可以使用下面命令。general_log为ON表示开启查询日志,OFF表示关闭查询日志。

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

    另外,MySQL的查询日志支持写入文件或写入数据表两种形式,这个由参数log_output控制,如下所示:

    mysql> show variables like 'log_output';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output    | FILE  |
    +---------------+-------+
    1 row in set (0.00 sec)
     
    mysql> 

    这三个参数general_log、 general_log_file、 log_output都是动态参数,可以随时动态修改。

    1、开启MySQL查询日志

    mysql> set global general_log = on;
    Query OK, 0 rows affected (0.11 sec)
     
    mysql> show variables like 'general_log';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | general_log   | ON    |
    +---------------+-------+
    1 row in set (0.02 sec)
     
    mysql> 

    2、关闭MySQL查询日志

    mysql> show variables like 'general_log';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | general_log   | ON    |
    +---------------+-------+
    1 row in set (0.01 sec)
     
    mysql> set global general_log=off;
    Query OK, 0 rows affected (0.01 sec)
     
    mysql> show variables like 'general_log';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | general_log   | OFF   |
    +---------------+-------+
    1 row in set (0.00 sec)
     
    mysql> 

    3、设置日志输出方式为表(如果设置log_output=table的话,则日志结果会记录到名为gengera_log的表中,这表的默认引擎是CSV):

    mysql> show variables like 'log_output';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output    | FILE  |
    +---------------+-------+
    1 row in set (0.00 sec)
     
    mysql> set global log_output='table';
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> show variables like 'log_output';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output    | TABLE |
    +---------------+-------+
    1 row in set (0.01 sec)
     
    mysql> 

    查看查询日志信息。

    mysql> select * from mysql.general_log;
    +---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+
    | event_time          | user_host                 | thread_id | server_id | command_type | argument                         |
    +---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+
    | 2017-07-06 12:32:05 | root[root] @ localhost [] |         1 |         1 | Query        | show variables like 'general%'   |
    | 2017-07-06 12:32:28 | root[root] @ localhost [] |         1 |         1 | Query        | show variables like 'log_output' |
    | 2017-07-06 12:32:41 | root[root] @ localhost [] |         1 |         1 | Query        | select * from MyDB.test          |
    | 2017-07-06 12:34:36 | [root] @ localhost []     |         3 |         1 | Connect      | root@localhost on                |
    | 2017-07-06 12:34:36 | root[root] @ localhost [] |         3 |         1 | Query        | KILL QUERY 1                     |
    | 2017-07-06 12:34:36 | root[root] @ localhost [] |         3 |         1 | Quit         |                                  |
    | 2017-07-06 12:34:51 | root[root] @ localhost [] |         1 |         1 | Query        | select * from mysql.general_log  |
    +---------------------+---------------------------+-----------+-----------+--------------+----------------------------------+
    7 rows in set (0.02 sec)
     
    mysql> 

    4: 查询日志归档

    mysql> system mv /var/lib/mysql/DB-Server.log  /var/lib/mysql/DB-Server.log.20170706
    
    mysql> system mysqladmin flush-logs -p
    
    Enter password:
    
     
    
    或者你在shell中执行下面命令
    
     
    
    [root@DB-Server mysql]# mv /var/lib/mysql/DB-Server.log  /var/lib/mysql/DB-Server.log.20170706
    
    [root@DB-Server mysql]# mysqladmin flush-logs -p
    
    Enter password:

    5: 修改查询日志名称或位置

    mysql> show variables like 'general_log%';
    +------------------+------------------------------+
    | Variable_name    | Value                        |
    +------------------+------------------------------+
    | general_log      | ON                           |
    | general_log_file | /var/lib/mysql/DB-Server.log |
    +------------------+------------------------------+
    2 rows in set (0.00 sec)
     
    mysql> set global general_log='OFF';
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> set global general_log_file='/u02/mysql_log.log';
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global general_log='ON';
    Query OK, 0 rows affected (0.02 sec)

    转载:https://www.cnblogs.com/kerrycode/p/7130403.html

  • 相关阅读:
    DBMS_SCHEDULER 的使用
    Android 鲜为人知的 8 个小秘密
    你正在使用的移动电话已经 40 岁
    HDU1056:HangOver
    Firefox OS 源码泄露!!!
    上网本 硬盘安装linux 最揪心的回忆
    103 Stacking Boxes
    ip2long之后有什么好处?
    mysql怎么创建,删除,查看索引?
    用mysql查询某字段是否有索引
  • 原文地址:https://www.cnblogs.com/starfish29/p/11587445.html
Copyright © 2020-2023  润新知