签到成功

知道了

CNDBA社区CNDBA社区

MariaDB 查询日志

2018-02-07 23:29 2707 0 原创 MySQL
作者: dave

1 查询日志概述

查询日志也称为 general log(通用日志),查询日志记录了数据库执行的所有命令,由于数据库操作命令有可能非常多而且执行比较频繁,所以当开启了查询日志以后,数据库可能需要不停的写入查询日志,这样会增大服务器的IO压力,增加很多系统开销,所以默认情况下,mysql的查询日志是没有开启的。

开启查询日志可以帮助分析哪些语句执行频率,以及对应语句的数据是否能够被缓存,所以,可以根据实际情况决定是否开启查询日志。

开启查询日志后,有三种方式来存放日志:

http://www.cndba.cn/dave/article/2636
http://www.cndba.cn/dave/article/2636

  1. 1) 存放于指定的日志文件中。
  2. 2) 存放于mysql.general_log表中。
  3. 3) 同时存放在指定的日志文件与mysql库的general_log表中。

查看查询日志的相关参数:

mysql> show variables where variable_name like "%general_log%" or variable_name="log_output";
+------------------+----------+
| Variable_name    | Value    |
+------------------+----------+
| general_log      | OFF      |
| general_log_file | Dave.log |
| log_output       | FILE     |
+------------------+----------+
3 rows in set (0.01 sec)

general_log: 表示查询日志是否开启,ON表示开启,OFF表示未开启,默认为OFF
log_output: 表示查询日志开启后,以哪种方式存放,log_output可以设置为4种值,”FILE”、”TABLE”、”FILE,TABLE”、”NONE”。http://www.cndba.cn/dave/article/2636

  1. 1) “FILE”表示存放于指定的文件中,
  2. 2) “TABLE”表示存放于mysql库的general_log表中,
  3. 3) “FILE,TABLE”表示将查询日志同时存放于指定的文件与general_log表中,一般不会进行这样的设置,因为这样会徒增很多IO压力。
  4. 4) “NONE”时表示不记录查询日志,即使general_log设置为ON,如果log_output设置为NONE,也不会记录查询日志。http://www.cndba.cn/dave/article/2636

    注:log_output不仅用于控制查询日志的输出,也控制慢查询日志的输出,当log_output设置为file时,查询日志和慢查询日志都存放到对应的文件中,设置为table,查询日志和慢查询日志都存放在对应的数据库表中。

    http://www.cndba.cn/dave/article/2636
    http://www.cndba.cn/dave/article/2636

general_log_file: 表示当log_output的值设置为”FILE”或者”FILE,TABLE”时,将查询日志存放于哪个日志文件中,即通过此参数指定查询日志的文件,默认文件名是host_name.log,而且使用了相对路径,默认位置为DATADIR变量所对应的目录位置。

http://www.cndba.cn/dave/article/2636
http://www.cndba.cn/dave/article/2636
http://www.cndba.cn/dave/article/2636

2 查询日志参数修改

可以直接修改配置文件/etc/my.cnf:

general_log = {ON|OFF} 
general_log_file = /data/mysql/mysql.log 
log_output = {TABLE|FILE|NONE}

也可以直接在会话级别进行修改,但修改会在重启MariaDB后失效:

mysql> set general_log=on;
ERROR 1229 (HY000): Variable 'general_log' is a GLOBAL variable and should be set with SET GLOBAL
mysql> set global general_log=on;
Query OK, 0 rows affected (0.01 sec)

mysql> set global log_output='file,table';
Query OK, 0 rows affected (0.00 sec)

mysql>  show variables where variable_name like "%general_log%" or variable_name="log_output";
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| general_log      | ON         |
| general_log_file | Dave.log   |
| log_output       | FILE,TABLE |
+------------------+------------+
3 rows in set (0.00 sec)

现在我们临时开启了查询日志,进行SQL操作:

http://www.cndba.cn/dave/article/2636

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| cndba              |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

mysql> use cndba
Database changed
mysql> create table www.cndba.cn(id int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '.cn(id int)' at line 1
mysql> create table cndba(id int);
Query OK, 0 rows affected (0.03 sec)

因为我们的慢查询日志同时写入了文件和表,我们这里分表查看:

[Dave@www.cndba.cn ~]# cd /mysql/data
[Dave@www.cndba.cn data]# ls
aria_log.00000001  Dave.err  ib_buffer_pool  ib_logfile1        mysql             mysql-bin.000003  mysql-bin.000006  mysql-bin.index
aria_log_control   Dave.log  ibdata1         ibtmp1             mysql-bin.000001  mysql-bin.000004  mysql-bin.000007  performance_schema
cndba              Dave.pid  ib_logfile0     multi-master.info  mysql-bin.000002  mysql-bin.000005  mysql-bin.000008
[Dave@www.cndba.cn data]# cat Dave.log |more
/usr/local/mysql/bin/mysqld, Version: 10.2.12-MariaDB-log (MariaDB Server). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
180131  7:55:45       11 Query    set global log_output='file,table'
180131  7:55:57       11 Query    show variables where variable_name like "%general_log%" or variable_name="log_output"
180131  7:56:55       11 Query    show databases
180131  7:57:00       11 Query    SELECT DATABASE()
           11 Init DB    cndba
180131  7:57:13       11 Query    create table www.cndba.cn(id int)
180131  7:57:38       11 Query    create table cndba(id int)
[root@Dave data]#

查询mysql.general_log表:

mysql> select * from mysql.general_log;
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------------------------------------------------------------+
| event_time                 | user_host                 | thread_id | server_id | command_type | argument                                                                              |
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------------------------------------------------------------+
| 2018-01-31 07:55:57.560000 | root[root] @ localhost [] |        11 |         1 | Query        | show variables where variable_name like "%general_log%" or variable_name="log_output" |
| 2018-01-31 07:56:55.460012 | root[root] @ localhost [] |        11 |         1 | Query        | show databases                                                                        |
| 2018-01-31 07:57:00.693288 | root[root] @ localhost [] |        11 |         1 | Query        | SELECT DATABASE()                                                                     |
| 2018-01-31 07:57:00.694280 | root[root] @ localhost [] |        11 |         1 | Init DB      | cndba                                                                                 |
| 2018-01-31 07:57:13.957205 | root[root] @ localhost [] |        11 |         1 | Query        | create table www.cndba.cn(id int)                                                     |
| 2018-01-31 07:57:38.763298 | root[root] @ localhost [] |        11 |         1 | Query        | create table cndba(id int)                                                            |
| 2018-01-31 08:00:20.254029 | root[root] @ localhost [] |        11 |         1 | Query        | select * from mysql.general_log                                                       |
| 2018-01-31 08:00:28.248438 | root[root] @ localhost [] |        11 |         1 | Query        | select * from mysql.general_log                                                       |
+----------------------------+---------------------------+-----------+-----------+--------------+---------------------------------------------------------------------------------------+
8 rows in set (0.00 sec)

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2262
    原创
  • 3
    翻译
  • 579
    转载
  • 192
    评论
  • 访问:8089897次
  • 积分:4350
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ