文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  ibd2sdi — InnoDB 表空間 SDI 提取工具

6.6.1 ibd2sdi — InnoDB 表空間 SDI 提取工具

ibd2sdi 是一個用於從 InnoDB 表空間檔案中提取序列化字典資訊 (SDI) 的公用程式。SDI 資料存在於所有永久的 InnoDB 表空間檔案中。

ibd2sdi 可以在每個表格一個檔案的表空間檔案 (*.ibd 檔案)、通用表空間檔案 (*.ibd 檔案)、系統表空間檔案 (ibdata* 檔案) 和資料字典表空間 (mysql.ibd) 上執行。它不支援用於臨時表空間或復原表空間。

ibd2sdi 可以在執行階段或伺服器離線時使用。在DDL 操作、ROLLBACK 操作以及與 SDI 相關的復原記錄清除操作期間,可能會在短時間內發生 ibd2sdi 無法讀取儲存在表空間中的 SDI 資料。

ibd2sdi 從指定的表空間執行未提交的 SDI 讀取。不會存取重做記錄和復原記錄。

如下叫用 ibd2sdi 公用程式

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

ibd2sdi 支援多檔案表空間,例如 InnoDB 系統表空間,但一次不能在多個表空間上執行。對於多檔案表空間,請指定每個檔案

ibd2sdi ibdata1 ibdata2

多檔案表空間的檔案必須按照遞增的頁碼順序指定。如果兩個連續的檔案具有相同的空間 ID,則後續檔案必須從前一個檔案的最後一頁頁碼 + 1 開始。

ibd2sdiJSON 格式輸出 SDI (包含 id、type 和 data 欄位)。

ibd2sdi 選項

ibd2sdi 支援下列選項

  • --help-h

    命令列格式 --help
    類型 布林值
    預設值 false

    顯示說明訊息並結束。例如

    Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames]
    See https://mysqldev.dev.org.tw/doc/refman/8.4/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
                          https://mysqldev.dev.org.tw/doc/refman/8.4/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
  • --version-v

    命令列格式 --version
    類型 布林值
    預設值 false

    顯示版本資訊並結束。例如

    ibd2sdi  Ver 8.4.0 for Linux on x86_64 (Source distribution)
  • --debug[=debug_options]-# [debug_options]

    命令列格式 --debug=options
    類型 字串
    預設值 [無]

    列印除錯記錄。如需除錯選項,請參閱第 7.9.4 節「DBUG 套件」

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

    只有在使用 WITH_DEBUG 建置 MySQL 時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔並未使用此選項建置。

  • --dump-file=, -d

    命令列格式 --dump-file=檔案
    類型 檔案名稱
    預設值 [無]

    將序列化字典資訊 (SDI) 傾印到指定的傾印檔案。如果未指定傾印檔案,則資料表空間 SDI 會傾印到 stdout

    ibd2sdi --dump-file=file_name ../data/test/t1.ibd
  • --skip-data, -s

    命令列格式 --skip-data
    類型 布林值
    預設值 false

    略過從序列化字典資訊 (SDI) 擷取 data 欄位值,僅擷取 idtype 欄位值,這些是 SDI 記錄的主索引鍵。

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

    命令列格式 --id=#
    類型 整數
    預設值 0

    擷取符合指定資料表或資料表空間物件 ID 的序列化字典資訊 (SDI)。物件 ID 對於物件類型是唯一的。資料表和資料表空間物件 ID 也可在 mysql.tablesmysql.tablespace 資料字典資料表的 id 欄中找到。如需有關資料字典資料表的資訊,請參閱第 16.1 節,「資料字典綱要」

    $> 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;"
                }
            ]
        }
    }
    }
    ]
  • --type=#, -t #

    命令列格式 --type=#
    類型 列舉
    預設值 0
    有效值

    1

    2

    擷取符合指定物件類型的序列化字典資訊 (SDI)。SDI 提供給資料表 (type=1) 和資料表空間 (type=2) 物件。

    此範例顯示資料庫 test 中資料表空間 ts1 的輸出

    $> ibd2sdi --type=2 ../data/test/ts1.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/ts1",
            "comment": "",
            "options": "",
            "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;",
            "engine": "InnoDB",
            "files": [
                {
                    "ordinal_position": 1,
                    "filename": "./test/ts1.ibd",
                    "se_private_data": "id=2;"
                }
            ]
        }
    }
    }
    ]

    由於 InnoDB 處理預設值中繼資料的方式,即使未使用 DEFAULT 定義,在給定資料表欄位的 ibd2sdi 輸出中,預設值也可能存在且非空值。請考慮使用下列陳述式在名為 i 的資料庫中建立的兩個資料表

    CREATE TABLE t1 (c VARCHAR(16) NOT NULL);
    
    CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila");

    使用 ibd2sdi,我們可以看到欄位 cdefault_value 為非空值,實際上在兩個資料表中都被填補到長度,如下所示

    $> ibd2sdi ../data/i/t1.ibd  | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,//
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="
    
    $> ibd2sdi ../data/i/t2.ibd  | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,//
    "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="

    使用 JSON 感知工具(如 jq)可能會更容易檢視 ibd2sdi 輸出,如下所示

    $> ibd2sdi ../data/i/t1.ibd  | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]'
    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="
    
    $> ibd2sdi ../data/i/t2.ibd  | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]'
    "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="

    如需更多資訊,請參閱MySQL 內部文件

  • --strict-check, -c

    命令列格式 --strict-check=演算法
    類型 列舉
    預設值 crc32
    有效值

    crc32

    innodb

    none

    指定用於驗證讀取頁面總和檢查碼的嚴格總和檢查碼演算法。選項包括 innodbcrc32none

    在此範例中,指定了 innodb 總和檢查碼演算法的嚴格版本

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

    在此範例中,指定了 crc32 總和檢查碼演算法的嚴格版本

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

    如果您未指定 --strict-check 選項,則會根據非嚴格的 innodbcrc32none 總和檢查碼執行驗證。

  • --no-check, -n

    命令列格式 --no-check
    類型 布林值
    預設值 false

    略過讀取頁面的總和檢查碼驗證。

    ibd2sdi --no-check ../data/test/t1.ibd
  • --pretty, -p

    命令列格式 --pretty
    類型 布林值
    預設值 false

    以 JSON 美觀列印格式輸出 SDI 資料。預設啟用。如果停用,SDI 則不具備人類可讀性,但大小較小。使用 --skip-pretty 來停用。

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