InnoDB和MyISAM引擎存储文件格式的介绍

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

一、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(文件位置)。

结束。参考了一些文章,在此表以感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值