Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

7.3 MySQL 系统模式

mysql 模式是系统模式。它包含 MySQL 服务器在运行时所需的信息的表格。广泛地说,mysql 模式包含数据字典表,用于存储数据库对象元数据,以及用于其他操作目的的系统表格。以下讨论将系统表格进一步细分为较小的类别。

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

mysql 系统表格和数据字典表格驻留在 MySQL 数据目录中的单个 InnoDB 表空间文件 mysql.ibd 中。以前,这些表格是在 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时生成的动态表统计信息。

  • 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
...

目前,还没有INFORMATION_SCHEMA表与mysql.indexes完全对应,但INFORMATION_SCHEMA.STATISTICS包含了大部分相同的信息。

目前,还没有INFORMATION_SCHEMA表与mysql.foreign_keysmysql.foreign_key_column_usage完全对应。标准 SQL 方式获取外键信息是使用INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSKEY_COLUMN_USAGE表;这些表现在是foreign_keysforeign_key_column_usage等数据字典表的视图。

授权系统表

这些系统表包含用户账户和它们持有的权限信息。有关这些表的结构、内容和目的的更多信息,请见第 8.2.3 节,“授权表”

MySQL 8.3 授权表是 InnoDB(事务)表。账户管理语句是事务性的,或者对所有命名用户成功,或者回滚并且不产生任何效果,如果出现任何错误。

  • user: 用户账户,全局权限和其他非权限列。

  • global_grants: 分配给用户的动态全局权限;见 静态与动态权限

  • db: 数据库级权限。

  • tables_priv: 表级权限。

  • columns_priv: 列级权限。

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

  • proxies_priv: 代理用户权限。

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

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

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

  • password_history: 密码更改信息。

对象信息系统表

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

日志系统表

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

  • general_log:通用查询日志表。

  • slow_log:慢查询日志表。

日志表使用 CSV 存储引擎。

有关更多信息,请参阅 第 7.4 节,“MySQL 服务器日志”

服务器端帮助系统表

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

  • help_category:帮助类别信息。

  • help_keyword:与帮助主题相关的关键字。

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

  • help_topic:帮助主题内容。

有关更多信息,请参阅 第 7.1.17 节,“服务器端帮助支持”

时区系统表

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

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

  • time_zone_leap_second:闰秒发生的时间。

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

  • time_zone_transition, time_zone_transition_type:时区描述。

有关更多信息,请参阅 第 7.1.15 节,“MySQL 服务器时区支持”

复制系统表

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

所有这些表都使用 InnoDB 存储引擎。

优化器系统表

这些系统表供优化器使用:

杂项系统表

其他系统表不属于前面的类别:

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

  • firewall_group_allowlist, firewall_groups, firewall_membership, firewall_users, firewall_whitelist:如果安装了 MySQL Enterprise Firewall,则这些表提供防火墙信息的持久存储。见 第 8.4.7 节,“MySQL Enterprise 防火墙”

  • servers:由 FEDERATED 存储引擎使用。见 第 18.8.2.2 节,“使用 CREATE SERVER 创建 FEDERATED 表”

  • innodb_dynamic_metadata:由 InnoDB 存储引擎用于存储快速变化的表元数据,如自动递增计数器值和索引树损坏标志。取代了 InnoDB 系统表空间中的数据字典缓冲表。