'\" t .\" Title: ibd2sdi .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 05/31/2024 .\" Manual: MySQL Database System .\" Source: MySQL 8.4 .\" Language: English .\" .TH "IBD2SDI" "1" "05/31/2024" "MySQL 8\&.4" "MySQL Database System" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" ibd2sdi \- InnoDB utility for extracting serialized dictionary information (SDI) from an InnoDB tablespace .SH "SYNOPSIS" .HP \w'\fBibd2sdi\ [\fR\fB\fIoptions\fR\fR\fB]\ \fR\fB\fIfile_name1\fR\fR\fB\ [\fR\fB\fIfile_name2\ file_name3\ \&.\&.\&.]\fR\fR\ 'u \fBibd2sdi [\fR\fB\fIoptions\fR\fR\fB] \fR\fB\fIfile_name1\fR\fR\fB [\fR\fB\fIfile_name2 file_name3 \&.\&.\&.]\fR\fR .SH "DESCRIPTION" .PP \fBibd2sdi\fR is a utility for extracting serialized dictionary information (SDI) from InnoDB tablespace files\&. SDI data is present in all persistent InnoDB tablespace files\&. .PP \fBibd2sdi\fR can be run on file\-per\-table tablespace files (*\&.ibd files), general tablespace files (*\&.ibd files), system tablespace files (ibdata* files), and the data dictionary tablespace (mysql\&.ibd)\&. It is not supported for use with temporary tablespaces or undo tablespaces\&. .PP \fBibd2sdi\fR can be used at runtime or while the server is offline\&. During DDL operations, ROLLBACK operations, and undo log purge operations related to SDI, there may be a short interval of time when \fBibd2sdi\fR fails to read SDI data stored in the tablespace\&. .PP \fBibd2sdi\fR performs an uncommitted read of SDI from the specified tablespace\&. Redo logs and undo logs are not accessed\&. .PP Invoke the \fBibd2sdi\fR utility like this: .sp .if n \{\ .RS 4 .\} .nf ibd2sdi [\fIoptions\fR] \fIfile_name1\fR [\fIfile_name2 file_name3 \&.\&.\&.\fR] .fi .if n \{\ .RE .\} .PP \fBibd2sdi\fR supports multi\-file tablespaces like the InnoDB system tablespace, but it cannot be run on more than one tablespace at a time\&. For multi\-file tablespaces, specify each file: .sp .if n \{\ .RS 4 .\} .nf ibd2sdi ibdata1 ibdata2 .fi .if n \{\ .RE .\} .PP The files of a multi\-file tablespace must be specified in order of the ascending page number\&. If two successive files have the same space ID, the later file must start with the last page number of the previous file + 1\&. .PP \fBibd2sdi\fR outputs SDI (containing id, type, and data fields) in JSON format\&. ibd2sdi Options .PP \fBibd2sdi\fR supports the following options: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-help\fR, \fB\-h\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --help T} T{ Type T}:T{ Boolean T} T{ Default Value T}:T{ false T} .TE .sp 1 Display a help message and exit\&. For example: .sp .if n \{\ .RS 4 .\} .nf Usage: \&./ibd2sdi [\-v] [\-c ] [\-d ] [\-n] filename1 [filenames] See http://dev\&.mysql\&.com/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 http://dev\&.mysql\&.com/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 .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-version\fR, \fB\-v\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --version T} T{ Type T}:T{ Boolean T} T{ Default Value T}:T{ false T} .TE .sp 1 Display version information and exit\&. For example: .sp .if n \{\ .RS 4 .\} .nf ibd2sdi Ver 8\&.4\&.0 for Linux on x86_64 (Source distribution) .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-debug[=\fR\fB\fIdebug_options\fR\fR\fB]\fR, \fB\-# [\fR\fB\fIdebug_options\fR\fR\fB]\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --debug=options T} T{ Type T}:T{ String T} T{ Default Value T}:T{ [none] T} .TE .sp 1 Prints a debug log\&. For debug options, refer to Section\ \&7.9.4, \(lqThe DBUG Package\(rq\&. .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-\-debug=d:t /tmp/ibd2sdi\&.trace .fi .if n \{\ .RE .\} .sp This option is available only if MySQL was built using \fBWITH_DEBUG\fR\&. MySQL release binaries provided by Oracle are \fInot\fR built using this option\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-dump\-file=\fR, \fB\-d\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --dump-file=file T} T{ Type T}:T{ File name T} T{ Default Value T}:T{ [none] T} .TE .sp 1 Dumps serialized dictionary information (SDI) into the specified dump file\&. If a dump file is not specified, the tablespace SDI is dumped to stdout\&. .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-\-dump\-file=\fIfile_name\fR \&.\&./data/test/t1\&.ibd .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-skip\-data\fR, \fB\-s\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --skip-data T} T{ Type T}:T{ Boolean T} T{ Default Value T}:T{ false T} .TE .sp 1 Skips retrieval of data field values from the serialized dictionary information (SDI) and only retrieves the id and type field values, which are primary keys for SDI records\&. .sp .if n \{\ .RS 4 .\} .nf $> \fBibd2sdi \-\-skip\-data \&.\&./data/test/t1\&.ibd\fR ["ibd2sdi" , { "type": 1, "id": 330 } , { "type": 2, "id": 7 } ] .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-id=\fR\fB\fI#\fR\fR, \fB\-i \fR\fB\fI#\fR\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --id=# T} T{ Type T}:T{ Integer T} T{ Default Value T}:T{ 0 T} .TE .sp 1 Retrieves serialized dictionary information (SDI) matching the specified table or tablespace object id\&. An object id is unique to the object type\&. Table and tablespace object IDs are also found in the id column of the mysql\&.tables and mysql\&.tablespace data dictionary tables\&. For information about data dictionary tables, see Section\ \&16.1, \(lqData Dictionary Schema\(rq\&. .sp .if n \{\ .RS 4 .\} .nf $> \fBibd2sdi \-\-id=7 \&.\&./data/test/t1\&.ibd\fR ["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;" } ] } } } ] .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-type=\fR\fB\fI#\fR\fR, \fB\-t \fR\fB\fI#\fR\fR .TS allbox tab(:); lB l lB l lB l lB l. T{ Command-Line Format T}:T{ --type=# T} T{ Type T}:T{ Enumeration T} T{ Default Value T}:T{ 0 T} T{ Valid Values T}:T{ .PP 1 .PP 2 T} .TE .sp 1 Retrieves serialized dictionary information (SDI) matching the specified object type\&. SDI is provided for table (type=1) and tablespace (type=2) objects\&. .sp This example shows output for a tablespace ts1 in the test database: .sp .if n \{\ .RS 4 .\} .nf $> \fBibd2sdi \-\-type=2 \&.\&./data/test/ts1\&.ibd\fR ["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;" } ] } } } ] .fi .if n \{\ .RE .\} .sp Due to the way in which InnoDB handles default value metadata, a default value may be present and non\-empty in \fBibd2sdi\fR output for a given table column even if it is not defined using DEFAULT\&. Consider the two tables created using the following statements, in the database named i: .sp .if n \{\ .RS 4 .\} .nf CREATE TABLE t1 (c VARCHAR(16) NOT NULL); CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila"); .fi .if n \{\ .RE .\} .sp Using \fBibd2sdi\fR, we can see that the default_value for column c is nonempty and is in fact padded to length in both tables, like this: .sp .if n \{\ .RS 4 .\} .nf $> \fBibd2sdi \&.\&./data/i/t1\&.ibd | grep \-m1 \*(Aq\e"default_value\e"\*(Aq | cut \-b34\- | sed \-e s/,//\fR "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\enAAAAAAAAAAA=" $> \fBibd2sdi \&.\&./data/i/t2\&.ibd | grep \-m1 \*(Aq\e"default_value\e"\*(Aq | cut \-b34\- | sed \-e s/,//\fR "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\enAAAAAAAAAAA=" .fi .if n \{\ .RE .\} .sp Examination of \fBibd2sdi\fR output may be easier using a JSON\-aware utility like \fB\m[blue]\fBjq\fR\m[]\&\s-2\u[1]\d\s+2\fR, as shown here: .sp .if n \{\ .RS 4 .\} .nf $> \fBibd2sdi \&.\&./data/i/t1\&.ibd | jq \*(Aq\&.[1]["object"]["dd_object"]["columns"][0]["default_value"]\*(Aq\fR "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\enAAAAAAAAAAA=" $> \fBibd2sdi \&.\&./data/i/t2\&.ibd | jq \*(Aq\&.[1]["object"]["dd_object"]["columns"][0]["default_value"]\*(Aq\fR "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\enAAAAAAAAAAA=" .fi .if n \{\ .RE .\} .sp For more information, see the \m[blue]\fBMySQL Internals documentation\fR\m[]\&\s-2\u[2]\d\s+2\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-strict\-check\fR, \fB\-c\fR .TS allbox tab(:); lB l lB l lB l lB l. T{ Command-Line Format T}:T{ --strict-check=algorithm T} T{ Type T}:T{ Enumeration T} T{ Default Value T}:T{ crc32 T} T{ Valid Values T}:T{ .PP crc32 .PP innodb .PP none T} .TE .sp 1 Specifies a strict checksum algorithm for validating the checksum of pages that are read\&. Options include innodb, crc32, and none\&. .sp In this example, the strict version of the innodb checksum algorithm is specified: .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-\-strict\-check=innodb \&.\&./data/test/t1\&.ibd .fi .if n \{\ .RE .\} .sp In this example, the strict version of crc32 checksum algorithm is specified: .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-c crc32 \&.\&./data/test/t1\&.ibd .fi .if n \{\ .RE .\} .sp If you do not specify the \fB\-\-strict\-check\fR option, validation is performed against non\-strict innodb, crc32 and none checksums\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-no\-check\fR, \fB\-n\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --no-check T} T{ Type T}:T{ Boolean T} T{ Default Value T}:T{ false T} .TE .sp 1 Skips checksum validation for pages that are read\&. .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-\-no\-check \&.\&./data/test/t1\&.ibd .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB\-\-pretty\fR, \fB\-p\fR .TS allbox tab(:); lB l lB l lB l. T{ Command-Line Format T}:T{ --pretty T} T{ Type T}:T{ Boolean T} T{ Default Value T}:T{ false T} .TE .sp 1 Outputs SDI data in JSON pretty print format\&. Enabled by default\&. If disabled, SDI is not human readable but is smaller in size\&. Use \-\-skip\-pretty to disable\&. .sp .if n \{\ .RS 4 .\} .nf ibd2sdi \-\-skip\-pretty \&.\&./data/test/t1\&.ibd .fi .if n \{\ .RE .\} .RE .SH "COPYRIGHT" .br .PP Copyright \(co 1997, 2024, Oracle and/or its affiliates. .PP This documentation is free software; you can redistribute it and/or modify it only under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. .PP This documentation is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .PP You should have received a copy of the GNU General Public License along with the program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or see http://www.gnu.org/licenses/. .sp .SH "NOTES" .IP " 1." 4 jq .RS 4 \%https://stedolan.github.io/jq/ .RE .IP " 2." 4 MySQL Internals documentation .RS 4 \%https://dev.mysql.com/doc/dev/mysql-server/latest/ .RE .SH "SEE ALSO" For more information, please refer to the MySQL Reference Manual, which may already be installed locally and which is also available online at http://dev.mysql.com/doc/. .SH AUTHOR Oracle Corporation (http://dev.mysql.com/).