回答
Binlog、Redo log 和 Undo log 是 MySQL 设计的三种不同类型的日志。
- binlog 是二进制日志,记录数据库所有更改状态的语句,如 DDL 和 DML 语句。
- redo log 是重做日志,保证 InnoDB 存储引擎的事务持久性。当发生 MySQL 服务端故障,InnoDB 在数据库启动时重放 redo log 来确保所有事务都正常提交,恢复至崩溃前状态。
- undo log 是回滚日志,记录数据修改前的原始信息,用于事务的回滚和多版本并发控制(MVCC)。
其中 binlog 是服务层的日志,数据存储在文件系统;而 redo log 和 undo log 是存储引擎层日志,存储在共享表空间或文件中。
像 MyISAM 引擎不支持事务就没有 redo log 和 undo log。
扩展
Binlog、Redo log、Undo log 之间如何协作确保数据的一致性?
以更新 SQL update t_user set name = 'mary' where id = 10;
为例,具体流程如下: