图文解析 MySQL 事务中的 redo 与 undo

2025-01-15 03:25:17   小编

图文解析 MySQL 事务中的 redo 与 undo

在 MySQL 数据库中,事务的 ACID 特性确保了数据的完整性和一致性,而 redo(重做日志)和 undo(回滚日志)在其中扮演着至关重要的角色。通过图文结合的方式,能更直观地理解它们的工作原理。

redo 日志:保障数据持久化

redo 日志是 MySQL 用于崩溃恢复(crash recovery)的关键机制。当事务对数据进行修改时,不仅会更新内存中的数据页,还会生成对应的 redo 日志记录。

假设我们有一个简单的银行账户转账操作,从账户 A 向账户 B 转 100 元。在内存中,账户 A 的余额减少 100,账户 B 的余额增加 100。与此redo 日志会记录这些修改操作。

从图中可以看到,redo 日志以顺序追加的方式写入磁盘。这是因为顺序写磁盘的性能远高于随机写。即使在系统崩溃的情况下,MySQL 重启后,通过读取 redo 日志,就能将未完成的事务对数据的修改重新应用到数据页上,从而保证已提交事务的数据持久性。

undo 日志:实现事务回滚与一致性读

undo 日志主要有两个作用:事务回滚和支持一致性读。

当事务执行过程中出现错误或者主动回滚时,undo 日志能帮助将数据恢复到事务开始之前的状态。还是以刚才的转账为例,如果在转账过程中出现问题,需要回滚事务,MySQL 会根据 undo 日志中的记录,将账户 A 和账户 B 的余额恢复到初始值。

在一致性读方面,当一个事务读取数据时,undo 日志能提供数据在某个时间点的快照。比如在并发环境下,事务 T1 正在修改数据,事务 T2 进行读取操作。T2 读取的并不是正在被修改的中间状态数据,而是通过 undo 日志构建的事务开始时的数据版本,保证了数据读取的一致性。

通过上述图文解析,我们对 MySQL 事务中的 redo 和 undo 日志有了更清晰的认识。它们相互配合,确保了 MySQL 数据库在各种情况下的数据完整性和事务处理的可靠性,为企业级应用提供了坚实的基础。

TAGS: 图文解析 MySQL事务 redo日志 undo日志

欢迎使用万千站长工具!

Welcome to www.zzTool.com