目录

5.2 日志文件

日志文件记录了影响MySQL数据库的各种类型活动,用来记录数据库的运行情况、日常操作和错误等信息,可以帮助我们诊断数据库出现的各种问题,常见的日志文件有错误日志、二进制日志、慢查询日志、全查询日志、redo日志、undo日志。

5.2.1 错误日志

错误日志(Error Log)是MySQL中最常用的一种日志,主要记录MySQL服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况等。MySQL DBA在遇到问题时候,第一时间应该查看这个错误日志文件,该文件不但记录了出错信息,还记录了一些警告信息以及正确信息,这个error日志文件类似于oracle的alert文件。错误日志以文本文件的形式存储,直接使用普通文本工具就可以查看,默认情况下是以err结尾。

在MySQL中,通过SHOW命令可以查看错误日志文件所在的目录及文件名信息

mysql> SHOW VARIABLES LIKE 'log_error';

5.2.2 慢查询日志

慢查询日志(slow_query_log)主要用来记录执行时间超过设置的某个时长的SQL语句,能够帮助数据库维护人员找出执行时间比较长、执行效率比较低的SQL语句,并对这些SQL语句进行针对性优化。

•慢查询日志可以帮助DBA找出执行效率缓慢的SQ语句,为数据库优化工作提供帮助。

•慢查询日志默认是不开启的,建议开启慢查询日志。

•当需要进行采样分析时手工开启。

5.2.3 全查询日志

全查询日志记录了所有对数据库请求的信息,正确的SQL才会被记录下来(错误写法的SQL语句不会记录),包括show、查询select语句、权限不足的语句(ERROR 1044 (42000): Access denied for user)。默认位置在变量datadir下,默认文件名为:主机名.log。

MySQL的通用查询日志默认情况下是不开启的,当需要进行采样分析时手工开启。

5.2.4 二进制日志

二进制日志中以“事件”的形式记录了数据库中数据的变化情况,对于MySQL数据库的灾难恢复起着重要的作用。记录了对数据库进行变更的操作,但是不包括select操作以及show操作,因为这类操作对数据库本身没有没有修改。如果想记录select和show的话,那就需要开启全查询日志,binlog还包括了执行数据库更改操作时间和执行时间等信息。

5.2.5 Redo日志

Redo日志也叫事务日志,记录InnoDB等支持事务的存储引擎执行事务时产生的日志。事务型存储引擎用于保证原子性、一致性、隔离性和持久性。数据库变更数据不会立即写到数据文件中,而是写到事务日志中。

所有的数据库都是日志先行,先写日志,再写数据文件,所以才会有redo log的规则。

默认情况下会有2个文件名称分别为ib_logfile0和ib_logfile1,在MySQL数据库目录下可以看到这2个文件,这个对innodb存储引擎非常重要,因为它们记录了对于innodb存储引擎的事务日志,是物理层面的。

5.2.6 undo日志

Undo日志是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo日志来实现多版本并发控制(简称:MVCC)。

undo日志是与单个读写事务关联的撤消日志记录的集合。undo日志记录包含有关如何撤消事务对聚集索引记录的最新更改的信息。如果另一个事务需要将原始数据作为一致读取操作的一部分,则从undo日志记录中检索未修改的数据。undo日志存在于undo日志段中,该段包含在回滚段中。回滚段驻留在undo表空间和全局临时表空间中。

5.2.7 中继日志

从数据库Slave服务的I/O线程从主数据库Master服务的二进制日志中读取数据库的更改记录并写入到中继日志中,然后在Slave数据库执行修改操作,这就是中继日志Relay Log。