MySQL 8.4 參考手冊  /  MySQL 資料字典  /  資料字典架構

16.1 資料字典架構

資料字典表格受到保護,只能在 MySQL 的除錯建置版本中存取。不過,MySQL 支援透過 INFORMATION_SCHEMA 表格和 SHOW 陳述式存取儲存在資料字典表格中的資料。如需構成資料字典的表格概述,請參閱資料字典表格

MySQL 系統表格仍然存在於 MySQL 8.4 中,並且可以透過在 mysql 系統資料庫上發出 SHOW TABLES 陳述式來檢視。一般而言,MySQL 資料字典表格和系統表格之間的差異在於,資料字典表格包含執行 SQL 查詢所需的中繼資料,而系統表格則包含輔助資料,例如時區和說明資訊。MySQL 系統表格和資料字典表格在升級方式上也不同。MySQL 伺服器管理資料字典升級。請參閱如何升級資料字典。升級 MySQL 系統表格需要執行完整的 MySQL 升級程序。請參閱第 3.4 節,「MySQL 升級程序升級的項目」

如何升級資料字典

新版本的 MySQL 可能包含資料字典表格定義的變更。此類變更存在於新安裝的 MySQL 版本中,但是當執行 MySQL 二進位檔的就地升級時,變更會在使用新的二進位檔重新啟動 MySQL 伺服器時套用。在啟動時,伺服器的資料字典版本會與儲存在資料字典中的版本資訊進行比較,以判斷是否應該升級資料字典表格。如果需要且支援升級,伺服器會建立具有更新定義的資料字典表格,將保存的中繼資料複製到新表格中,以原子方式將舊表格替換為新表格,並重新初始化資料字典。如果不需要升級,則啟動會繼續進行,而不更新資料字典表格。

資料字典表格的升級是一個原子操作,這表示所有資料字典表格都會根據需要進行升級,否則操作會失敗。如果升級操作失敗,伺服器啟動會因錯誤而失敗。在這種情況下,可以使用舊的伺服器二進位檔和舊的資料目錄來啟動伺服器。當再次使用新的伺服器二進位檔啟動伺服器時,會重新嘗試資料字典升級。

一般而言,在資料字典表格成功升級後,無法使用舊的伺服器二進位檔重新啟動伺服器。因此,在升級資料字典表格後,不支援將 MySQL 伺服器二進位檔降級到先前的 MySQL 版本。

使用 MySQL 的除錯建置版本檢視資料字典表格

預設情況下,資料字典表格受到保護,但是可以透過編譯具有除錯支援的 MySQL(使用 -DWITH_DEBUG=1 CMake 選項)並指定 +d,skip_dd_table_access_check debug 選項和修飾符來存取。如需編譯除錯建置版本的相關資訊,請參閱第 7.9.1.1 節,「編譯 MySQL 以進行除錯」

警告

不建議直接修改或寫入資料字典表格,這可能會導致您的 MySQL 執行個體無法運作。

在編譯具有除錯支援的 MySQL 之後,請使用此 SET 陳述式,使資料字典表格對 mysql 用戶端工作階段可見

mysql> SET SESSION debug='+d,skip_dd_table_access_check';

使用此查詢來擷取資料字典表格的清單

mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System';

使用 SHOW CREATE TABLE 來檢視資料字典表格定義。例如

mysql> SHOW CREATE TABLE mysql.catalogs\G