在配置项 innodb_file_per_table 为ON 的情况下,每个表都会对应一个单独的“.idb”文件。InnoDB 引擎启动时,会先从datadir 目录下扫描所有的“.ibd”文件,该文件由若干Page 组成。InnoDB 引擎启动时会首先解析其中的 Page0 到Page3(为了更方便地管理区和页而设置的索引页)获取该文件的元信息,并将该文件与文件名也就是Tablespace 做一个散列映射,保存在Fil_system 对象的mdirs 域中,这个mdirs域用于记录启动时扫描的路径与发现的文件。InnoDB 引擎在崩溃恢复阶段解析日志记录(log record)时,会通过log record 中记录的Space ID,去mdirs 域中获取对应的“.ibd”文件并打开,并根据Page No 读取对应的页,最终Apply 对应的Redo Log,恢复数据库到崩溃的那一刻。在InnoDB 引擎运行过程中,内存会保存所有Tablespace 的space_id、space_name 字段(分别对应一个表空间的Space ID 和名称)以及相应的“.ibd”文件的映射,这些结构都存储在InnoDB 的Fil_system 对象中。
以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。