binlog和redolog

好的!这两个是 MySQL 面试核心知识点,下面详细解释:


✅ 一、概念区分

内容 binlog(归档日志) redolog(重做日志)
属于 MySQL 层(Server 层) InnoDB 存储引擎层
作用 记录所有修改数据库的数据操作(逻辑日志) 保障事务的持久性(崩溃后可恢复数据)
存储内容 SQL 语句或事件(INSERT、UPDATE、DELETE) 物理页修改(物理日志)
写入时机 执行完 SQL 后写入 执行 SQL 时先写入
落盘时机 事务提交时一次性写入 先写入 redo buffer,刷盘由策略控制
应用场景 主从复制、数据恢复、闪回 崩溃恢复(Crash Recovery)

✅ 二、redolog(重做日志)详解(InnoDB 专属)

作用:

  • 保证事务的 持久性(Durability),避免系统崩溃导致数据丢失。
  • 实现 WAL(Write-Ahead Logging)机制:先写日志,再写磁盘。

redolog 流程:

  1. SQL 执行,先写 redo log buffer(内存)
  2. 事务提交前,redo log 持久化到磁盘(redo file)
  3. 崩溃恢复时,redo log 反推数据,恢复已提交但未落盘的数据

redo 日志有两阶段:

  • prepare:写入 redo
  • commit:事务正式提交

✅ 三、binlog(归档日志)详解(Server 层全局)

作用:

  • 记录所有对数据库有改动的操作
  • 支持 主从复制(slave 读取 binlog 同步数据)
  • 支持数据恢复(基于时间点或位置恢复)

binlog 关键特性:

  • 事务粒度 写入(事务提交时统一写入)
  • 日志格式(3种):STATEMENT(默认)、ROW、MIXED
  • 存储的是 SQL 语句(或变更事件)

✅ 四、二者关系总结(经典面试考点)

关系点 描述
顺序 redo log 先写入,binlog 后写入(事务提交时)
事务一致性 两者缺一不可,双保险机制,MySQL 实现 两阶段提交 保证 binlog 和 redolog 一致
崩溃恢复靠谁? redolog
主从复制靠谁? binlog

✅ 五、MySQL 为什么需要两份日志?

Redolog:确保崩溃后能恢复,保证 InnoDB 事务的持久性
Binlog:用于 主从复制数据恢复,可跨存储引擎


✅ 六、面试高分总结模板:

MySQL 有两种核心日志:redolog 和 binlog。
redolog 属于 InnoDB 存储引擎层,保证事务的持久性(WAL机制),主要用于崩溃恢复;
binlog 属于 MySQL Server 层,记录所有修改操作,主要用于主从复制和数据恢复。
二者在事务提交时通过两阶段提交机制协同保证事务一致性。

你可能感兴趣的:(java,mysql,日志)