MySQL 8.4 Reference Manual  /  MySQL Data Dictionary  /  Data Dictionary Schema

16.1 数据字典架构

数据字典表格受保护,仅在调试版本的 MySQL 中可以访问。然而,MySQL 支持通过 INFORMATION_SCHEMA 表和 SHOW 语句访问数据字典表格中的数据。要了解数据字典的组成,请查看数据字典表格

MySQL 系统表格在 MySQL 8.4 中仍然存在,可以通过在 mysql 系统数据库上执行SHOW TABLES 语句来查看。一般来说,MySQL 数据字典表格和系统表格的区别在于数据字典表格包含执行 SQL 查询所需的元数据,而系统表格包含辅助数据,如时区和帮助信息。MySQL 系统表格和数据字典表格也不同于升级方式。 MySQL 服务器管理数据字典升级。请查看如何升级数据字典。升级 MySQL 系统表格需要运行完整的 MySQL 升级过程。请查看第 3.4 节,“MySQL 升级过程升级了什么”

MySQL 的新版本可能包括数据字典表定义的变化。这些变化在新安装的 MySQL 版本中存在,但是在使用新的 MySQL 二进制文件进行升级时,变化将在重启 MySQL 服务器时应用。在启动时,服务器将比较数据字典的版本信息与存储在数据字典中的版本信息,以确定是否需要升级数据字典表。如果升级是必要的且支持的,服务器将创建更新定义的数据字典表,将持久化元数据复制到新表中,原子地替换老表,并重新初始化数据字典。如果升级不是必要的,启动继续不更新数据字典表。

数据字典表的升级是一个原子操作,这意味着所有需要升级的数据字典表都将被升级或操作失败。 如果升级操作失败,服务器启动失败并出现错误。在这种情况下,可以使用老的服务器二进制文件与老数据目录启动服务器。当再次使用新的服务器二进制文件启动服务器时,数据字典升级将重新尝试。

总之,在数据字典表成功升级后,不能使用老的服务器二进制文件重启服务器。因此,降级 MySQL 服务器二进制文件到之前的 MySQL 版本不支持。

使用调试版 MySQL 查看数据字典表

数据字典表默认被保护,但可以通过编译 MySQL 时使用 -DWITH_DEBUG=1 CMake 选项和指定 +d,skip_dd_table_access_check debug 选项和修饰符来访问。关于编译调试版本的信息,请参阅第7.9.1.1节,“编译 MySQL 调试”

Warning

直接修改或写入数据字典表不推荐,可能使您的 MySQL 实例不可用。

在编译 MySQL 时启用调试支持后,使用以下 SET 语句使数据字典表对mysql 客户端会话可见:

mysql> SET SESSION debug='+d,skip_dd_table_access_check';

使用以下查询来检索数据字典表列表:

mysql> SELECT name, schema_id, hidden, type FROM mysql.tables where schema_id=1 AND hidden='System';

使用 SHOW CREATE TABLE 查看数据字典表定义。例如:

mysql> SHOW CREATE TABLE mysql.catalogs\G