数据字典表受到保护,只能在 MySQL 的调试版本中访问。INFORMATION_SCHEMA但是,MySQL 支持通过表和 SHOW语句访问存储在数据字典表中的数据 。有关组成数据字典的表的概述,请参阅 数据字典表。
MySQL 系统表在 MySQL 8.0 中仍然存在,可以通过在系统数据库上发出SHOW TABLES 语句来查看。mysql一般来说,MySQL数据字典表和系统表的区别在于,数据字典表包含执行SQL查询所需的元数据,而系统表包含时区、帮助信息等辅助数据。MySQL 系统表和数据字典表在升级方式上也有所不同。MySQL 服务器管理数据字典升级。SQL 服务器。请参阅如何升级数据字典。升级 MySQL 系统表需要运行完整的 MySQL 升级过程。请参阅 第 2.11.3 节,“MySQL 升级过程升级的内容”.
数据字典如何升级
MySQL 的新版本可能包括对数据字典表定义的更改。此类更改存在于新安装的 MySQL 版本中,但在执行 MySQL 二进制文件的就地升级时,会在使用新二进制文件重新启动 MySQL 服务器时应用更改。在启动时,将服务器的数据字典版本与存储在数据字典中的版本信息进行比较,以确定是否应该升级数据字典表。如果需要并支持升级,服务器会创建具有更新定义的数据字典表,将持久化的元数据复制到新表,用新表原子替换旧表,并重新初始化数据字典。如果不需要升级,
数据字典表的升级是一个原子操作,这意味着所有的数据字典表都会根据需要进行升级,否则操作会失败。如果升级操作失败,服务器启动失败并出现错误。在这种情况下,旧的服务器二进制文件可以与旧的数据目录一起使用来启动服务器。当再次使用新的服务器二进制文件启动服务器时,将重新尝试数据字典升级。
通常,数据字典表升级成功后,无法使用旧的服务器二进制文件重新启动服务器。因此,升级数据字典表后,不支持将 MySQL 服务器二进制文件降级到以前的 MySQL 版本。
mysqld 选项 可--no-dd-upgrade用于防止数据字典表在启动时自动升级。当--no-dd-upgrade指定时,服务器发现服务器的数据字典版本与数据字典中存储的版本不同,启动失败,错误提示禁止数据字典升级。
使用 MySQL 的调试版本查看数据字典表
数据字典表默认受保护,但可以通过编译带有调试支持的 MySQL(使用 -DWITH_DEBUG=1 CMake选项)并指定 +d,skip_dd_table_access_check debug选项和修饰符来访问。有关编译调试版本的信息,请参阅 第 5.9.1.1 节,“编译 MySQL 以进行调试”。
警告
不建议直接修改或写入数据字典表,这可能会导致您的 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




