一、myisam引擎, 在data目录下会看到3种文件:.frm、.MYI、.MYD
(1).frm–表定义,表结构的文件(mysql8中废弃,出现了新的.sdi文件替代)。
(2).MYD-数据信息文件,是表的数据文件。
(3).MYI-索引信息文件,是表数据文件中任何索引的数据树
二、 InnoDB引擎, 在data目录下会看到2种文件:.frm、.ibd
(1).frm–表结构的文件(mysql8中废弃,没有对应的sdi文件,表结构合并在.ibd文件中)。
(2).ibd(或.ibdata文件)–表数据和索引的文件(默认使用前者.ibd独立表空间,也可通过配置修改)。
这两种ibd文件都是存放innodb数据的文件,具体innodb数据存储方式用哪个文件,是看mysql的配置文件中 innodb_file_per_table来决定是使用共享表空间存储数据,还是用独享表空间存放存储数据。
独享表空间存储方式使用.ibd文件,并且每个表一个ibd文件
共享表空间存储方式使用.ibdata文件,所有表共同使用一个ibdata文件
三、介绍mysql8的 .sdi文件
SDI是Serialized Dictionary Information的缩写,是MySQL8.0重新设计数据词典后引入的新产物。我们知道MySQL8.0开始已经统一使用InnoDB存储引擎来存储表的元数据信息,但对于非InnoDB引擎,MySQL提供了另外一中可读的文件格式来描述表的元数据信息,在磁盘上以 tableName.sdi的命名存储在数据库目录下。
你可以基于sdi文件来对非事务引擎表进行导出,导入操作
而对于InnoDB表没有创建sdi文件,而是将sdi信息冗余存储到表空间中(临时表空间和undo表空间除外)。
既然已经有了新的数据词典系统,为什么还需要冗余的sdi信息呢,这主要从几个方面考虑:
当数据词典损坏时,实例可能拒绝启动,在这种情况下我们可以通过冗余的sdi信息,将数据拷贝到另外一个实例上,并进行数据重建
可以离线的查看表的定义
可以基于此实现简单的数据转储
MySQL Cluster/Ndb也可能依赖SDI信息进行元数据同步
官方提供了一个工具叫做ibd2sdi,在安装目录下可以找到,可以离线的将ibd文件中的冗余存储的sdi信息提取出来,并以json的格式输出到终端。 如:ibd2sdi data/test/table.ibd(文件位置)。
结束。参考了一些文章,在此表以感谢。


本文介绍了MySQL中的InnoDB和MyISAM存储引擎的文件格式。MyISAM引擎包含.frm(表结构)、.MYD(数据)和.MYI(索引)文件;InnoDB引擎则有.frm(表结构)和.ibd(数据与索引)文件。MySQL8.0引入了.sdi文件,用于存储非InnoDB引擎的表元数据。ibd2sdi工具可用于提取.ibd文件中的元数据。
1644

被折叠的 条评论
为什么被折叠?



