首页 >> 工具知识

mysql命令-ibd2sdi

1. 核心功能

  • 作用:从 InnoDB 表空间文件(.ibd)中提取序列化字典信息(SDI)。SDI 以 JSON 格式存储表/列定义等元数据,替代旧版 MySQL 的 .frm 文件。

  • 支持文件类型

    • 独立表空间(如 表名.ibd

    • 通用表空间(如 tablespace.ibd

    • 系统表空间(ibdata*

    • 数据字典表空间(mysql.ibd

  • 不支持:临时表空间或 Undo 表空间。

2. 典型使用场景

  • 表结构恢复:当 .frm 文件丢失时,从 .ibd 文件重建表结构。

  • 离线元数据分析:不启动 MySQL 即可查看表定义。

  • 修复数据字典:利用 SDI 冗余恢复损坏的字典。

  • 跨版本迁移:分析不同 MySQL 版本的表结构(SDI 不会自动更新)。

3. 命令语法与参数

ibd2sdi [选项] 文件1.ibd [文件2.ibd ...]

参数说明示例
--dump-file=<文件>输出到文件(默认输出到终端)ibd2sdi --dump-file=输出.txt t1.ibd
--skip-data仅提取对象 ID 和类型,跳过详细元数据ibd2sdi --skip-data t1.ibd
--id=<对象ID>按对象 ID 过滤(如 mysql.tables 中的表 ID)ibd2sdi --id=123 t1.ibd
--type=<类型>按对象类型过滤(1=表,2=表空间)ibd2sdi --type=1 t1.ibd
--no-check跳过校验和验证(用于文件损坏时)ibd2sdi --no-check 损坏文件.ibd
--pretty/--skip-pretty启用/禁用 JSON 格式化(默认启用)ibd2sdi --skip-pretty t1.ibd

多文件表空间处理(如 ibdata1, ibdata2):

ibd2sdi ibdata1 ibdata2  # 必须按页号升序排列

4. 输出示例

../../mysql-8.0.20-macos10.15-x86_64/bin/ibd2sdi test2.ibd

返回值:

["ibd2sdi"
,
{
	"type": 1,
	"id": 222,
	"object":
		{
    "mysqld_version_id": 80020,
    "dd_version": 80017,
    "sdi_version": 80019,
    "dd_object_type": "Table",
    "dd_object": {
        "name": "test2",
        "mysql_version_id": 80020,
        "created": 20240313142147,
        "last_altered": 20240313142147,
        "hidden": 1,
        "options": "avg_row_length=0;encrypt_type=N;key_block_size=0;keys_disabled=0;pack_record=1;stats_auto_recalc=0;stats_sample_pages=0;",
        "columns": [
            {
                "name": "id",
                "type": 9,
                "is_nullable": false,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": true,
                "is_virtual": false,
                "hidden": 1,
                "ordinal_position": 1,
                "char_length": 20,
                "numeric_precision": 19,
                "numeric_scale": 0,
                "numeric_scale_null": false,
                "datetime_precision": 0,
                "datetime_precision_null": 1,
                "has_no_default": false,
                "default_value_null": false,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "AAAAAAAAAAA=",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "??id",
                "generation_expression": "",
                "generation_expression_utf8": "",
                "options": "interval_count=0;",
                "se_private_data": "table_id=1098;",
                "column_key": 2,
                "column_type_utf8": "bigint",
                "elements": [],
                "collation_id": 8,
                "is_explicit_collation": false
            },
            {
                "name": "name",
                "type": 16,
                "is_nullable": true,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": false,
                "is_virtual": false,
                "hidden": 1,
                "ordinal_position": 2,
                "char_length": 800,
                "numeric_precision": 0,
                "numeric_scale": 0,
                "numeric_scale_null": true,
                "datetime_precision": 0,
                "datetime_precision_null": 1,
                "has_no_default": false,
                "default_value_null": true,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "????",
                "generation_expression": "",
                "generation_expression_utf8": "",
                "options": "interval_count=0;",
                "se_private_data": "table_id=1098;",
                "column_key": 1,
                "column_type_utf8": "varchar(200)",
                "elements": [],
                "collation_id": 45,
                "is_explicit_collation": false
            },
            {
                "name": "create_date",
                "type": 19,
                "is_nullable": true,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": false,
                "is_virtual": false,
                "hidden": 1,
                "ordinal_position": 3,
                "char_length": 19,
                "numeric_precision": 0,
                "numeric_scale": 0,
                "numeric_scale_null": true,
                "datetime_precision": 0,
                "datetime_precision_null": 0,
                "has_no_default": false,
                "default_value_null": true,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "????",
                "generation_expression": "",
                "generation_expression_utf8": "",
                "options": "interval_count=0;",
                "se_private_data": "table_id=1098;",
                "column_key": 1,
                "column_type_utf8": "datetime",
                "elements": [],
                "collation_id": 8,
                "is_explicit_collation": false
            },
            {
                "name": "DB_TRX_ID",
                "type": 10,
                "is_nullable": false,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": false,
                "is_virtual": false,
                "hidden": 2,
                "ordinal_position": 4,
                "char_length": 6,
                "numeric_precision": 0,
                "numeric_scale": 0,
                "numeric_scale_null": true,
                "datetime_precision": 0,
                "datetime_precision_null": 1,
                "has_no_default": false,
                "default_value_null": true,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "",
                "generation_expression": "",
                "generation_expression_utf8": "",
                "options": "",
                "se_private_data": "table_id=1098;",
                "column_key": 1,
                "column_type_utf8": "",
                "elements": [],
                "collation_id": 63,
                "is_explicit_collation": false
            },
            {
                "name": "DB_ROLL_PTR",
                "type": 9,
                "is_nullable": false,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": false,
                "is_virtual": false,
                "hidden": 2,
                "ordinal_position": 5,
                "char_length": 7,
                "numeric_precision": 0,
                "numeric_scale": 0,
                "numeric_scale_null": true,
                "datetime_precision": 0,
                "datetime_precision_null": 1,
                "has_no_default": false,
                "default_value_null": true,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "",
                "generation_expression": "",
                "generation_expression_utf8": "",
                "options": "",
                "se_private_data": "table_id=1098;",
                "column_key": 1,
                "column_type_utf8": "",
                "elements": [],
                "collation_id": 63,
                "is_explicit_collation": false
            }
        ],
        "schema_ref": "testdb",
        "se_private_id": 1098,
        "engine": "InnoDB",
        "last_checked_for_upgrade_version_id": 80020,
        "comment": "????1",
        "se_private_data": "autoinc=0;version=0;",
        "row_format": 2,
        "partition_type": 0,
        "partition_expression": "",
        "partition_expression_utf8": "",
        "default_partitioning": 0,
        "subpartition_type": 0,
        "subpartition_expression": "",
        "subpartition_expression_utf8": "",
        "default_subpartitioning": 0,
        "indexes": [
            {
                "name": "PRIMARY",
                "hidden": false,
                "is_generated": false,
                "ordinal_position": 1,
                "comment": "",
                "options": "flags=0;",
                "se_private_data": "id=99;root=3;space_id=61;table_id=1098;trx_id=0;",
                "type": 1,
                "algorithm": 2,
                "is_algorithm_explicit": false,
                "is_visible": true,
                "engine": "InnoDB",
                "elements": [
                    {
                        "ordinal_position": 1,
                        "length": 8,
                        "order": 2,
                        "hidden": false,
                        "column_opx": 0
                    },
                    {
                        "ordinal_position": 2,
                        "length": 4294967295,
                        "order": 2,
                        "hidden": true,
                        "column_opx": 3
                    },
                    {
                        "ordinal_position": 3,
                        "length": 4294967295,
                        "order": 2,
                        "hidden": true,
                        "column_opx": 4
                    },
                    {
                        "ordinal_position": 4,
                        "length": 4294967295,
                        "order": 2,
                        "hidden": true,
                        "column_opx": 1
                    },
                    {
                        "ordinal_position": 5,
                        "length": 4294967295,
                        "order": 2,
                        "hidden": true,
                        "column_opx": 2
                    }
                ],
                "tablespace_ref": "testdb/test2"
            }
        ],
        "foreign_keys": [],
        "check_constraints": [],
        "partitions": [],
        "collation_id": 45
    }
}
}
,
{
	"type": 2,
	"id": 38,
	"object":
		{
    "mysqld_version_id": 80020,
    "dd_version": 80017,
    "sdi_version": 80019,
    "dd_object_type": "Tablespace",
    "dd_object": {
        "name": "testdb/test2",
        "comment": "",
        "options": "encryption=N;",
        "se_private_data": "flags=16417;id=61;server_version=80020;space_version=1;state=normal;",
        "engine": "InnoDB",
        "files": [
            {
                "ordinal_position": 1,
                "filename": "./testdb/test2.ibd",
                "se_private_data": ""
            }
        ]
    }
}
}
]

5. 注意事项与限制

  • 操作时机:执行 DDL(如 ALTER TABLE)时可能短暂失败,需重试。

  • 分区表:SDI 仅存储在第一分区的 .ibd 文件中。

  • 字符编码:若表定义含非 UTF8 字符(如中文注释),输出可能乱码。

  • 版本兼容

    • MySQL 5.7 升级到 8.0 后需手动重建表以生成 SDI。

    • SDI 不随版本升级自动更新。

  • 文件权限:需操作系统权限读取 .ibd 文件。

紧急恢复提示:对损坏文件使用 --no-check 参数跳过校验,但仅限紧急情况!




最新文章
mysql分页问题2025-08-04
千万数据先insert和先建索引哪个快2025-08-04
MySQL 中大小表关联查询如何优化2025-08-04
sql技巧-每个班年龄排前两名的人2025-08-03
MySQL 导致 cpu 飙升的话,要怎么处理呢?2025-07-29
MySQL 中为千万级大表添加字段2025-07-29
mysql中百万级别以上的数据如何删除2025-07-29
分库分表带来的问题2025-07-29
mysql中常用的分库分表中间件有哪些2025-07-29
mysql不停机扩容2025-07-29
备案号:蜀ICP备2023042032号-1