• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 数据字典架构

    数据字典表受保护,只能在MySQL的调试版本中访问。但是,MySQL支持通过INFORMATION_SCHEMA表和SHOW语句访问存储在数据字典表中的数据。有关构成数据字典的表的概述,请参见数据字典表。

    MySQL系统表仍然存在于MySQL 8.0中,可以通过SHOW TABLESmysql系统数据库上发布一条语句来参见。通常,MySQL数据字典表和系统表之间的区别在于,数据字典表包含执行SQL查询所需的元数据,而系统表包含辅助数据,例如时区和帮助信息。MySQL系统表和数据字典表在升级方式上也有所不同。MySQL服务器管理数据字典升级。SQL服务器。请参阅如何升级数据字典。升级MySQL系统表需要运行完整的MySQL升级过程。请参见“ MySQL升级过程将升级什么”。

    数据字典如何升级

    MySQL的新版本可能包括对数据字典表定义的更改。此类更改存在于新安装的MySQL版本中,但是在执行MySQL二进制文件的就地升级时,使用新的二进制文件重新启动MySQL服务器时将应用更改。在启动时,将服务器的数据字典版本与存储在数据字典中的版本信息进行比较,以确定是否应升级数据字典表。如果需要升级并支持升级,则服务器会创建具有更新定义的数据字典表,将持久化的元数据复制到新表中,用新表原子替换旧表,然后重新初始化数据字典。如果不需要升级,

    数据字典表的升级是一项原子操作,这意味着所有数据字典表都将根据需要进行升级,否则操作将失败。如果升级操作失败,则服务器启动失败并显示错误。在这种情况下,旧服务器二进制文件可以与旧数据目录一起使用来启动服务器。当新的服务器二进制文件再次用于启动服务器时,将重新尝试数据字典升级。

    通常,成功升级数据字典表后,将无法使用旧的服务器二进制文件重新启动服务器。因此,升级数据字典表后,不支持将MySQL服务器二进制文件降级到以前的MySQL版本。

    mysqld的--no-dd-upgrade选项可用于防止数据字典表的自动升级启动。如果--no-dd-upgrade指定为,并且服务器发现服务器的数据字典版本与存储在数据字典中的版本不同,则启动失败并显示一条错误,指出禁止数据字典升级。

    使用MySQL的调试版本参见数据字典表

    数据字典表在默认情况下受保护,但可以通过使用调试支持(使用-DWITH_DEBUG=1CMake选项)编译MySQL 并指定+d,skip_dd_table_access_checkdebug选项和修饰符来访问。有关编译调试版本的信息,请参见“编译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