该mysql架构是系统架构。它包含存储MySQL服务器运行时所需信息的表。广义的分类是,该 mysql架构包含存储数据库对象元数据的数据字典表和用于其他操作目的的系统表。以下讨论将系统表的集合进一步细分为较小的类别。
数据字典表
授权系统表
对象信息系统表
日志系统表
服务器端帮助系统表
时区系统表
复制系统表
优化器系统表
杂项系统表
本节的其余部分列举了每个类别中的表,并提供了交叉引用以获取更多信息。InnoDB除非另有说明,否则数据字典表和系统表将使用 存储引擎。
mysql系统表和数据字典表位于MySQL数据目录中InnoDB命名的单个表空间文件 mysql.ibd中。以前,这些表是在mysql数据库目录中的单个表空间文件中创建的。
可以为mysql系统架构表空间启用静态数据加密 。有关更多信息,请参见第15.13节“ InnoDB静态数据加密”。
数据字典表
这些表包含数据字典,其中包含有关数据库对象的元数据。有关更多信息,请参见 第14章,MySQL数据字典。
重要
数据字典是MySQL 8.0中的新增功能。与以前的MySQL版本相比,启用了数据字典的服务器在操作上存在一些常规差异。有关详细信息,请参见第14.7节“数据字典使用差异”。另外,对于从MySQL 5.7升级到MySQL 8.0的情况,升级过程与以前的MySQL版本有所不同,并且要求您通过检查特定的先决条件来验证安装的升级准备情况。有关更多信息,请参见第2.11节“升级MySQL”,尤其是第2.11.5节“为升级准备安装”。
catalogs:目录信息。
character_sets:有关可用字符集的信息。
check_constraints:有关CHECK在表上定义的约束的信息 。请参见 第13.1.20.6节“检查约束”。
collations:有关每个字符集的排序规则的信息。
column_statistics:列值的直方图统计信息。请参见 第8.9.6节“优化器统计信息”。
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:有关存储过程和功能的信息。请参见 第24.2节“使用存储的例程”。
resource_groups:有关资源组的信息。请参见第5.1.15节“资源组”
routines:有关存储过程和功能的信息。请参见 第24.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: utf8 DEFAULT_COLLATION_NAME: utf8_general_ci SQL_PATH: NULL DEFAULT_ENCRYPTION: NO
复制
没有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.11节“升级MySQL”。
对象信息系统表
这些系统表包含有关存储的程序,组件,用户定义的函数和服务器端插件的信息:
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.16节“服务器端帮助支持”。
时区系统表
这些系统表包含时区信息:
time_zone:时区ID以及它们是否使用leap秒。
time_zone_leap_second:发生leap秒时。
time_zone_name:时区ID和名称之间的映射。
time_zone_transition, time_zone_transition_type:时区说明。
有关更多信息,请参见第5.1.14节“ MySQL服务器时区支持”。
**
复制系统表**
服务器使用以下系统表来支持复制:
gtid_executed:用于存储GTID值的表。参见 mysql.gtid_executed表。
ndb_binlog_index:NDB群集复制的二进制日志信息。仅当服务器是在NDBCLUSTER支持的情况下构建的,才创建此表 。请参见 第22.6.4节“ NDB群集复制架构和表”。
slave_master_info, slave_relay_log_info, slave_worker_info:用来存放复制的信息从服务器上。请参见 第17.2.4节“复制中继和状态日志”。
刚刚列出的所有表都使用 InnoDB存储引擎。
优化器系统表
这些系统表供优化器使用:
innodb_index_stats, innodb_table_stats:用于 InnoDB持久性优化器统计信息。请参见第15.8.10.1节“配置持久性优化器统计参数”。
server_cost, engine_cost:优化程序成本模型使用的表包含有关查询执行期间发生的操作的成本估算信息。 server_cost包含用于一般服务器操作的优化程序成本估算。 engine_cost包含特定于特定存储引擎的操作的估计。请参见 第8.9.5节“优化器成本模型”。
杂项系统表
其他系统表不符合上述类别:
audit_log_filter, audit_log_user如果安装了MySQL企业审计,这些表提供的审计日志筛选器定义和用户帐户永久存储。请参阅 审核日志表。
firewall_users, firewall_whitelist如果安装了MySQL企业级防火墙,这些表格提供了防火墙使用的信息永久存储。请参见 第6.4.7节“ MySQL企业防火墙”。
servers:由 FEDERATED存储引擎使用。请参见 第16.8.2.2节“使用CREATE SERVER创建联合表”。
innodb_dynamic_metadata:由 InnoDB存储引擎用来存储快速变化的表元数据,例如自动增量计数器值和索引树损坏标志。替换驻留在InnoDB系统表空间中的数据字典缓冲区表 。