MYSQL

MySQL中的重做日志(redo log),回滚日志(undo

2019-05-28  本文已影响0人  habit_learning

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。
其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。

这里简单总结一下这三者具有一定相关性的日志。

重做日志(redo log)

缓冲区 Innodb_log_buffer

重做日志有一个缓存区Innodb_log_buffer,Innodb_log_buffer的默认大小为16Mb,Innodb 存储引擎先将重做日志写入 Innodb_log_buffer中,然后会通过以下三种方式将 Innodb 日志缓冲区的日志刷新到磁盘:

  1. Master Thread 每秒一次执行刷新 Innodb_log_buffer 到重做日志文件
  2. 每个事务提交时会刷新。
  3. 当重做日志缓存可用空间 少于一半时,重做日志缓存被刷新到重做日志文件。

因此重做日志的写盘,并不一定是随着事务的提交才写入重做日志文件的,而是随着事务的开始,逐步开始的。

回滚日志(undo log)

二进制日志(binlog)

MySQL通过两阶段提交过程来完成事务的一致性的,也即 redo log 和 binlog 的一致性的,理论上是先写 redo log,再写 binlog,两个日志都提交成功(刷入磁盘),事务才算真正的完成。

上一篇下一篇

猜你喜欢

热点阅读