MySQL中的Binlog和Redo Log虽然都与事务的持久性和可恢复性有关,但它们服务于不同的目的和场景,并且在MySQL的架构中扮演着互补的角色。
保证InnoDB存储引擎的事务持久性
。它确保在系统崩溃的情况下,已经提交的事务不会丢失,这是通过预写日志(Write-Ahead Logging, WAL)机制实现的。如果数据库发生崩溃,InnoDB 在重启时会检查 Redo Log。通过 Redo Log,InnoDB 可以重做(redo)
在崩溃前已经提交但可能未写入到数据文件中的事务,确保这些事务的修改得到持久化。
在执行更新语句过程,会记录redo log与binlog两块日志,以基本的事务为单位,redo log在事务执行过程中可以不断写入,而binlog只有在提交事务时才写入,所以redo log与binlog的写入时机不一样。
为什么两者都需要:
崩溃恢复
,而Binlog用于数据复制和点时间恢复。
Redo Log 是InnoDB存储引擎特有的
,而Binlog 是MySQL服务器层的功能
,这种设计使得Binlog可以用于多种存储引擎。总之,Redo Log 和 Binlog 在MySQL中共同工作,以确保数据的安全性、持久性和一致性,同时提供灵活的数据恢复和复制选项。
MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。