資料字典表格受到保護,只能在 MySQL 的偵錯版本中存取。然而,MySQL 支援透過 INFORMATION_SCHEMA
表格和 SHOW
陳述式存取儲存在資料字典表格中的資料。如需構成資料字典的表格概述,請參閱資料字典表格。
MySQL 系統表格在 MySQL 9.0 中仍然存在,可以透過在 mysql
系統資料庫上發出 SHOW TABLES
陳述式來檢視。一般來說,MySQL 資料字典表格和系統表格之間的區別在於,資料字典表格包含執行 SQL 查詢所需的中繼資料,而系統表格包含諸如時區和說明資訊等輔助資料。MySQL 系統表格和資料字典表格在升級方式上也不同。MySQL 伺服器管理資料字典升級。請參閱如何升級資料字典。升級 MySQL 系統表格需要執行完整的 MySQL 升級程序。請參閱第 3.4 節,「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