1 查询日志概述
查询日志也称为 general log(通用日志),查询日志记录了数据库执行的所有命令,由于数据库操作命令有可能非常多而且执行比较频繁,所以当开启了查询日志以后,数据库可能需要不停的写入查询日志,这样会增大服务器的IO压力,增加很多系统开销,所以默认情况下,mysql的查询日志是没有开启的。
开启查询日志可以帮助分析哪些语句执行频率,以及对应语句的数据是否能够被缓存,所以,可以根据实际情况决定是否开启查询日志。
开启查询日志后,有三种方式来存放日志:
- 1) 存放于指定的日志文件中。
- 2) 存放于mysql.general_log表中。
- 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”。
- 1) “FILE”表示存放于指定的文件中,
- 2) “TABLE”表示存放于mysql库的general_log表中,
- 3) “FILE,TABLE”表示将查询日志同时存放于指定的文件与general_log表中,一般不会进行这样的设置,因为这样会徒增很多IO压力。
4) “NONE”时表示不记录查询日志,即使general_log设置为ON,如果log_output设置为NONE,也不会记录查询日志。
注:log_output不仅用于控制查询日志的输出,也控制慢查询日志的输出,当log_output设置为file时,查询日志和慢查询日志都存放到对应的文件中,设置为table,查询日志和慢查询日志都存放在对应的数据库表中。
general_log_file: 表示当log_output的值设置为”FILE”或者”FILE,TABLE”时,将查询日志存放于哪个日志文件中,即通过此参数指定查询日志的文件,默认文件名是host_name.log,而且使用了相对路径,默认位置为DATADIR变量所对应的目录位置。
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操作:
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)
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:MariaDB 的错误日志
- 下一篇:MariaDB 慢查询日志