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系统表空间中的数据字典缓冲区。学什么技术好网