'\" 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/).