redo log 的执行流程?
1 个回答
改变的秘密,是把所有的精力全放在新的事物上,而不是与过去抗衡。凯恩**Redo log 的执行流程**可以概括为以下几个步骤,假设 SQL 操作为 `update T set a = 1 where id = 666`:  1. **MySQL Server 接收 SQL 请求**: - MySQL 客户端将 SQL 语句 `update T set a = 1 where id = 666` 发往 MySQL 的 Server 层。 - MySQL Server 层接收请求后,对 SQL 语句进行解析、优化,并生成执行计划。 2. **InnoDB 存储引擎执行操作**: - MySQL Server 将生成的 SQL 执行计划发送到 InnoDB 存储引擎层,InnoDB 存储引擎负责执行实际的数据更新操作。 - InnoDB 首先将 `a = 1` 的修改记录到内存中(数据页的缓存),即修改相应的行。 3. **记录 Redo Log**: - InnoDB 随后会记录该操作到 **redo log**,即记录 "在哪个数据页上做了什么修改" 的信息到内存中的 **redo log buffer**。 - **Redo log** 只记录物理修改操作,而不是具体的 SQL 语句。 4. **事务状态设置为 Prepare**: - 记录完 **redo log** 后,InnoDB 会将事务的状态设置为 **prepare**,意味着事务已经准备好提交,但尚未提交。此时,系统确保所有的变更都可以恢复。 5. **MySQL Server 提交事务**: - MySQL Server 层继续处理事务的其他部分,最终会将事务的状态设置为 **commit**,即提交该事务。 6. **Redo Log 持久化**: - 收到事务提交请求后,**redo log** 将之前记录在 **redo log buffer** 中的内容写入磁盘中的 **redo log file**。这一过程确保事务操作得以持久保存,即使数据库崩溃,数据也能通过 **redo log** 恢复。 通过这些步骤,MySQL 确保了事务的持久性和安全性,特别是依靠 **redo log** 机制,MySQL 能够在系统崩溃后恢复未刷盘的数据,保证数据一致性。编辑于 2024-11-28 13:28 •IP属地 美国举报评论收藏
公众号进入网站体验更佳

