在 MySQL 的事务执行过程中,binlog 和 redo log(重做日志)协同工作来确保事务的持久性和数据一致性。MySQL 使用一种称为 【两阶段提交】 的机制来确保这两个日志之间的一致性,以避免在崩溃时出现数据不一致的情况。 在我前面的 博客 中也有详细的介绍这两种日志,感兴趣的可以点击链接查阅。
1. redo log 和 binlog 的作用
redo log(重做日志):它是 InnoDB 存储引擎的日志,主要用于实现 事务的持久性
和 崩溃恢复
。当事务在 MySQL 中被提交时,数据并不会立即写入磁盘,而是先写入内存页,再通过 redo log 记录修改。在系统崩溃后,InnoDB 会通过 redo log 恢复未写入磁盘的事务,保证事务的持久性(即满足 事务的 ACID 中的 D:Durability)。
binlog(二进制日志):它是 MySQL Server 层的日志,记录所有导致数据修改的 SQL 语句。binlog 主要用于 主从复制
和 基于时间点的恢复
,使得主库和从库保持一致。
由于这两个日志分别在 MySQL Server 层和 InnoDB 存储引擎层,M