mysql/mariadb知识点总结(23):查询日志

  • A+
所属分类:mysql  数据库

这篇文章总结了mysql中查询日志的知识点。

 

在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。

mysql文章列表直达链接:mysql知识点总结

 mysql/mariadb知识点总结(23):查询日志

Mysql中,日志可以按照功能分为如下几类。

错误日志

查询日志

慢查询日志

二进制日志

中继日志

innodb存储引擎级别的事务日志

上述每一类日志的相关知识点都会被总结为一篇文章,此处我们单独总结一下查询日志的相关知识点。

 

查询日志

查询日志在mysql中被称之为general log(通用日志),不要被"查询日志"的名字误导,错误的以为查询日志只会记录select语句,其实不然,查询日志记录了数据库执行的命令,不管这些语句是否正确,都会被记录,我想这也是general log之所以"通用"的原因吧,由于数据库操作命令有可能非常多而且执行比较频繁,所以当开启了查询日志以后,数据库可能需要不停的写入查询日志,这样会增大服务器的IO压力,增加很多系统开销,所以默认情况下,mysql的查询日志是没有开启的,但是开启查询日志也有助于我们分析哪些语句执行密集,执行密集的select语句对应的数据是否能够被缓存,查询日志也可以帮助我们分析问题,所以,我们可以根据实际情况决定是否开启查询日志,如果需要可以手动开启。如果开启了查询日志,那么我们可以通过如下3种方式存储查询日志。

方式1:将查询日志存放于指定的日志文件中。

方式2:将查询日志存放于mysql.general_log表中。

方式3:将查询日志同时存放于指定的日志文件与mysql库的general_log表中。

 

那么现在,我们就来看一下查询日志的相关参数。

使用如下语句,查看查询日志的相关参数。

show variables where variable_name like "%general_log%" or variable_name="log_output";

mysql/mariadb知识点总结(23):查询日志

general_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认为OFF

log_output:表示当查询日志开启以后,以哪种方式存放,log_output可以设置为4种值,"FILE"、"TABLE"、"FILE,TABLE"、"NONE"。此值为"FILE"表示存放于指定的文件中,此值为"TABLE"表示存放于mysql库的general_log表中,此值为"FILE,TABLE"表示将查询日志同时存放于指定的文件与general_log表中,一般不会进行这样的设置,因为这样会徒增很多IO压力,如果开启,建议设置为"table",此值为"NONE"时表示不记录查询日志,即使general_log设置为ON,如果log_output设置为NONE,也不会记录查询日志,其实,log_output不止用户控制查询日志的输出,慢查询日志的输出也是由此参数进行控制,也就是说,log_output设置为file,就表示查询日志和慢查询日志都存放到对应的文件中,设置为table,查询日志和慢查询日志就都存放在对应的数据库表中。

general_log_file:表示当log_output的值设置为"FILE"或者"FILE,TABLE"时,将查询日志存放于哪个日志文件中,换句话说,就是通过此参数指定查询日志的文件,默认情况下,此文件名于主机名相同,而且使用了相对路径,默认位置为datadir变量所对应的目录位置,一般为/var/lib/mysql目录下。

 

为了演示效果,我们此处暂时将查询日志打开,并且将查询日志同时记录到general_log表与指定的日志文件中,但是在实际使用中,不推荐这样做,因为我们并没有将配置写入配置文件中,所以下图中的设置将在重启mysql后失效,因为关于日志的参数都是全局变量,所以设置这些变量时需要加上global关键字。

mysql/mariadb知识点总结(23):查询日志

好了,查询日志已经开启,我们来执行一些语句,看看查询日志中能否查看到这些命令,如下图所示,我们切换到了zsythink数据库,对表a进行了一些增删改查的操作,并且故意执行了一条错误的语句。

mysql/mariadb知识点总结(23):查询日志

 

我们先到指定的日志文件中查看一下,对应的查询日志是否已经被记录了,从下图中可以看出,刚才执行的所有语句,都已经被记录到了查询日志当中,包括我们故意写错的那一条语句,也被准确的记录了。

mysql/mariadb知识点总结(23):查询日志

当然,由于我们同时将查询日志记录到了日志文件与对应的数据库中,所以,在mysql.general_log表中也能查询到刚才执行的命令。

mysql/mariadb知识点总结(23):查询日志

 
 

 
 

 
 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  2   博主  1

    • avatar 小土豆 4

      今年第一。。。。

      • avatar echo 6

        沙发归我 :lol:

          • avatar 朱双印 Admin

            @echo 老客户,位置可预订 :lol: 加油~~