文档主页
MySQL 8.4 参考手册
相关文档 下载本手册

MySQL 8.4 参考手册  /  MySQL 服务器管理  /  mysql 系统数据库

7.3 mysql 系统数据库

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

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

mysql 系统表和数据字典表位于 MySQL 数据目录中名为 mysql.ibd 的单个 InnoDB 表空间文件中。以前,这些表是在 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_keysforeign_key_column_usage:有关外键的信息。

  • index_column_usage:有关索引使用的列的信息。

  • index_partitions:有关索引使用的分区的信息。

  • index_stats:用于存储执行 ANALYZE TABLE 时生成的动态索引统计信息。

  • indexes:有关表索引的信息。

  • innodb_ddl_log:存储用于崩溃安全 DDL 操作的 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
...

没有与 mysql.indexes 完全对应的 Information Schema 表,但 INFORMATION_SCHEMA.STATISTICS 包含许多相同的信息。

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

授权系统表

这些系统表包含有关用户帐户及其拥有的权限的授权信息。有关这些表的结构、内容和用途的更多信息,请参阅 第 8.2.3 节“授权表”

MySQL 8.4 授权表是 InnoDB(事务性)表。帐户管理语句是事务性的,要么对所有指定的用户名都成功,要么在发生任何错误时回滚并且不起作用。

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

  • global_grants:将动态全局权限分配给用户;请参阅 静态权限与动态权限

  • db:数据库级权限。

  • tables_priv:表级权限。

  • columns_priv:列级权限。

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

  • proxies_priv:代理用户权限。

  • default_roles:此表列出了在用户连接并进行身份验证或执行 SET ROLE DEFAULT 后要激活的默认角色。

  • role_edges:此表列出了角色子图的边。

    给定的 user 表行可能引用用户帐户或角色。服务器可以通过查阅 role_edges 表以获取有关身份验证 ID 之间关系的信息,从而区分一行表示用户帐户、角色还是两者兼而有之。

  • 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_transitiontime_zone_transition_type:时区描述。

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

复制系统表

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

上面列出的所有表都使用 InnoDB 存储引擎。

优化器系统表

这些系统表供优化器使用

其他系统表

其他系统表不属于上述类别

  • audit_log_filteraudit_log_user:如果安装了 MySQL Enterprise Audit,则这些表会提供审计日志筛选器定义和用户帐户的持久存储。请参阅 审计日志表

  • firewall_group_allowlistfirewall_groupsfirewall_memebershipfirewall_usersfirewall_whitelist:如果安装了 MySQL 企业防火墙,这些表将为防火墙使用的信息提供持久存储。请参阅“第 8.4.7 节 “MySQL 企业防火墙””

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

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