mysql 綱要是系統綱要。它包含 MySQL 伺服器執行時所需的資訊表格。大致分類來說,mysql 綱要包含儲存資料庫物件中繼資料的資料字典表格,以及用於其他操作用途的系統表格。以下討論會將系統表格集進一步細分為較小的類別。
本節的其餘部分會列舉每個類別中的表格,並提供額外資訊的交叉參考。除非另有說明,資料字典表格和系統表格會使用 InnoDB 儲存引擎。
mysql 系統表格和資料字典表格位於名為 mysql.ibd 的單一 InnoDB 表空間檔案中,該檔案位於 MySQL 資料目錄中。先前,這些表格是在 mysql 資料庫目錄中的個別表空間檔案中建立的。
可以為 mysql 系統綱要表空間啟用靜態資料加密。如需詳細資訊,請參閱第 17.13 節,〈InnoDB 靜態資料加密〉。
這些表格構成資料字典,其中包含有關資料庫物件的中繼資料。如需其他資訊,請參閱第 16 章,MySQL 資料字典。
catalogs:目錄資訊。character_sets:關於可用字元集的資訊。check_constraints:關於資料表上定義的CHECK限制式的資訊。請參閱第 15.1.20.6 節,〈CHECK 限制式〉。collations:每個字元集的定序資訊。column_statistics:欄值長條圖統計資訊。請參閱第 10.9.6 節,〈最佳化工具統計資訊〉。column_type_elements:關於欄位使用的類型的資訊。columns:關於資料表中欄位的資訊。dd_properties:一個識別資料字典屬性(例如其版本)的表格。伺服器會使用此資料判斷是否必須將資料字典升級至較新版本。events:關於事件排程器事件的資訊。請參閱第 27.5 節,〈使用事件排程器〉。如果啟動伺服器時使用--skip-grant-tables選項,則會停用事件排程器,且表格中註冊的事件不會執行。請參閱第 27.5.2 節,〈事件排程器設定〉。foreign_keys、foreign_key_column_usage:關於外鍵的資訊。index_column_usage:關於索引使用的欄位的資訊。index_partitions:關於索引使用的分割的資訊。index_stats:用於儲存執行ANALYZE TABLE時產生的動態索引統計資訊。indexes:關於資料表索引的資訊。innodb_ddl_log:儲存當機安全 DDL 作業的 DDL 日誌。parameter_type_elements:關於預存程序和函式參數,以及預存函式的傳回值的資訊。parameters:關於預存程序和函式的資訊。請參閱第 27.2 節,〈使用預存常式〉。resource_groups:關於資源群組的資訊。請參閱第 7.1.16 節,〈資源群組〉。routines:有關預存程序和函式的資訊。請參閱第 27.2 節,「使用預存程序」。schemata:有關綱要的資訊。在 MySQL 中,綱要即為資料庫,因此此表提供有關資料庫的資訊。st_spatial_reference_systems:有關空間資料可用空間參考系統的資訊。table_partition_values:有關表格分割區所使用值的資訊。table_partitions:有關表格所使用分割區的資訊。table_stats:有關執行ANALYZE TABLE時產生的動態表格統計資訊。tables:有關資料庫中表格的資訊。tablespace_files:有關表格空間所使用檔案的資訊。tablespaces:有關作用中表格空間的資訊。triggers:有關觸發程序的資訊。view_routine_usage:有關檢視表及其所使用的預存函式之間相依性的資訊。view_table_usage:用於追蹤檢視表及其基礎表格之間的相依性。
資料字典表是不可見的。它們無法使用 SELECT 讀取,不會出現在 SHOW TABLES 的輸出中,也不會列在 INFORMATION_SCHEMA.TABLES 表格中等等。不過,在大多數情況下,都有對應的 INFORMATION_SCHEMA 表格可以查詢。從概念上來說,INFORMATION_SCHEMA 提供了一個視圖,MySQL 通過這個視圖公開資料字典中繼資料。例如,您無法直接從 mysql.schemata 表格中選取資料。
mysql> SELECT * FROM mysql.schemata;
ERROR 3554 (HY000): Access to data dictionary table 'mysql.schemata' is rejected.相反地,請從對應的 INFORMATION_SCHEMA 表格中選取該資訊。
mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA\G
*************************** 1. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: mysql
DEFAULT_CHARACTER_SET_NAME: utf8mb4
DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci
SQL_PATH: NULL
DEFAULT_ENCRYPTION: NO
*************************** 2. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: information_schema
DEFAULT_CHARACTER_SET_NAME: utf8mb3
DEFAULT_COLLATION_NAME: utf8mb3_general_ci
SQL_PATH: NULL
DEFAULT_ENCRYPTION: NO
*************************** 3. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: performance_schema
DEFAULT_CHARACTER_SET_NAME: utf8mb4
DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci
SQL_PATH: NULL
DEFAULT_ENCRYPTION: NO
...沒有與 mysql.indexes 完全對應的資訊綱要表格,但是 INFORMATION_SCHEMA.STATISTICS 包含許多相同的資訊。
目前,沒有與 mysql.foreign_keys、mysql.foreign_key_column_usage 完全對應的 INFORMATION_SCHEMA 表格。取得外來索引鍵資訊的標準 SQL 方式是使用 INFORMATION_SCHEMA 的 REFERENTIAL_CONSTRAINTS 和 KEY_COLUMN_USAGE 表格;這些表格現在實作為 foreign_keys、foreign_key_column_usage 和其他資料字典表格的檢視表。
這些系統表格包含有關使用者帳戶及其所持有權限的授權資訊。有關這些表格的結構、內容和用途的其他資訊,請參閱第 8.2.3 節,「授權表格」。
MySQL 9.0 授權表格是 InnoDB(交易式)表格。帳戶管理陳述式是交易式的,如果發生任何錯誤,則會針對所有指定的用戶成功或回復且沒有任何影響。
user:使用者帳戶、全域權限和其他非權限欄位。global_grants:將動態全域權限指派給使用者;請參閱靜態與動態權限。db:資料庫層級權限。tables_priv:表格層級權限。columns_priv:欄位層級權限。procs_priv:預存程序和函式權限。proxies_priv:Proxy 使用者權限。default_roles:此表格列出使用者連線和驗證後或執行SET ROLE DEFAULT後要啟用的預設角色。role_edges:此表格列出角色子圖的邊緣。指定的
user表格列可能參照使用者帳戶或角色。伺服器可以藉由查閱role_edges表格,取得驗證 ID 之間關係的相關資訊,來區分列是否代表使用者帳戶、角色或兩者。password_history:有關密碼變更的資訊。
這些系統表格包含有關元件、可載入函式和伺服器端外掛程式的資訊。
component:使用INSTALL COMPONENT安裝的伺服器元件登錄。此表格中列出的任何元件會在伺服器啟動順序期間由載入器服務安裝。請參閱第 7.5.1 節,「安裝和解除安裝元件」。func:使用CREATE FUNCTION安裝的可載入函式登錄。在正常啟動順序期間,伺服器會載入此表格中註冊的函式。如果伺服器啟動時使用了--skip-grant-tables選項,則不會載入表格中註冊的函式,且無法使用。請參閱第 7.7.1 節,「安裝和解除安裝可載入函式」。注意與
mysql.func系統表格一樣,效能綱要user_defined_functions表格列出使用CREATE FUNCTION安裝的可載入函式。與mysql.func表格不同的是,user_defined_functions表格也會列出伺服器元件或外掛程式自動安裝的函式。此差異使得user_defined_functions比mysql.func更適合用於檢查已安裝哪些函式。請參閱第 29.12.22.10 節,「user_defined_functions 表格」。plugin:使用INSTALL PLUGIN安裝的伺服器端外掛程式登錄。在正常啟動順序期間,伺服器會載入此表格中註冊的外掛程式。如果伺服器啟動時使用了--skip-grant-tables選項,則不會載入表格中註冊的外掛程式,且無法使用。請參閱第 7.6.1 節,「安裝和解除安裝外掛程式」。
伺服器會使用這些系統表格來支援複寫
gtid_executed:用於儲存 GTID 值的表格。請參閱mysql.gtid_executed 表格。ndb_binlog_index:用於 NDB Cluster 複寫的二進位記錄資訊。只有在伺服器建置時具有NDBCLUSTER支援時,才會建立此表格。請參閱第 25.7.4 節,「NDB Cluster 複寫綱要和表格」。slave_master_info、slave_relay_log_info、slave_worker_info:用於在複本伺服器上儲存複寫資訊。請參閱第 19.2.4 節,「中繼記錄和複寫中繼資料儲存庫」。
剛列出的所有表格都使用 InnoDB 儲存引擎。
這些系統表格供最佳化工具使用
innodb_index_stats、innodb_table_stats:用於InnoDB持久性最佳化器統計資訊。請參閱第 17.8.10.1 節「設定持久性最佳化器統計資訊參數」。server_cost、engine_cost:最佳化器成本模型使用包含查詢執行期間所發生操作之成本估計資訊的資料表。server_cost包含一般伺服器操作的最佳化器成本估計值。engine_cost包含特定儲存引擎操作的估計值。請參閱第 10.9.5 節「最佳化器成本模型」。
其他系統資料表不屬於上述類別
audit_log_filter、audit_log_user:如果已安裝 MySQL Enterprise Audit,這些資料表會提供稽核日誌篩選定義和使用者帳戶的持久性儲存。請參閱稽核日誌資料表。firewall_group_allowlist、firewall_groups、firewall_memebership、firewall_users、firewall_whitelist:如果已安裝 MySQL Enterprise Firewall,這些資料表會提供防火牆所使用資訊的持久性儲存。請參閱第 8.4.7 節「MySQL Enterprise Firewall」。servers:由FEDERATED儲存引擎使用。請參閱第 18.8.2.2 節「使用 CREATE SERVER 建立 FEDERATED 資料表」。innodb_dynamic_metadata:由InnoDB儲存引擎使用,以儲存快速變更的資料表中繼資料,例如自動遞增計數器值和索引樹狀結構損毀旗標。取代位於InnoDB系統表格空間中的資料字典緩衝區資料表。