Loading... 这篇文章总结了mysql中查询日志的知识点。 在本博客中,”mysql”是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。 mysql文章列表直达链接:<a href="https://www.zsythink.net/archives/tag/mysql/" target="_blank" rel="noopener">mysql知识点总结</a> <img class=" ls-is-cached lazyloaded" title="1480776820928760.jpg" src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161203/1480776820928760.jpg" alt="mysql.jpg" data-src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161203/1480776820928760.jpg" style=""> Mysql中,日志可以按照功能分为如下几类。 错误日志 查询日志 慢查询日志 二进制日志 中继日志 innodb存储引擎级别的事务日志 上述每一类日志的相关知识点都会被总结为一篇文章,此处我们单独总结一下查询日志的相关知识点。 <h2>查询日志</h2> 查询日志在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”; <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_1.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_1.png" style=""> 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关键字。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_2.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_2.png" style=""> 好了,查询日志已经开启,我们来执行一些语句,看看查询日志中能否查看到这些命令,如下图所示,我们切换到了zsythink数据库,对表a进行了一些增删改查的操作,并且故意执行了一条错误的语句。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_3.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_3.png" style=""> 我们先到指定的日志文件中查看一下,对应的查询日志是否已经被记录了,从下图中可以看出,刚才执行的所有语句,都已经被记录到了查询日志当中,包括我们故意写错的那一条语句,也被准确的记录了。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_4.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_4.png" style=""> 当然,由于我们同时将查询日志记录到了日志文件与对应的数据库中,所以,在mysql.general_log表中也能查询到刚才执行的命令。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_5.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/03/030217_0303_5.png" style=""> 转载自朱双印日志https://www.zsythink.net/archives/1246 Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏