Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  MySQL Server Administration  /  The mysql System Schema

7.3 MySQL 系统模式

MySQL 系统模式 mysql 是 MySQL 服务器运行时所需的信息存储表。可以将其分为两个大类:数据字典表和系统表。下面讨论将这些系统表进一步细分为更小的类别。

本节的其余部分将枚举每个类别中的表,并提供跨引用以获取更多信息。数据字典表和系统表使用 InnoDB 存储引擎,除非另有指定。

mysql 系统表和数据字典表位于一个名为 mysql.ibdInnoDB 表空间文件中,位于 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.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操作日志。

  • 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语句时。

  • : 数据库中的表信息。

  • 表空间文件: 表空间文件的信息。

  • 表空间: 活跃的表空间信息。

  • 触发器: 触发器信息。

  • 视图使用情况: 视图和存储函数之间的依赖关系信息。

  • 视图表使用情况: 视图和其基础表之间的依赖关系信息。

数据字典表是不可见的。它们不能使用SELECT读取,不能出现在SHOW TABLES的输出中,不列在INFORMATION_SCHEMATABLES表中等。然而,在大多数情况下,有相应的INFORMATION_SCHEMA表可以查询。例如,您不能直接从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.indexesINFORMATION_SCHEMA表,但是INFORMATION_SCHEMA.STATISTICS包含了类似的信息。

目前,还没有完全对应于mysql.foreign_keysmysql.foreign_key_column_usageINFORMATION_SCHEMA表。标准SQL方式是使用INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSINFORMATION_SCHEMA.KEY_COLUMN_USAGE表来获取外键信息;这些表现在是foreign_keysforeign_key_column_usage和其他数据字典表的视图。

授权系统表

这些系统表包含了用户帐户和他们拥有的权限的信息。关于这些表的结构、内容和用途的详细信息,请参阅Section 8.2.3, “授权表”

MySQL 8.4 授权表是InnoDB (事务) 表。帐户管理语句是事务语句,或者对所有命名用户都生效,或者在发生错误时回滚并无效。

  • 用户: 用户帐户、全局权限和其他非权限列。

  • 全局授权: 将动态全局权限分配给用户;见静态 versus 动态权限

  • db: 数据库级别权限。

  • tables_priv: 表级别权限。

  • columns_priv: 列级别权限。

  • procs_priv: 存储过程和函数权限。

  • proxies_priv: 代理用户权限。

  • default_roles: 这个表列出激活用户连接和身份验证后默认激活的角色,或者执行SET ROLE DEFAULT语句。

  • role_edges: 这个表列出角色子图的边。

    一个给定的user表行可能引用用户账户或角色。服务器可以通过consulting role_edges表来确定行是否表示用户账户、角色或两者。

  • password_history: 密码变化信息。

对象信息系统表

这些系统表包含关于组件、可加载函数和服务器插件的信息:

Log System 表

服务器使用这些系统表来记录日志:

  • general_log: 通用查询日志表。

  • slow_log: 慢查询日志表。

日志表使用CSV存储引擎。

更多信息,请参见第7.4节,“MySQL Server Logs”

Server-Side Help System 表

这些系统表包含服务器帮助信息:

  • help_category: 帮助类别信息。

  • help_keyword: 帮助关键字。

  • help_relation: 帮助关键字和主题的映射。

  • help_topic: 帮助主题内容。

欲知更多信息,请见第7.1.17节,“Server-Side Help Support”

时区系统表

这些系统表包含时区信息:

  • time_zone: 时区ID和是否使用闰秒。

  • time_zone_leap_second: 闰秒发生时。

  • time_zone_name: 时区ID和名称之间的映射。

  • time_zone_transition, time_zone_transition_type: 时区描述。

欲知更多信息,请见第7.1.15节,“MySQL Server Time Zone Support”

复制 System 表

服务器使用这些系统表来支持复制:

所有上述表都使用InnoDB存储引擎。

优化器 System 表

这些系统表是优化器使用的:

Miscellaneous System 表

其他系统表不适用前面的类别:

  • audit_log_filter, audit_log_user: 如果安装了MySQL Enterprise Audit,这些表提供了持久存储的审核日志过滤定义和用户帐户。见Audit Log Tables.

  • 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存储引擎使用innodb_dynamic_metadata来存储快速变化的表元数据,如自增计数器值和索引树损坏标志。取代了在InnoDB系统表空间中的数据字典缓冲区表。