一条SQL查询语句是如何执行的?(18)

重要的日志模块:binlog

前面我们讲过 , MySQL 整体来看 , 其实就有两块:一块是 Server 层 , 它主要做的是 MySQL 功能层面的事情;还有一块是引擎层 , 负责存储相关的具体事宜 。 上面我们聊到的粉板 redo log 是 InnoDB 引擎特有的日志 , 而 Server 层也有自己的日志 , 称为 binlog(归档日志) 。

我想你肯定会问 , 为什么会有两份日志呢?

因为最开始 MySQL 里并没有 InnoDB 引擎 。 MySQL 自带的引擎是 MyISAM , 但是 MyISAM 没有 crash-safe 的能力 , binlog 日志只能用于归档 。 而 InnoDB 是另一个公司以插件形式引入 MySQL 的 , 既然只依靠 binlog 是没有 crash-safe 能力的 , 所以 InnoDB 使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力 。

这两种日志有以下三点不同 。

  1. redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的 , 所有引擎都可以使用 。

    推荐阅读