浅析MySQL 8.0崩溃恢复

2021-01-11 00:00:00 函数 初始化 日志 崩溃 恢复

本文将结合MySQL 8.0.19 分析InnoDB崩溃恢复的拉起过程,包括恢复前的准备工作,redo回放,undo回滚,以及崩溃恢复后Crash Safe DDL的实现。其中重点介绍redo的回放。

整体的代码流程如下,InnoDB崩溃恢复的流程是从srv_start, innobase_dict_recover ,ha_post_recover这三个函数中展开,后文会详细介绍。

|-->mysqld_main
|    |--> init_server_components
|    |    |--> dd::init
|    |    |    |-->/*忽略了一些链路*/    
|    |    |    |--> run_bootstrap_thread
|    |    |    |    |--> /*恢复线程中执行*/    
|    |    |    |    |--> handle_bootstrap
|    |    |    |    |    |--> do_pre_checks_and_initialize_dd
|    |    |    |    |    |    |--> DDSE_dict_init
|    |    |    |    |    |    |    |--> innobase_ddse_dict_init
|    |    |    |    |    |    |    |    |--> innobase_init_files
|    |    |    |    |    |    |    |    |    |--> /*崩溃恢复主函数*/
|    |    |    |    |    |    |    |    |    |--> srv_start
|    |    |    |    |    |    |--> restart_dictionary
|    |    |    |    |    |    |    |--> bootstrap::restart
|    |    |    |    |    |    |    |    |--> DDSE_dict_recover
|    |    |    |    |    |    |    |    |    |--> /*事务回滚主函数*/    
|    |    |    |    |    |    |    |    |    |--> innobase_dict_recover
|    |    |    |    |--> /*崩溃恢复结束*/
|    |    |--> /*Crash Safe DDL*/
|    |    |--> ha_post_recover  

相关文章