程序员

redo log和bin log

2020-11-01  本文已影响0人  CODE_WEN

在 MySQL 数据库中,自带一个日志模块 bin log(归档日志),这个日志模块所有的存储引擎都会使用,我们常常使用的 InnoDB 引擎还自带一个 redo log(重做日志);

前言

      在之前的 文章 中我们可以清楚的知道,一条更新类型的sql语句执行过程是:权限校验 ==> 查询缓存 ==> 分析器 ==> 权限校验 ==> 执行器 ==> 引擎 , redo log prepare ==> bin log ==> redo log commit ,为什么需要两个模块呢?又为什么两个模块的执行顺序是这样的呢?

为什么要用两个模块?

      MySQL 在很早之前是没有 InnoDB 存储引擎的(InnoDB 引擎是其他公司以插件的形式插入 MySQL 的),曾经 MySQL 的的默认存储引擎是 MyISAM ,但 MyISAM 引擎并没有 redo log 这个日志模块,就导致没有 crash-safe 的能力, bin log 只能用来做归档。InnoDB 引擎使用 redo log 来支持事务。

crash-safe 的能力是指:数据库在发生异常重启之后,之前提交的记录都不会丢失

为什么要以该顺序来使用两个模块?

首先我们做如下假设:

      当引入 redo log 的 prepare 预提交状态,就可以解决这个问题。假设 redo log 进入 prepare 状态,并且 bin log 也已经写完了,此时机器故障了,这时候 MySQL 就有自己的处理机制,如下:

这样就解决的了数据一致性问题

上一篇下一篇

猜你喜欢

热点阅读