(Mysql)MVCC、Redo Log 与 Undo Log

1. MVCC(多版本并发控制)

概念
MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,用于解决 读写冲突,提高数据库并发性能。MySQL InnoDB 存储引擎使用 MVCC 来实现 非阻塞读(即读取时不加锁)。

核心原理

  • 每行数据在内存中有多个版本。

  • 每个版本包含两个隐藏列:

    • trx_id:记录创建该版本的事务 ID。

    • roll_pointer(或 undo_pointer):指向旧版本 Undo Log。

  • 读取数据时,事务根据 自己的快照版本 决定看到哪个版本的数据。

作用

  1. 支持 一致性读(Consistent Read)

  2. 避免读操作阻塞写操作

  3. 与事务隔离级别结合使用(如 Repeatable Read)

举例

  • 事务 A 读取数据时看到的版本是事务开始时的快照

  • 事务 B 更新同一行数据时,会生成新版本,并在 Undo Log 中保存旧版本

  • 事务 A 仍然看到旧版本,不会被阻塞


2. Redo Log(重做日志)

概念
Redo Log 是 InnoDB 的 物理日志,用于 保证事务的持久性(Durability)

特点

  • 顺序写入磁盘,性能高

  • 数据写入前先写 Redo Log,再刷入数据页(Write-Ahead Logging)

  • 崩溃恢复时,通过 Redo Log 恢复已提交事务的数据

顺序流程(插入数据示例)

  1. 事务写入 Redo Log(WAL,顺序追加)

  2. 数据页写入缓冲池

  3. 事务提交时,Redo Log 刷盘(保证持久性)

作用

  • 崩溃恢复:只要 Redo Log 存在,已提交的数据可以恢复

  • 提高写入性能:顺序写比随机写快


3. Undo Log(回滚日志)

概念
Undo Log 是 InnoDB 的 逻辑日志,用于 事务回滚MVCC 版本管理

特点

  • 每条修改操作都会记录 Undo Log

  • 保存的是旧数据版本

  • 写操作失败或事务回滚时,用 Undo Log 恢复数据

作用

  1. 事务回滚:事务出错时,可通过 Undo Log 回到操作前状态

  2. MVCC 读:一致性读时,事务可通过 Undo Log 获取旧版本数据

示例

  • 数据库原值:A = 10

  • 事务修改:A = 20

  • Undo Log 保存旧值 A = 10

  • 事务回滚时,用 Undo Log 恢复 A = 10


4. Redo Log vs Undo Log

特性Redo LogUndo Log
类型物理日志逻辑日志
存储位置磁盘顺序写内存 + 磁盘
用途崩溃恢复回滚、MVCC版本读取
记录内容新数据旧数据
持久性持久化(保证事务提交)临时(事务回滚后可释放)

5. 总结

  • MVCC:保证高并发下的一致性读,靠 Undo Log 保存历史版本

  • Redo Log:保证事务提交的持久性,顺序写入磁盘

  • Undo Log:支持事务回滚和 MVCC 版本管理

理解技巧

  • Redo Log = Ctrl+S(存储最新修改,保证不会丢)

  • Undo Log = Ctrl+Z(保存历史版本,可以撤回操作)

  • MVCC = 时间旅行(每个事务看到自己时间点的版本)

MySQL中的Redo Log、BinlogUndo Log是三种不同的日志类型,用于支持数据库事务的持久性、复制和回滚操作。 1. Redo Log(重做日志): Redo LogMySQL引擎内部使用的一种日志,记录了所有已提交的修改操作,以保证数据库在发生崩溃等异常情况下能够进行恢复。当数据库发生崩溃时,可以通过Redo Log来重放这些修改操作,使数据库恢复到崩溃前的状态。Redo Log是在InnoDB存储引擎中实现的,通常以磁盘文件形式存在,可被视为一种类似于事务日志的机制。 2. Binlog(二进制日志): BinlogMySQL数据库服务器层产生的一种日志,用于记录数据库中所有的修改操作,包括数据修改和数据定义语句(DDL)。Redo Log不同,Binlog记录的是逻辑操作而不是物理操作,以提供对数据的逻辑复制和恢复能力。Binlog通常以二进制文件的形式存在,并且可以被用于主从复制和数据恢复等任务。 3. Undo Log(回滚日志): Undo Log是用于支持事务回滚操作的一种日志。当一个事务执行修改操作时,旧值会被记录在Undo Log中,以便于回滚操作时能够恢复到之前的状态。Undo Log通常事务的隔离级别和并发控制有关,主要用于MVCC(多版本并发控制)的实现。 这三种日志在MySQL中扮演了不同角色,分别用于保证数据的持久性、支持复制和提供事务回滚功能。在数据库的正常运行和异常恢复中起到至关重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值