MySQL 归档神器 —— binlog!

binlog

MySQL 基础架构分为 Server 层和存储引擎层两部分。

  • Server 层的日志是 binlog,记录 SQL 语句的原始逻辑,用来归档和复制。
  • InnoDB 引擎的日志是 redo log,记录数据页的修改,用来实现 crash-safe 能力。

两阶段提交

为了让两份日志之间的逻辑一致,
InnoDB 使用了两阶段提交机制,将 redo log 的写入拆成 prepare 和 commit 两步。

  • 先写入 redo log,处于 prepare 阶段
  • 再写入 binlog
  • 最后,提交事务,处于 commit 阶段

redo log 和 binlog 有共同的数据字段 XID。崩溃恢复时,会按顺序扫描 redo log,

  • 如果里面的事务有 commit,就直接提交。
  • 如果只有 prepare,就拿 XID 去看对应事务的 binlog 是否完整。如果是,就直接提交,否则回滚。

与 redo log 区别

  1. redo log 是 InnoDB 引擎特有的,而 binlog 是 Server 层实现的
  2. redo log 是物理日志,记录数据页的修改,用来实现 crash-safe 能力。
    而 binlog 是逻辑日志,记录 SQL 语句的原始逻辑,用来归档和复制。
  3. redo log 是固定大小的,而 binlog 是追加写入的,不会覆盖以前的日志。
posted @ 2021-11-15 10:42  ayuecoding  阅读(135)  评论(0)    收藏  举报