文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  MySQL 服务器管理  /  mysql 系统模式

7.3 mysql 系统模式

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

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

mysql 系统表和数据字典表驻留在名为 mysql.ibd 的单个 InnoDB 表空间文件中,该文件位于 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.5 节,“使用事件调度程序”。如果服务器使用 --skip-grant-tables 选项启动,则事件调度程序将被禁用,并且在表中注册的事件将不会运行。请参见 第 27.5.2 节,“事件调度程序配置”

  • 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: 有关存储过程和函数的信息。请参见 第 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 表。使用 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTSKEY_COLUMN_USAGE 表是获取外键信息的标准 SQL 方法;这些表现在被实现为 foreign_keysforeign_key_column_usage 和其他数据字典表的视图。

授权系统表

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

MySQL 9.0 授权表是 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_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_dynamic_metadata: 由 InnoDB 存储引擎使用来存储快速变化的表元数据,例如自动递增计数器值和索引树损坏标志。取代了位于 InnoDB 系统表空间中的数据字典缓冲表。