MySQL 崩溃恢复过程
正常关闭
buffer pool
里边的脏页都会都会刷新一遍到磁盘- 记录最新
LSN
到ibdata
文件的第一个page
中
非正常关闭
- 没有上述两个过程
- 对日志进行操作
redo log
处理- 打开系统表空间
ibdata
,找到第一个完整page
中的LSN
- 进入
redo log
中,找到文件头中的第一个checkpoint LSN
,开始进行三次扫描- 找到
MLOG_CHECKPOINT
日志,如果是非正常恢复将没有这个文件:获取MLOG_FILE_NAME
中指定后续需要恢复的ibd
文件 - 根据
MLOG_CHECKPOINT
日志,读取对应 LSN 之后的日志解析到hash
表中 - 若第二次扫描
hash
表空间不足,则发起第三次扫描,清空hash
表空间,重新从新的checkpoint
点开始扫描- 此前的
redo log
已经存储到buffer pool
中,最终所有的redo log
被应用结束
- 此前的
- 找到
- 打开系统表空间
undo log
及binlog
处理- 通过
binlog
获取所有可能没有提交事务的xid
列表 - 通过
undo log
中的insert_undo_list,upddate_undo_list
事务链,构建undo_list
,在根据undo_list
构建未提交事务链表 - 存在
xid
列表进行提交
- 通过
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论