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, -h ┌──────────────┬─────────┐ │قالب خط فرمان │ --help │ ├──────────────┼─────────┤ │نوع │ Boolean │ ├──────────────┼─────────┤ │مقدار پیش‌فرض │ false │ └──────────────┴─────────┘ یک پیام راهنما نمایش داده و خارج می‌شود. به عنوان مثال: Usage: ./ibd2sdi [-v] [-c ] [-d ] [-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, -v ┌──────────────┬───────────┐ │قالب خط فرمان │ --version │ ├──────────────┼───────────┤ │نوع │ Boolean │ ├──────────────┼───────────┤ │مقدار پیش‌فرض │ false │ └──────────────┴───────────┘ اطلاعات نسخه را نمایش داده و خارج می‌شود. به عنوان مثال: ibd2sdi Ver 9.7.0 for Linux on x86_64 (Source distribution) • --debug[=debug_options], -# [debug_options] ┌──────────────┬─────────────────┐ │قالب خط فرمان │ --debug=options │ ├──────────────┼─────────────────┤ │نوع │ String │ ├──────────────┼─────────────────┤ │مقدار پیش‌فرض │ [none] │ └──────────────┴─────────────────┘ یک گزارش اشکال‌زدایی چاپ می‌کند. برای گزینه‌های اشکال‌زدایی، به بخش 7.9.4، “بسته DBUG” مراجعه کنید. ibd2sdi --debug=d:t /tmp/ibd2sdi.trace این گزینه تنها زمانی در دسترس است که MySQL با استفاده از WITH_DEBUG ساخته شده باشد. باینری‌های رسمی منتشر شده MySQL ارائه‌شده توسط Oracle با این گزینه ساخته نشده‌اند. • --dump-file=, -d ┌──────────────┬──────────────────┐ │قالب خط فرمان │ --dump-file=file │ ├──────────────┼──────────────────┤ │نوع │ File name │ ├──────────────┼──────────────────┤ │مقدار پیش‌فرض │ [none] │ └──────────────┴──────────────────┘ اطلاعات دیکشنری سریالی‌شده (SDI) را در پرونده دامپ مشخص‌شده می‌ریزد. اگر پرونده دامپ مشخص نشود، SDI فضای جدول در stdout نوشته می‌شود. ibd2sdi --dump-file=file_name ../data/test/t1.ibd • --skip-data, -s ┌──────────────┬─────────────┐ │قالب خط فرمان │ --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=#, -i # ┌──────────────┬─────────┐ │قالب خط فرمان │ --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=#, -t # ┌──────────────┬─────────────┐ │قالب خط فرمان │ --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, -c ┌──────────────┬──────────────────────────┐ │قالب خط فرمان │ --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, -n ┌──────────────┬────────────┐ │قالب خط فرمان │ --no-check │ ├──────────────┼────────────┤ │نوع │ Boolean │ ├──────────────┼────────────┤ │مقدار پیش‌فرض │ false │ └──────────────┴────────────┘ از اعتبارسنجی چکسام برای صفحاتی که خوانده می‌شوند صرف‌نظر می‌کند. ibd2sdi --no-check ../data/test/t1.ibd • --pretty, -p ┌──────────────┬──────────┐ │قالب خط فرمان │ --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) https://dev.mysql.com/doc/refman/8.4/en/glossary.html#glos_serialized_dictionary_information 2. فضای جدول سیستم (system tablespace) https://dev.mysql.com/doc/refman/8.4/en/glossary.html#glos_system_tablespace 3. jq https://stedolan.github.io/jq 4. مستندات ساختار داخلی MySQL (MySQL Internals documentation) https://dev.mysql.com/doc/dev/mysql-server/latest همچنین ببینید (SEE ALSO) برای اطلاعات بیشتر، لطفاً به راهنمای مرجع MySQL مراجعه کنید، که ممکن است قبلاً به صورت محلی نصب شده باشد و همچنین به صورت برخط در http://dev.mysql.com/doc در دسترس است. نویسنده (AUTHOR) شرکت Oracle (http://dev.mysql.com). MySQL 9.7 03/24/2026 IBD2SDI(1)