1、首先介绍了Redo,Undo,Log Sequence Number (LSN),Checkpoint,Rollback Pointer (ROLL_PTR),Transaction ID (TRX_ID),Transaction Serialization Number(TRX_NO) 是什么?
2、然后介绍了MySQL Update过程中发生了什么?Redo,Undo,双写之间如何配合,脏页何时刷新?
3、最后介绍了Crash Recovery时如何做恢复?
1、InnoDB 术语和概念
1.1. InnoDB概述图
1.2. InnoDB 重要术语和概念
* InnoDB事务系统信息页结构
* InnoDB事务系统最多可以创建128个回滚段(MySQL 8.x版本除外),每个回滚段中都需要有一个单独的page来维护其拥有的undo solt(通常是每个回滚段中的第一个页),每个回滚段有1024个事务槽,每个事务槽指针都指向每个回滚段中的第一个UNDO_lOG页中的回滚段头
* Undo Log的数据存储在系统表空间的UNDO_LOG页中,下面分别是UNDO_LOG页结构、UNDO_LOG页中UNDO页头部和UNDO段头部、UNDO_LOG记录格式示意图
2、Update流程
2.1. 事务start(事务首次开启)
2.2. 记录修改(每次只修改一行记录)
2.3. 此时其他事务的修改会怎样?
2.4. 事务提交(显式和隐式提交)
2.5. 后台线程刷脏(后台线程连续不断地根据不同触发机制触发刷新)
2.6. 定期执行Checkpoint
2.7. 后台线程Purge(后台线程连续不断地根据需要定期执行Purge,包括Undo Log和历史链表)
3、Creash Recovery流程
3.1. 什么时候会进行Crash Recovery?
3.2. 检测实例是不是干净地关闭的
3.3. 使用所有独立表空间的表名和表空间ID创建一个名称到ID的映射
* FSP_HDR页中FSP Header的前四个字节记录着表空间ID
3.4. 损坏页修复(检查是否有不完整的页,如果有则使用Double Write Buffer进行修复)
3.5. 前滚Redo,回滚未提交事务
4、参考资料