【MySQL】详解binlog和redolog两阶段提交

在 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

数据库管理系统中,MySQLbinlog、redo logundo log各自承担着独特的角色,并以复杂的机制协同工作,以确保数据的一致性、事务的完整性系统的稳定运行。为了深入了解这些日志的作用及其协同工作原理,推荐参考《MySQL日志系统解析:binlog、redo log与undo log的作用》。这本书不仅提供了3000帧动画图解,帮助读者形象地理解MySQL的工作原理,还详细探讨了各个日志的功能它们在实际中的应用。 参考资源链接:[MySQL日志系统解析:binlog、redo log与undo log的作用](https://wenku.csdn.net/doc/1j27p7f3ec?spm=1055.2569.3001.10343) 首先,binlog作为MySQL Server层的日志,主要用于记录所有的数据库更改,包括表结构的变更数据的变更,这样就可以用于数据备份恢复、主从复制等。而redo logundo log则属于InnoDB存储引擎层面的日志。redo log记录了所有对InnoDB存储引擎的事务操作的物理变更,是一种预写式日志,保证了事务的持久性。在系统崩溃的情况下,可以通过redo log恢复数据,确保数据库恢复到崩溃前的一致状态。undo log则用于实现事务的回滚,存储了事务操作前的数据状态,以便在事务失败时撤销对数据库的影响。 在MySQL中,这三种日志协同工作确保了事务的ACID属性。当一个事务开始执行时,MySQL首先在BufferPool中修改数据页,同时记录对应的redo log。如果事务提交binlog会记录下事务的变更。在事务提交后,redo log首先被刷新到磁盘,确保即使发生故障,也能从redo log中恢复数据。undo log则在事务执行过程中持续记录,以便在事务失败时能够回滚事务对数据的影响。BufferPool的使用进一步提升了性能,减少了对磁盘I/O的需求。 当你想要深入了解MySQL日志系统的工作原理及其对数据库性能稳定性的影响时,继续深入学习《MySQL日志系统解析:binlog、redo log与undo log的作用》将为你提供更多的知识操作细节。 参考资源链接:[MySQL日志系统解析:binlog、redo log与undo log的作用](https://wenku.csdn.net/doc/1j27p7f3ec?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小小关同学

你的支持就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值