| IBD2SDI(1) | MySQL Database System | IBD2SDI(1) |
نام (NAME)
ibd2sdi - ابزار InnoDB برای استخراج اطلاعات دیکشنری سریالیشده (SDI) از فضای جدول InnoDB
خلاصه دستور (SYNOPSIS)
ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
توضیحات (DESCRIPTION)
دستور ibd2sdi ابزاری برای استخراج اطلاعات دیکشنری سریالیشده[1] (SDI) از پروندههای فضای جدول InnoDB است. دادههای SDI در تمامی پروندههای پایدار فضای جدول InnoDB حضور دارند.
دستور ibd2sdi میتواند روی پروندههای فضای جدول file-per-table (پروندههای *.ibd)، پروندههای فضای جدول عمومی (پروندههای *.ibd)، پروندههای فضای جدول سیستم[2] (پروندههای *ibdata) و فضای جدول دیکشنری داده (mysql.ibd) اجرا شود. استفاده از آن برای فضاهای جدول موقت یا فضاهای جدول undo پشتیبانی نمیشود.
دستور ibd2sdi میتواند در زمان اجرا یا در حالی که سرور آفلاین است استفاده شود. هنگام عملیات DDL، عملیات ROLLBACK و عملیات پاکسازی (purge) لاگ undo مرتبط با SDI، ممکن است بازه زمانی کوتاهی وجود داشته باشد که در آن ibd2sdi در خواندن دادههای SDI ذخیرهشده در فضای جدول با شکست مواجه شود.
دستور ibd2sdi یک خواندن ثبتنشده (uncommitted read) از SDI را از فضای جدول مشخصشده انجام میدهد. به لاگهای redo و لاگهای undo دسترسی پیدا نمیکند.
ابزار ibd2sdi را به این صورت فراخوانی کنید:
ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
دستور ibd2sdi از فضاهای جدول چندپروندهای مانند فضای جدول سیستم InnoDB پشتیبانی میکند، اما نمیتواند همزمان روی بیش از یک فضای جدول اجرا شود. برای فضاهای جدول چندپروندهای، هر پرونده را مشخص کنید:
ibd2sdi ibdata1 ibdata2
پروندههای یک فضای جدول چندپروندهای باید به ترتیب صعودی شماره صفحه مشخص شوند. اگر دو پرونده متوالی دارای شناسه فضای یکسان باشند، پرونده بعدی باید با شماره آخرین صفحه پرونده قبلی + ۱ آغاز شود.
دستور ibd2sdi خروجی SDI (شامل فیلدهای id ،type و data) را در قالب JSON تولید میکند. گزینههای ibd2sdi
دستور ibd2sdi از گزینههای زیر پشتیبانی میکند:
| قالب خط فرمان | --help |
| نوع | Boolean |
| مقدار پیشفرض | false |
یک پیام راهنما نمایش داده و خارج میشود. به عنوان مثال:
Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames]
See http://dev.mysql.com/doc/refman/9.7/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/9.7/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 |
| نوع | Boolean |
| مقدار پیشفرض | false |
اطلاعات نسخه را نمایش داده و خارج میشود. به عنوان مثال:
ibd2sdi Ver 9.7.0 for Linux on x86_64 (Source distribution)
| قالب خط فرمان | --debug=options |
| نوع | String |
| مقدار پیشفرض | [none] |
یک گزارش اشکالزدایی چاپ میکند. برای گزینههای اشکالزدایی، به بخش 7.9.4، “بسته DBUG” مراجعه کنید.
ibd2sdi --debug=d:t /tmp/ibd2sdi.trace
این گزینه تنها زمانی در دسترس است که MySQL با استفاده از WITH_DEBUG ساخته شده باشد. باینریهای رسمی منتشر شده MySQL ارائهشده توسط Oracle با این گزینه ساخته نشدهاند.
| قالب خط فرمان | --dump-file=file |
| نوع | File name |
| مقدار پیشفرض | [none] |
اطلاعات دیکشنری سریالیشده (SDI) را در پرونده دامپ مشخصشده میریزد. اگر پرونده دامپ مشخص نشود، SDI فضای جدول در stdout نوشته میشود.
ibd2sdi --dump-file=file_name ../data/test/t1.ibd
| قالب خط فرمان | --skip-data |
| نوع | Boolean |
| مقدار پیشفرض | false |
از بازیابی مقادیر فیلد data از اطلاعات دیکشنری سریالیشده (SDI) صرفنظر کرده و تنها مقادیر فیلدهای id و type را که کلیدهای اصلی رکوردهای SDI هستند، بازیابی میکند.
$> ibd2sdi --skip-data ../data/test/t1.ibd
["ibd2sdi"
,
{
"type": 1,
"id": 330
}
,
{
"type": 2,
"id": 7
}
]
| قالب خط فرمان | --id=# |
| نوع | Integer |
| مقدار پیشفرض | 0 |
اطلاعات دیکشنری سریالیشده (SDI) منطبق با شناسه شیء (object id) جدول یا فضای جدول مشخصشده را بازیابی میکند. شناسه شیء برای هر نوع شیء منحصربهفرد است. شناسههای شیء جدول و فضای جدول همچنین در ستون id جدولهای دیکشنری داده mysql.tables و mysql.tablespace یافت میشوند. برای اطلاعات بیشتر درباره جدولهای دیکشنری داده، به بخش 16.1، “طرحواره دیکشنری داده (Data Dictionary Schema)” مراجعه کنید.
$> 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=# |
| نوع | Enumeration |
| مقدار پیشفرض | 0 |
| مقادیر معتبر | 1 2 |
اطلاعات دیکشنری سریالیشده (SDI) منطبق با نوع شیء مشخصشده را بازیابی میکند. اطلاعات SDI برای اشیاء جدول (type=1) و فضای جدول (type=2) ارائه میشود.
این مثال خروجی مربوط به یک فضای جدول ts1 در پایگاه داده test را نشان میدهد:
$> 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، ممکن است در خروجی ibd2sdi برای یک ستون جدول معین، حتی اگر با استفاده از DEFAULT تعریف نشده باشد، مقدار پیشفرض وجود داشته و غیرخالی باشد. دو جدول ایجادشده با دستورهای زیر را در پایگاه دادهای به نام i در نظر بگیرید:
CREATE TABLE t1 (c VARCHAR(16) NOT NULL); CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila");
با استفاده از ibd2sdi، میتوان مشاهده کرد که default_value برای ستون c غیرخالی است و در واقع در هر دو جدول با بایتهای خالی تا طول مشخص پر (pad) شده است، مانند این:
$> 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="
بررسی خروجی ibd2sdi با استفاده از یک ابزار آگاه از JSON مانند jq[3]، همانطور که در اینجا نشان داده شده است، ممکن است آسانتر باشد:
$> 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[4] مراجعه کنید.
| قالب خط فرمان | --strict-check=algorithm |
| نوع | Enumeration |
| مقدار پیشفرض | crc32 |
| مقادیر معتبر | crc32 innodb none |
یک الگوریتم بررسی مجموع مقابلهای سختگیرانه (strict checksum) را برای اعتبارسنجی چکسام صفحاتی که خوانده میشوند، مشخص میکند. گزینهها شامل innodb، crc32 و none هستند.
در این مثال، نسخه سختگیرانه الگوریتم چکسام innodb مشخص شده است:
ibd2sdi --strict-check=innodb ../data/test/t1.ibd
در این مثال، نسخه سختگیرانه الگوریتم چکسام crc32 مشخص شده است:
ibd2sdi -c crc32 ../data/test/t1.ibd
اگر گزینه --strict-check را مشخص نکنید، اعتبارسنجی در برابر چکسامهای غیر سختگیرانه innodb، crc32 و none انجام میشود.
| قالب خط فرمان | --no-check |
| نوع | Boolean |
| مقدار پیشفرض | false |
از اعتبارسنجی چکسام برای صفحاتی که خوانده میشوند صرفنظر میکند.
ibd2sdi --no-check ../data/test/t1.ibd
| قالب خط فرمان | --pretty |
| نوع | Boolean |
| مقدار پیشفرض | false |
دادههای SDI را در قالب ساختاریافته و خوانای JSON (pretty print) خروجی میدهد. بهطور پیشفرض فعال است. اگر غیرفعال شود، SDI برای انسان خوانا نخواهد بود اما حجم کمتری خواهد داشت. برای غیرفعال کردن از --skip-pretty استفاده کنید.
ibd2sdi --skip-pretty ../data/test/t1.ibd
حق نشر (COPYRIGHT)
حق نشر © 1997, 2026, Oracle و/یا شرکتهای وابسته به آن.
این مستندات یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همانطور که توسط بنیاد نرمافزارهای آزاد منتشر شده است؛ نسخه ۲ مجوز، بازتوزیع کرده و/یا تغییر دهید.
این مستندات به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت فروش یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید.
شما باید همراه با این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به بنیاد نرمافزارهای آزاد با نشانی Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA بنویسید یا به http://www.gnu.org/licenses مراجعه کنید.
نکات (NOTES)
- 1.
- اطلاعات دیکشنری سریالیشده (serialized dictionary information)
- 2.
- فضای جدول سیستم (system tablespace)
- 3.
- jq
- 4.
- مستندات ساختار داخلی MySQL (MySQL Internals documentation)
همچنین ببینید (SEE ALSO)
برای اطلاعات بیشتر، لطفاً به راهنمای مرجع MySQL مراجعه کنید، که ممکن است قبلاً به صورت محلی نصب شده باشد و همچنین به صورت برخط در http://dev.mysql.com/doc در دسترس است.
نویسنده (AUTHOR)
شرکت Oracle (http://dev.mysql.com).
| 03/24/2026 | MySQL 9.7 |