暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql日志文件

疯狂造轮子 2020-03-01
374

二进制日志、错误日志、查询日志、慢查询日志


1. 二进制日志

二进制日志是什么?

二进制日志(binary log)记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。


二进制日志可以用来干什么

二进制日志可以用来恢复复制审查等作用;
某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步
用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击。


二进制日志的记录流程

针对事务存储引擎innodb来说,记录二进制日志文件,是先把commit命令发生之前的操作命令记录到缓存中,而不是直接同步到磁盘,等到commit之后再一起同步到磁盘,而该缓冲的大小由binlog_cache_size决定,默认大小为32K;
当然是否需要缓冲写二进制日志还跟sync_binlog=N (表示每写缓冲多少次就同步到磁盘)设置有关系,二进制日志文件默认是关闭的也就是sync_binlog=0,如果设置sync_binlog=1是直接同步方式写二进制数据,不需要缓冲,如果使用InnoDB存储引擎进行复制,并且想得到最大的高可用性,建议将该值设为ON。不过该值为ON时,确实会对数据库的IO系统带来一定的影响。
但是,即使将sync_binlog设为1,还是会有一种情况导致问题的发生。当使用InnoDB存储引擎时,在一个事务发出COMMIT动作之前,由于sync_binlog为1,因此会将二进制日志立即写入磁盘。如果这时已经写入了二进制日志,但是提交还没有发生,并且此时发生了宕机,那么在MySQL数据库下次启动时,由于COMMIT操作并没有发生,这个事务会被回滚掉。但是二进制日志已经记录了该事务信息,不能被回滚。这个问题可以通过将参数innodb_support_xa设为1来解决,虽然innodb_support_xa与XA事务有关,但它同时也确保了二进制日志和InnoDB存储引擎数据文件的同步。


2. 错误日志

错误日志文件对MySQL的启动、运行、关闭过程进行了记录。MySQL 在遇到问题时应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录一些警告信息或正确的信息。用户可以通过命令SHOW VARIABLES LIKE 'log_error'来定位该文件 ;                                                                                                                                   

3. 查询日志

查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。默认文件名为:主机名.log;
对于未能正确执行的SQL语句,查询日志也会进行记录     

4. 慢查询日志

通过错误日志得到一些关于数据库优化的信息,而慢查询日志(slow log)可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化;
可以在MySQL启动时设一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中。DBA每天或每过一段时间对其进行检查,确认是否有SQL语句需要进行优化。该阈值可以通过参数long_query_time来设置,默认值为10,代表10秒。
这里有两点需要注意
首先,设置long_query_time这个阈值后,MySQL数据库会记录运行时间超过该值的所有SQL语句,但运行时间正好等于long_query_time的情况并不会被记录下。也就是说,在源代码中判断的是大于long_query_time,而非大于等于。
另一个和慢查询日志有关的参数是log_queries_not_using_indexes,如果运行的SQL语句没有使用索引,则MySQL数据库同样会将这条SQL语句记录到慢查询日志文件。首先确认打开了log_queries_not_using_indexes;      
文章转载自疯狂造轮子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论