除了在数据字典中存储关于数据库对象的元数据外,MySQL 还以序列化的形式存储它。此数据称为序列化字典信息 (SDI)。
InnoDB
将 SDI 数据存储在其表空间文件中。NDBCLUSTER
将 SDI 数据存储在 NDB 字典中。其他存储引擎将 SDI 数据存储
.sdi
在为表的数据库目录中的给定表创建的文件中。SDI 数据以紧凑JSON
格式生成。
序列化字典信息 (SDI) 存在于
InnoDB
除临时表空间和撤消表空间文件之外的所有表空间文件中。表空间文件中的 SDI 记录
InnoDB
仅描述表空间中包含的表和表空间对象。
SDI 数据由表或
CHECK TABLE FOR
UPGRADE
. 当 MySQL 服务器升级到新版本或版本时,SDI 数据不会更新。
SDI 数据的存在提供了元数据冗余。例如,如果数据字典变得不可用,则可以使用ibd2sdi工具
直接从InnoDB
表空间文件中提取对象元数据。
对于InnoDB
,SDI 记录需要单个索引页,默认情况下大小为 16KB。但是,SDI 数据经过压缩以减少存储占用空间。
对于InnoDB
由多个表空间组成的分区表,SDI 数据存储在第一个分区的表空间文件中。
MySQL 服务器使用在DDL操作 期间访问的内部 API 来创建和维护 SDI 记录。
该IMPORT TABLE
语句
MyISAM
根据文件中包含的信息导入表
.sdi
。有关详细信息,请参阅
第 13.2.5 节,“IMPORT TABLE 语句”。