美文网首页
《MySQL 实战 45 讲》-- 02 日志系统

《MySQL 实战 45 讲》-- 02 日志系统

作者: zhujunhua | 来源:发表于2022-08-02 10:18 被阅读0次
    MySQL 的逻辑架构图.png

    更新流程与查询流程是一样的。
    此外,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的主角:redo log(重做日志)binlog(归档日志)

    • 重要的日志模块:redo log(物理日志)
      redo log 是 InnoDB 引擎特有的日志。
      redo log 用于保证 crash-safe 能力。
      MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。
    • 重要的日志模块:binlog(逻辑日志)
      Server 层也有自己的日志,称为 binlog(归档日志)。
      MySQL官方文档--The Binary Log

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

    1. redo log 是 InnoDB 引擎特有的;
      binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
    2. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;
      binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
    3. redo log 是循环写的,空间固定会用完;
      binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

    两阶段提交

    写日志步骤:

    1. 写入redo log,处于prepare状态;
    2. 写binlog;
    3. redo log提交事务,处于commit状态;

    将 redo log 的写入拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"。
    redo log 和 binlog 都可以用于表示事务的提交状态,而两阶段提交就是让这两个状态保持逻辑上的一致。

    参考:
    极客时间--《MySQL 实战 45 讲 -- 02 日志系统》--林晓斌
    MySQL官方文档--The Binary Log

    相关文章

      网友评论

          本文标题:《MySQL 实战 45 讲》-- 02 日志系统

          本文链接:https://www.haomeiwen.com/subject/svidwrtx.html