MySQL8开始删除了原来的frm文件,并采用 Serialized Dictionary Information (SDI), 是MySQL8.0重新设计数据词典后引入的新产物,并开始已经统一使用InnoDB存储引擎来存储表的元数据信息。SDI信息源记录保存在ibd文件中。
如何可以查看表结构信息,官方提供了一个工具叫做ibd2sdi,在安装目录下可以找到,可以离线的将ibd文件中的冗余存储的sdi信息提取出来,并以json的格式输出到终端。
用法示例:
/opt/mysql_templates/mysql-8P/bin/./ibd2sdi /opt/mysql_instances/master8/data/ibdata1 |jq ‘.’
具体bin路径因不同系统有不同位置,请自行确认。
以下命令为直接提取关于表信息的用法,提取后可用户创建表
/opt/mysql_templates/mysql-8P/bin/./ibd2sdi /opt/mysql_instances/master8/data/mysql.ibd |jq '.[]?|.[]?|.dd_object?|("------------------------------------"?,"TABLE NAME = ",.name?,“",(.columns?|.[]?|(.name?,.column_type_utf8?)))’
提取结果如下:
“------------------------------------”
"TABLE NAME = "
“tables”
"”
“id”
“bigint(20) unsigned”
“schema_id”
“bigint(20) unsigned”
“name”