### 4.6.1 ibd2sdi — InnoDB 表空间 SDI 提取实用程序

[](<>)[](<>)

[**ibd2sdi**](ibd2sdi.html)是一个用于提取的实用程序[序列化字典信息](glossary.html#glos_serialized_dictionary_information)(SDI) 从`InnoDB`表空间文件。SDI 数据存在于所有持久性中`InnoDB`表空间文件。

[**ibd2sdi**](ibd2sdi.html)可以运行[每表文件](glossary.html#glos_file_per_table)表空间文件 (`*.ibd`文件），[通用表空间](glossary.html#glos_general_tablespace)文件（`*.ibd`文件），[系统表空间](glossary.html#glos_system_tablespace)文件（`数据*`文件）和数据字典表空间（`mysql.ibd`）。它不支持与临时表空间或撤消表空间一起使用。

[**ibd2sdi**](ibd2sdi.html)可以在运行时或服务器离线时使用。期间[DDL](glossary.html#glos_ddl)操作，[`回滚`](commit.html)操作，撤消与 SDI 相关的日志清除操作，可能会有很短的时间间隔[**ibd2sdi**](ibd2sdi.html)无法读取存储在表空间中的 SDI 数据。

[**ibd2sdi**](ibd2sdi.html)从指定的表空间执行未提交的 SDI 读取。重做日志和撤消日志不被访问。

调用[**ibd2sdi**](ibd2sdi.html)像这样的实用程序：

```
ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
```

[**ibd2sdi**](ibd2sdi.html)支持多文件表空间，如`InnoDB`系统表空间，但一次不能在多个表空间上运行。对于多文件表空间，指定每个文件：

```
ibd2sdi ibdata1 ibdata2
```

多文件表空间的文件必须按照页码升序指定。如果两个连续的文件具有相同的空间 ID，则后面的文件必须以前一个文件的最后页码 + 1 开头。

[**ibd2sdi**](ibd2sdi.html)输出 SDI（包含 id、type 和 data 字段）在[`JSON`](json.html)格式。

#### ibd2sdi 选项

[**ibd2sdi**](ibd2sdi.html)支持以下选项：

-   [](<>) [`- 帮助`](ibd2sdi.html#option_ibd2sdi_help),`-h`

    [](<>)[](<>)

    显示帮助信息并退出。例如：

    ```
    Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames]
    See http://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html for usage hints.
      -h, --help          Display this help and exit.
      -v, --version       Display version information and exit.
      -#, --debug[=name]  Output debug log. See
                          http://dev.mysql.com/doc/refman/8.0/en/dbug-package.html
      -d, --dump-file=name
                          Dump the tablespace SDI into the file passed by user.
                          Without the filename, it will default to stdout
      -s, --skip-data     Skip retrieving data from SDI records. Retrieve only id
                          and type.
      -i, --id=#          Retrieve the SDI record matching the id passed by user.
      -t, --type=#        Retrieve the SDI records matching the type passed by
                          user.
      -c, --strict-check=name
                          Specify the strict checksum algorithm by the user.
                          Allowed values are innodb, crc32, none.
      -n, --no-check      Ignore the checksum verification.
      -p, --pretty        Pretty format the SDI output.If false, SDI would be not
                          human readable but it will be of less size
                          (Defaults to on; use --skip-pretty to disable.)

    Variables (--variable-name=value)
    and boolean options {FALSE|TRUE}  Value (after reading options)
    --------------------------------- ----------------------------------------
    debug                             (No default value)
    dump-file                         (No default value)
    skip-data                         FALSE
    id                                0
    type                              0
    strict-check                      crc32
    no-check                          FALSE
    pretty                            TRUE
    ```

-   [](<>) [`- 版本`](ibd2sdi.html#option_ibd2sdi_version),`-v`

    [](<>)[](<>)

    显示版本信息并退出。例如：

    ```
    ibd2sdi  Ver 8.0.3-dmr for Linux on x86_64 (Source distribution)
    ```

-   [](<>) [`--调试[=*`调试选项`*]`](ibd2sdi.html#option_ibd2sdi_debug),`-# [*`调试选项`*]`

    [](<>)[](<>)

    打印调试日志。有关调试选项，请参阅[第 5.9.4 节，“DBUG 包”](dbug-package.html).

    ```
    ibd2sdi --debug=d:t /tmp/ibd2sdi.trace
    ```

    仅当 MySQL 是使用[`WITH_DEBUG`](source-configuration-options.html#option_cmake_with_debug).Oracle 提供的 MySQL 发行版二进制文件是*不是*使用此选项构建。

-   [](<>) [`--转储文件=`](ibd2sdi.html#option_ibd2sdi_dump-file),`-d`

    [](<>)[](<>)

    将序列化字典信息 (SDI) 转储到指定的转储文件中。如果未指定转储文件，则将表空间 SDI 转储到`标准输出`.

    ```
    ibd2sdi --dump-file=file_name ../data/test/t1.ibd
    ```

-   [](<>) [`--跳过数据`](ibd2sdi.html#option_ibd2sdi_skip-data),`-s`

    [](<>)[](<>)

    跳过检索`数据`来自序列化字典信息 (SDI) 的字段值，并且仅检索`id`和`类型`字段值，它们是 SDI 记录的主键。

    ```
    $> ibd2sdi --skip-data ../data/test/t1.ibd
    ["ibd2sdi"
    ,
    {
    	"type": 1,
    	"id": 330
    }
    ,
    {
    	"type": 2,
    	"id": 7
    }
    ]
    ```

-   [](<>) [`--id=*`#`*`](ibd2sdi.html#option_ibd2sdi_id),`-一世 *`#`*`

    [](<>)[](<>)

    检索与指定表或表空间对象 ID 匹配的序列化字典信息 (SDI)。对象 id 对于对象类型是唯一的。表和表空间对象 ID 也可以在`id`的列`mysql.tables`和`mysql.tablespace`数据字典表。有关数据字典表的信息，请参阅[第 14.1 节，“数据字典模式”](data-dictionary-schema.html).

    ```
    $> ibd2sdi --id=7 ../data/test/t1.ibd
    ["ibd2sdi"
    ,
    {
    	"type": 2,
    	"id": 7,
    	"object":
    		{
        "mysqld_version_id": 80003,
        "dd_version": 80003,
        "sdi_version": 1,
        "dd_object_type": "Tablespace",
        "dd_object": {
            "name": "test/t1",
            "comment": "",
            "options": "",
            "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;",
            "engine": "InnoDB",
            "files": [
                {
                    "ordinal_position": 1,
                    "filename": "./test/t1.ibd",
                    "se_private_data": "id=2;"
                }
            ]
        }
    }
    }
    ]
    ```

-   [](<>) [`--类型=*`#`*`](ibd2sdi.html#option_ibd2sdi_type),`-t *`#`*`

    [](<>)[](<>)

    检索与指定对象类型匹配的序列化字典信息 (SDI)。SDI 是为表（type=1）和表空间（type=2）对象提供的。

    ```
    $> ibd2sdi --type=2 ../data/test/t1.ibd
    ["ibd2sdi"
    ,
    {
    	"type": 2,
    	"id": 7,
    	"object":
    		{
        "mysqld_version_id": 80003,
        "dd_version": 80003,
        "sdi_version": 1,
        "dd_object_type": "Tablespace",
        "dd_object": {
            "name": "test/t1",
            "comment": "",
            "options": "",
            "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;",
            "engine": "InnoDB",
            "files": [
                {
                    "ordinal_position": 1,
                    "filename": "./test/t1.ibd",
                    "se_private_data": "id=2;"
                }
            ]
        }
    }
    }
    ]
    ```

-   [](<>) [`--严格检查`](ibd2sdi.html#option_ibd2sdi_strict-check),`-c`

    [](<>)[](<>)

    指定一个严格的校验和算法来验证所读取页面的校验和。选项包括`innodb`,`crc32`， 和`没有`.

    在这个例子中，严格版本的`innodb`指定校验和算法：

    ```
    ibd2sdi --strict-check=innodb ../data/test/t1.ibd
    ```

    在这个例子中，严格版本的`crc32`指定校验和算法：

    ```
    ibd2sdi -c crc32 ../data/test/t1.ibd
    ```

    如果您不指定[`--严格检查`](ibd2sdi.html#option_ibd2sdi_strict-check)选项，验证是针对非严格执行的`innodb`,`crc32`和`没有`校验和。

-   [](<>) [`--不检查`](ibd2sdi.html#option_ibd2sdi_no-check),`-n`

    [](<>)[](<>)

    跳过已读取页面的校验和验证。

    ```
    ibd2sdi --no-check ../data/test/t1.ibd
    ```

-   [](<>) [`- 漂亮`](ibd2sdi.html#option_ibd2sdi_pretty),`-p`

    [](<>)[](<>)

    以 JSON 漂亮的打印格式输出 SDI 数据。默认启用。如果禁用，SDI 不可读，但尺寸更小。采用`--skip-漂亮`禁用。

    ```
    ibd2sdi --skip-pretty ../data/test/t1.ibd
    ```
