mysql通用查询日志_MySQL通用查询日志

  • Post author:
  • Post category:mysql


阅读正文之前一定要仔细阅读下边的建议:

1)、最好使用电脑阅读。

2)、如果你非要使用手机阅读,请把手机字体调到最小,这样阅读的效果会好些。

3)、零散的阅读并不会得到知识的提升,要想提升,您还得从头开始观看。

5)、在阅读本篇文章之前,您最好阅读过下边几篇文章,要不然可能达不到您想要的结果。

上周我们讲解了MySQL错误日志,不知道您掌握了没有,若还没掌握,您还是移步到仔细阅读一下,本篇文章不适合你。

接下来,我们进入正题……

含义

MySQL通用查询日志,它是记录建立的客户端连接和执行的所有DDL和DML语句(不管是成功语句还是执行有错误的语句),默认情况下,它是不开启的。请注意,它也是一个文本文件。通用查询日志全局变量有三个,一个是开启状态,一个是通用查询日志输出格式,一个是通用查询日志存储文件路径,分别是:

general_log=[OFF|ON] (此变量表示开启状态,OFF表示关闭,ON表示开启,默认是OFF)

log_output=[none|file|table|file,table](此变量表示通用查询日志输出格式,none表示不输出,file表示输出到文件,table表示输出到表,若采用输出到表,则日志在mysql.general_log表中查看,file,table表示即输出到文件,也输出到表,默认是输出到文件)

general_log_file=/usr/local/mysql/data/Centos6.log (此变量表示通用查询日志存储文件路径)

开启方式

MySQL通用查询日志,它的开启方式有两种:

一种是修改全局变量值

SET global general_log=1;# 在全局模式下,开启通用查询日志,1表示开启,0表示关闭

SET @@general_log=1;

一种是修改配置文件进行修改(不推荐,因要重启MySQL服务器,但是这种是永久性修改的)

修改my.cnf配置文件中的

[mysqld]general-log-file=path/[filename] #查询日志保存的位置general-log=1 # 开启通用查询日志

输出方式

MySQL通用查询日志,它的输出方式也有两种:

一种是修改全局变量值

SET global log_output=file;#在全局模式下,设置通用查询日志输出格式,默认是输出到文件

SET @@log_output=file;

一种是修改my.cnf配置文件(不推荐,因要重启MySQL服务器,但是这种是永久性修改的)

[mysqld]

log-output=file#通用查询日志输出格式

演示案例

我们的演示案例采用第一种方式,先查查默认情况下,通用查询日志开启状态,通过 show variables like ‘%general_log%’可查看如下结果:

通用查询日志输出格式,我们采用默认输出格式,即输出格式为file

fb2808bfe268a2e10e57c4eecd043880.png

查看通用查询日志文件内容,可显示此次的文件内容为空

#cat /usr/local/mysql/data/Centos6.log

cc49defd3d1f48cd205cd5698ce3c204.png

现在将其开启,在MySQL客户端执行:

set global general_log=1;

1cf612912f4415b254e441c47afd2503.png

再执行一些DML语句

6b628319e5dece9ec11c2513f1e8c008.png

此时,我们再查看通用查询日志内容如下:

#cat /usr/local/mysql/data/Centos6.log

63acea968837059b3d4aa2b03af3b9e6.png

通用查询日志格式:

Time

语句执行的时间

Id

连接mysql的客户端会话id

Command

执行命令的类型

Argument

执行的语句

说明,我们通用查询日志,已经是开启状态,可再次通过命令查看:

show variables like ‘%general_log%’;

4fdf34735c3b7987059fc37d9ef2d3fb.png

若设置通用查询日志输出格式为表,即执行:

set global log_output=’table’;

9088ad05e74175bea9c31d6b9cf0399e.png

我们再次执行一些SQL语句之前,先查看一下通用查询日志内容:

f7ad264302940a1b665ea30c8878bede.png

我们虽然设置了通用查询日志输出格式是table,但在执行这句瞬间,仍然还是file,所以,在执行这句瞬间及之前,仍然是file的,实际上这条语句也会记录在mysql.general_log表中,从这条语句执行之后,所有执行语句会记录到mysql.general_log表中,现在我们执行一些SQL语句,看看效果吧

7f7239e145452fe6ed0029334c114cf5.png

我们先看看通用查询日志,看看有没有记录

c7a07360f5c6ba455d918158814097e2.png

很显然,从上面打印日志内容来看,刚刚执行两条查询语句,并没有输出到日志文件中,现在我们看看mysql.general_log表的记录吧

清空通用查询日志

清空完后,再次查看日志内容

#echo > /usr/local/mysql/data/Centos6.log

#cat /usr/local/mysql/data/Centos6.log

请注意,通过全局变量进行修改的值,在数据库服务器重启下,之前通过全局变量进行修改的值又恢复到默认值了,即通过全局变量进行修改的变量值只在服务器不重启的情况下,是全局有效的,换句话说,如果你的数据库服务器在线上重启多的话,而又要开启通用查询日志,请通过修改my.cnf方式进行修改。

总结:由上可见,通过查询日志会随着时间日积月累,文件不断增大,因此线上是不建议开启通用查询日志的,因为会浪费存储空间,而且还会占用IO带宽,除非,要做采样分析时,可以开启通用查询日志,采样完毕后再关闭通用查询日志。

到这里,我们通用查询日志讲完啦,不知道你掌握了没有,下一篇我们开始讲解MySQL二进制日志。

如果这篇文章对你有帮助的话,点在看+转发哈!!!



版权声明:本文为weixin_36302268原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。