1、介绍
在InnoDB启动时,如果是新建数据库则需初始化库,需要创建字典管理的相关信息。函数innobase_start_or_create_for_mysql调用dict_create完成此功能。即创建数据字典,因为InnoDB系统表的个数结构固定,所以初始化库的时候只需要创建这几个表的B+树即可并将B+树的根页号存放到固定位置。对于B+树,只要找到根页面,就可以从根页面开始检索数据。相关系统表(即上一节讲到的4个系统表)在InnoDB内部,不会暴露给用户。
4个系统表通过固定的硬编码进行构建。具体原理流程如下。
2、数据字典创建及加载原理流程
3、说明
1)innobase_start_or_create_for_mysql函数调用dict_create()函数进行数据字典的创建和加载工作。
2)dict_hdr_create完成系统表空间第7号页面dict header的初始化及创建SYS_TABLES两个索引、SYS_COLUMNS一个索引、SYS_INDEXES一个索引、SYS_FIELDS一个索引,其创建索引的函数是btr_create。
3)创建B+树索引后,通过dict_boot函数加载常驻内存的4个系统表。具体流程见流程图的②部分。
4)加载完成后,将这4个系统表挂在一个全局字典中:
dict0dict.h::
/* Dictionary system struct */
struct dict_sys_t{
ib_mutex_t mutex; /*!< mutex protecting the data