27,MySQL 8.0參考手冊 5.3 mysql系統資料庫
阿新 • • 發佈:2019-01-07
5.3 mysql系統資料庫
該mysql資料庫是系統資料庫。它包含儲存MySQL伺服器執行時所需的資訊的表。廣泛的分類是 mysql資料庫包含儲存資料庫物件元資料的資料字典表以及用於其他操作目的的系統表。以下討論進一步將系統表集合細分為更小的類別。
資料字典表
授予系統表
物件資訊系統表
日誌系統表
伺服器端幫助系統表
時區系統表
複製系統表
優化器系統表
雜項系統表
本節的其餘部分列舉了每個類別中的表格,其中包含交叉參考以獲取更多資訊。資料字典表和系統表使用 InnoDB儲存引擎,除非另有說明。
mysql系統表和資料字典表位於MySQL資料目錄中InnoDB命名的單個表空間檔案 mysql.ibd中。以前,這些表是在mysql資料庫目錄中的單個表空間檔案中建立的。
資料字典表
這些表格包含資料字典,其中包含有關資料庫物件的元資料。
重要
資料字典在MySQL 8.0中是新的。與以前的MySQL版本相比,啟用資料字典的伺服器需要一些常規操作差異。有關詳細資訊,請參見第14.7節“資料字典使用差異”。此外,對於從MySQL 5.7升級到MySQL 8.0,升級過程與之前的MySQL版本有所不同,並要求您通過檢查特定先決條件來驗證安裝的升級準備情況。有關更多資訊,請參見第2.10.1節“升級MySQL”,特別是 驗證升級MySQL 5.7安裝的先決條件。
catalogs:目錄資訊。
character_sets:有關可用字符集的資訊。
collations:有關每個字符集的排序規則的資訊。
column_statistics:列值的直方圖統計。
column_type_elements:有關列使用的型別的資訊。
columns:關於表格中列的資訊。
dd_properties:標識資料字典屬性(例如其版本)的表。伺服器使用它來確定資料字典是否必須升級到更新的版本。
events:有關事件計劃程式事件的資訊。請參見第24.4節“使用事件排程程式”。伺服器在其啟動序列期間載入此表中列出的事件,除非以該--skip-grant-tables選項開始 。
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:有關儲存過程和函式的資訊。
resource_groups:關於資源組的資訊。
routines:有關儲存過程和函式的資訊。
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
*************************** 2. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: information_schema
DEFAULT_CHARACTER_SET_NAME: utf8
DEFAULT_COLLATION_NAME: utf8_general_ci
SQL_PATH: NULL
...
沒有INFORMATION_SCHEMA完全對應的表格mysql.indexes,但 INFORMATION_SCHEMA.STATISTICS 包含許多相同的資訊。
到目前為止,還沒有任何INFORMATION_SCHEMA 表格完全符合 mysql.foreign_keys, mysql.foreign_key_column_usage。獲取外來鍵資訊的標準SQL方法是使用 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS和 KEY_COLUMN_USAGE表; 這些表現在實現為在意見 foreign_keys, foreign_key_column_usage和其它資料字典的表。
MySQL 8.0之前的一些系統表已被資料字典表所取代,並且不再存在於mysql系統資料庫中:
該events資料字典表取代了event從MySQL 8.0之前的表。
該parameters和 routines資料字典表一起取代的proc從MySQL 8.0前表。
授予系統表
這些系統表包含有關使用者帳戶的授權資訊和他們擁有的許可權。有關這些表的結構,內容和用途的更多資訊,請參見第6.2.3節“授予表”。
從MySQL 8.0開始,授權表是InnoDB (事務)表。以前,這些是 MyISAM(非事務性)表。授權表儲存引擎的變化是MySQL 8.0隨之發生的變化和帳戶管理語句(如CREATE USER和) 的行為的基礎GRANT。以前,名為多個使用者的帳戶管理宣告可能會成功用於某些使用者,並且會失敗。這些語句現在是事務性的,並且對於所有指定的使用者都成功或者回滾並且如果發生任何錯誤則不起作用。
注意
如果MySQL從舊版升級但授權表尚未升級MyISAM 到InnoDB,則伺服器將其視為只讀,帳戶管理語句會產生錯誤。有關升級說明,請參見第2.10.1節“升級MySQL”。
user:使用者帳戶,全域性許可權和其他非特權列。
global_grants:為使用者分配動態全域性特權; 請參見 第6.2.2節“靜態與動態特權”。
db:資料庫級別的許可權。
tables_priv:表級特權。
columns_priv:列級許可權。
procs_priv:儲存過程和功能特權。
proxies_priv:代理使用者許可權。
default_roles:此表列出了使用者連線並驗證或執行後要啟用的預設角色 SET ROLE DEFAULT。
role_edges:該表格列出角色子圖的邊緣。
給定的user表格行可能會引用使用者帳戶或角色。伺服器可以通過查詢role_edges表以瞭解關於認證ID之間的關係的資訊,從而區分行是代表使用者帳戶,角色還是兩者。
password_history:有關密碼更改的資訊。
物件資訊系統表
這些系統表包含有關儲存的程式,元件,使用者定義的函式和伺服器端外掛的資訊:
component:伺服器元件的登錄檔。伺服器啟動順序期間,此表中列出的任何元件都由載入程式服務安裝。請參見第5.5節“MySQL伺服器元件”。
func:有關使用者定義函式(UDF)的資訊。請參見第29.4節“向MySQL新增新功能”。伺服器在其啟動序列期間載入此表中列出的UDF,除非以該--skip-grant-tables選項開始 。
plugin:關於伺服器端外掛的資訊。請參見第5.6.1節“安裝和解除安裝外掛”和 第29.2節“MySQL外掛API”。伺服器在其啟動序列期間載入此表中列出的外掛,除非以該--skip-grant-tables選項開始 。
日誌系統表
伺服器使用這些系統表進行日誌記錄:
general_log:一般查詢日誌表。
slow_log:慢查詢日誌表。
日誌表使用CSV儲存引擎。
有關更多資訊,請參見第5.4節“MySQL伺服器日誌”。
伺服器端幫助系統表
這些系統表包含伺服器端幫助資訊:
help_category:關於幫助類別的資訊。
help_keyword:與幫助主題相關的關鍵字。
help_relation:幫助關鍵字和主題之間的對映。
help_topic:幫助主題內容。
有關更多資訊,請參見 第5.1.11節“伺服器端幫助”。
時區系統表
這些系統表包含時區資訊:
time_zone:時區標識以及是否使用閏秒。
time_zone_leap_second:發生閏秒時。
time_zone_name:時區標識和名稱之間的對映。
time_zone_transition, time_zone_transition_type:時區描述。
有關更多資訊,請參見第5.1.10節“MySQL伺服器時區支援”。
複製系統表
伺服器使用這些系統表來支援複製:
gtid_executed:用於儲存GTID值的表格。請參閱 mysql.gtid_executed表。
ndb_binlog_index:MySQL Cluster複製的二進位制日誌資訊。請參閱 NDB群集複製架構和表。
該ndb_binlog_index表使用 MyISAM儲存引擎。它僅在伺服器使用內建的情況下建立NDB。
slave_master_info, slave_relay_log_info, slave_worker_info:用於儲存從伺服器上覆制資訊。請參見 第18.2.4節“複製中繼和狀態日誌”。
優化器系統表
這些系統表供優化器使用:
innodb_index_stats, innodb_table_stats:用於 InnoDB永續性優化器統計資訊。請參見第15.6.11.1節“配置持久優化器統計引數”。
server_cost, engine_cost:優化器成本模型使用包含有關在查詢執行期間發生的操作的成本估算資訊的表。 server_cost包含一般伺服器操作的優化器成本估算。 engine_cost包含特定於特定儲存引擎的操作的估計。請參見 第8.9.5節“優化器成本模型”。
雜項系統表
其他系統表不符合上述類別:
servers:由 FEDERATED儲存引擎使用。
該mysql資料庫是系統資料庫。它包含儲存MySQL伺服器執行時所需的資訊的表。廣泛的分類是 mysql資料庫包含儲存資料庫物件元資料的資料字典表以及用於其他操作目的的系統表。以下討論進一步將系統表集合細分為更小的類別。
資料字典表
授予系統表
物件資訊系統表
日誌系統表
伺服器端幫助系統表
時區系統表
複製系統表
優化器系統表
雜項系統表
本節的其餘部分列舉了每個類別中的表格,其中包含交叉參考以獲取更多資訊。資料字典表和系統表使用 InnoDB儲存引擎,除非另有說明。
mysql系統表和資料字典表位於MySQL資料目錄中InnoDB命名的單個表空間檔案 mysql.ibd中。以前,這些表是在mysql資料庫目錄中的單個表空間檔案中建立的。
資料字典表
這些表格包含資料字典,其中包含有關資料庫物件的元資料。
重要
資料字典在MySQL 8.0中是新的。與以前的MySQL版本相比,啟用資料字典的伺服器需要一些常規操作差異。有關詳細資訊,請參見第14.7節“資料字典使用差異”。此外,對於從MySQL 5.7升級到MySQL 8.0,升級過程與之前的MySQL版本有所不同,並要求您通過檢查特定先決條件來驗證安裝的升級準備情況。有關更多資訊,請參見第2.10.1節“升級MySQL”,特別是 驗證升級MySQL 5.7安裝的先決條件。
catalogs:目錄資訊。
character_sets:有關可用字符集的資訊。
collations:有關每個字符集的排序規則的資訊。
column_statistics:列值的直方圖統計。
column_type_elements:有關列使用的型別的資訊。
columns:關於表格中列的資訊。
dd_properties:標識資料字典屬性(例如其版本)的表。伺服器使用它來確定資料字典是否必須升級到更新的版本。
events:有關事件計劃程式事件的資訊。請參見第24.4節“使用事件排程程式”。伺服器在其啟動序列期間載入此表中列出的事件,除非以該--skip-grant-tables選項開始 。
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:有關儲存過程和函式的資訊。
resource_groups:關於資源組的資訊。
routines:有關儲存過程和函式的資訊。
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
*************************** 2. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: information_schema
DEFAULT_CHARACTER_SET_NAME: utf8
DEFAULT_COLLATION_NAME: utf8_general_ci
SQL_PATH: NULL
...
沒有INFORMATION_SCHEMA完全對應的表格mysql.indexes,但 INFORMATION_SCHEMA.STATISTICS 包含許多相同的資訊。
到目前為止,還沒有任何INFORMATION_SCHEMA 表格完全符合 mysql.foreign_keys, mysql.foreign_key_column_usage。獲取外來鍵資訊的標準SQL方法是使用 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS和 KEY_COLUMN_USAGE表; 這些表現在實現為在意見 foreign_keys, foreign_key_column_usage和其它資料字典的表。
MySQL 8.0之前的一些系統表已被資料字典表所取代,並且不再存在於mysql系統資料庫中:
該events資料字典表取代了event從MySQL 8.0之前的表。
該parameters和 routines資料字典表一起取代的proc從MySQL 8.0前表。
授予系統表
這些系統表包含有關使用者帳戶的授權資訊和他們擁有的許可權。有關這些表的結構,內容和用途的更多資訊,請參見第6.2.3節“授予表”。
從MySQL 8.0開始,授權表是InnoDB (事務)表。以前,這些是 MyISAM(非事務性)表。授權表儲存引擎的變化是MySQL 8.0隨之發生的變化和帳戶管理語句(如CREATE USER和) 的行為的基礎GRANT。以前,名為多個使用者的帳戶管理宣告可能會成功用於某些使用者,並且會失敗。這些語句現在是事務性的,並且對於所有指定的使用者都成功或者回滾並且如果發生任何錯誤則不起作用。
注意
如果MySQL從舊版升級但授權表尚未升級MyISAM 到InnoDB,則伺服器將其視為只讀,帳戶管理語句會產生錯誤。有關升級說明,請參見第2.10.1節“升級MySQL”。
user:使用者帳戶,全域性許可權和其他非特權列。
global_grants:為使用者分配動態全域性特權; 請參見 第6.2.2節“靜態與動態特權”。
db:資料庫級別的許可權。
tables_priv:表級特權。
columns_priv:列級許可權。
procs_priv:儲存過程和功能特權。
proxies_priv:代理使用者許可權。
default_roles:此表列出了使用者連線並驗證或執行後要啟用的預設角色 SET ROLE DEFAULT。
role_edges:該表格列出角色子圖的邊緣。
給定的user表格行可能會引用使用者帳戶或角色。伺服器可以通過查詢role_edges表以瞭解關於認證ID之間的關係的資訊,從而區分行是代表使用者帳戶,角色還是兩者。
password_history:有關密碼更改的資訊。
物件資訊系統表
這些系統表包含有關儲存的程式,元件,使用者定義的函式和伺服器端外掛的資訊:
component:伺服器元件的登錄檔。伺服器啟動順序期間,此表中列出的任何元件都由載入程式服務安裝。請參見第5.5節“MySQL伺服器元件”。
func:有關使用者定義函式(UDF)的資訊。請參見第29.4節“向MySQL新增新功能”。伺服器在其啟動序列期間載入此表中列出的UDF,除非以該--skip-grant-tables選項開始 。
plugin:關於伺服器端外掛的資訊。請參見第5.6.1節“安裝和解除安裝外掛”和 第29.2節“MySQL外掛API”。伺服器在其啟動序列期間載入此表中列出的外掛,除非以該--skip-grant-tables選項開始 。
日誌系統表
伺服器使用這些系統表進行日誌記錄:
general_log:一般查詢日誌表。
slow_log:慢查詢日誌表。
日誌表使用CSV儲存引擎。
有關更多資訊,請參見第5.4節“MySQL伺服器日誌”。
伺服器端幫助系統表
這些系統表包含伺服器端幫助資訊:
help_category:關於幫助類別的資訊。
help_keyword:與幫助主題相關的關鍵字。
help_relation:幫助關鍵字和主題之間的對映。
help_topic:幫助主題內容。
有關更多資訊,請參見 第5.1.11節“伺服器端幫助”。
時區系統表
這些系統表包含時區資訊:
time_zone:時區標識以及是否使用閏秒。
time_zone_leap_second:發生閏秒時。
time_zone_name:時區標識和名稱之間的對映。
time_zone_transition, time_zone_transition_type:時區描述。
有關更多資訊,請參見第5.1.10節“MySQL伺服器時區支援”。
複製系統表
伺服器使用這些系統表來支援複製:
gtid_executed:用於儲存GTID值的表格。請參閱 mysql.gtid_executed表。
ndb_binlog_index:MySQL Cluster複製的二進位制日誌資訊。請參閱 NDB群集複製架構和表。
該ndb_binlog_index表使用 MyISAM儲存引擎。它僅在伺服器使用內建的情況下建立NDB。
slave_master_info, slave_relay_log_info, slave_worker_info:用於儲存從伺服器上覆制資訊。請參見 第18.2.4節“複製中繼和狀態日誌”。
優化器系統表
這些系統表供優化器使用:
innodb_index_stats, innodb_table_stats:用於 InnoDB永續性優化器統計資訊。請參見第15.6.11.1節“配置持久優化器統計引數”。
server_cost, engine_cost:優化器成本模型使用包含有關在查詢執行期間發生的操作的成本估算資訊的表。 server_cost包含一般伺服器操作的優化器成本估算。 engine_cost包含特定於特定儲存引擎的操作的估計。請參見 第8.9.5節“優化器成本模型”。
雜項系統表
其他系統表不符合上述類別:
servers:由 FEDERATED儲存引擎使用。
innodb_dynamic_metadata:由 InnoDB儲存引擎用於儲存快速變化的表格元資料,如自動遞增計數器值和索引樹破壞標誌。替換駐留在InnoDB系統表空間中的資料字典緩衝區。 學什麼技術好網