數據字典(Data Dictionary)中存儲了諸多數據庫的元數據信息如圖1所示,包括基本Database, table, index, column, function, trigger, procedure,privilege等;以及與存儲引擎相關的元數據,如InnoDB的tablespace, table_id, index_id等。
MySQL8開始刪除了原來的frm文件,並采用 Serialized Dictionary Information (SDI), 是MySQL8.0重新設計數據詞典后引入的新產物,並開始已經統一使用InnoDB存儲引擎來存儲表的元數據信息。SDI信息源記錄保存在ibd文件中。 如何可以查看表結構信息,官方提供了一個工具叫做ibd2sdi,在安裝目錄下可以找到,可以離線的將ibd文件中的冗余存儲的sdi信息提取出來,並以json的格式輸出到終端。
ibd2sdi /var/lib/mysql/mysql.ibd
MySQL8不僅將元數據信息存儲在數據字典表中,同時也冗余存儲了一份在SDI中。對於非InnoDB表,SDI數據在后綴為.sdi的文件中,而對於innodb,SDI數據則直接存儲與ibd中,如以下例子所示:
b2_360.sdi為json格式
cat b2_360.sdi | python -m json.tool