general log会记录下发送给MySQL服务器的所有SQL记录,因为SQL的量大,默认是不开启的。一些特殊情况(如排除故障)可能需要临时开启一下。
开启MySQL的general log
MySQL有三个参数用于设置general log:
- general_log:用于开启general log。ON表示开启,OFF表示关闭。
- log_output:日志输出的模式。FILE表示输出到文件,TABLE表示输出到mysq库的general_log表,NONE表示不记录general_log。
- general_log_file:日记输出文件的路径,这是log_output=FILE时才会输出到此文件。
1、查看先是否开启了general log
mysql> show variables where Variable_name="general_log";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
1 row in set (0.00 sec)
2、查看日志输出模式
mysql> show variables where Variable_name="log_output";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
1 row in set (0.00 sec)
3、查看日志输出路径
mysql> show variables where Variable_name="general_log_file";
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+
1 row in set (0.00 sec)
4、设置日志模式为TABLE,FILE双模式
mysql> set global log_output='TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)
5、开启general log
set global general_log=ON;
6、关闭general log
大多数情况是临时开启general log,需要记得关闭,并把日志的输出模式恢复为FILE。
set global general_log=OFF;
set global log_output='FILE'
general_log表
现在在mysql库的general_log表就可以查看到开启general log那段时间的SQL记录。
查看general_log的表结构:
mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.00 sec)
查询得到
$select * from mysql.general_log limit 1 \G
*************************** 1. row ***************************
event_time: 2018-01-05 17:35:45
user_host: root[root] @ localhost []
thread_id: 89429
server_id: 2
command_type: Query
argument: select * from mysql.general_log
1 row in set (0.00 sec)