mysql
綱要是系統綱要。它包含 MySQL 伺服器執行時所需的資訊表格。廣泛的分類是 mysql
綱要包含儲存資料庫物件中繼資料的資料字典表格,以及用於其他操作目的的系統表格。以下討論進一步將系統表格集細分為較小的類別。
本節的其餘部分列舉每個類別中的表格,並提供額外資訊的交叉參考。除非另有說明,資料字典表格和系統表格使用 InnoDB
儲存引擎。
mysql
系統表格和資料字典表格位於 MySQL 資料目錄中名為 mysql.ibd
的單一 InnoDB
表空間檔案中。先前,這些表格是在 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.4 節,「使用事件排程器」。如果伺服器在啟動時帶有--skip-grant-tables
選項,則會停用事件排程器,且表格中註冊的事件不會執行。請參閱 第 27.4.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 表格,但 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 8.4 授權表格是 InnoDB
(交易式)表格。帳戶管理陳述式是交易式的,如果發生任何錯誤,它們會對所有指定使用者成功,或回滾且無效。
user
:使用者帳戶、全域權限和其他非權限欄位。global_grants
:將動態全域權限指派給使用者;請參閱靜態與動態權限。db
:資料庫層級的權限。tables_priv
:表格層級的權限。columns_priv
:欄位層級的權限。procs_priv
:儲存程序和函數的權限。proxies_priv
:代理使用者權限。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
系統表格空間中的資料字典緩衝區表格。