Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Upgrading MySQL  /  What the MySQL Upgrade Process Upgrades

3.4 MySQL 升级过程升级的内容

安装新的 MySQL 版本可能需要升级现有安装的以下部分:

  • 系统模式 mysql,其中包含 MySQL 服务器在运行时所需的信息(见 第 7.3 节,“系统模式 mysql”)。 mysql 模式表分为两个广泛的类别:

    • 数据字典表,用于存储数据库对象元数据。

    • 系统表(即剩余的非数据字典表),用于其他操作目的。

  • 其他模式,一些是内置的,可能被视为服务器“拥有”的,而其他的则不是:

两个不同的版本号与安装的某些部分相关联,可能需要升级:

  • 数据字典版本。这适用于数据字典表。

  • 服务器版本,也称为 MySQL 版本。这适用于系统表和其他模式中的对象。

在这两种情况下,实际版本号都存储在数据字典中,而当前期望的版本号则编译到新的 MySQL 版本中。当实际版本号低于当前期望的版本号时,相关安装部分必须升级到当前版本。如果两个版本号都表明需要升级,数据字典升级必须首先进行。

由于存在两个不同的版本号,因此升级过程分为两个步骤:

  • 步骤 1:数据字典升级。

    该步骤升级:

    • 系统模式 mysql 中的数据字典表。如果实际数据字典版本低于当前期望的版本,服务器将创建具有更新定义的数据字典表,复制持久元数据到新表中,原子地替换旧表,并重新初始化数据字典。

    • 性能模式、INFORMATION_SCHEMAndbinfo

  • 步骤 2:服务器升级。

    该步骤包括所有其他升级任务。如果现有 MySQL 安装的服务器版本低于新安装的 MySQL 版本,则需要升级:

    • 系统模式 mysql 中的系统表(剩余的非数据字典表)。

    • 模式 sys

    • 用户模式。

数据字典升级(步骤 1)是服务器的责任,在启动时自动执行,除非使用了禁止服务器执行升级的选项。该选项是 --upgrade=NONE

如果数据字典过时但服务器被禁止升级它,服务器将不运行,并退出错误。

[ERROR] [MY-013381] [Server] Server shutting down because upgrade is
required, yet prohibited by the command line option '--upgrade=NONE'.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

例如:

  • 服务器选项 --upgrade 控制服务器在启动时是否自动执行升级:

  • 无选项或使用 --upgrade=AUTO,服务器升级任何它确定需要升级的内容(步骤 1 和 2)。

  • 使用 --upgrade=NONE,服务器不升级任何内容(跳过步骤 1 和 2),但如果数据字典需要升级,服务器将退出错误。

  • 使用 --upgrade=FORCE,服务器升级数据字典、性能模式和 INFORMATION_SCHEMA,如果必要(步骤 1),并强制升级所有其他内容(步骤 2)。预计服务器启动时间将更长,因为服务器检查所有模式中的所有对象。

FORCE 对于强制执行步骤 2 操作非常有用,如果服务器认为它们不必要。 FORCEAUTO 的一个区别是,使用 FORCE,服务器将重新创建系统表,如帮助表或时区表,如果它们不存在。

升级步骤 2 的其他注意事项:

  • 步骤 2 安装 sys 模式,如果它不存在,否则升级到当前版本。出现错误,如果 sys 模式存在但没有 version 视图,假设其不存在表示用户创建的模式:

    A sys schema exists with no sys.version view. If
    you have a user created sys schema, this must be renamed for the
    upgrade to succeed.

    要升级,在这种情况下,首先删除或重命名现有的 sys 模式。然后再次执行升级过程。(可能需要强制执行步骤 2。)

    要防止 sys 模式检查,启动服务器时使用 --upgrade=NONE--upgrade=MINIMAL 选项。

  • 步骤 2 升级系统表,以确保它们具有当前结构,这包括帮助表,但不包括时区表。加载时区表的过程取决于平台,并需要 DBA 做出决定,因此无法自动完成。

  • 当步骤 2 升级 mysql 模式中的系统表时,mysql.dbmysql.tables_privmysql.columns_privmysql.procs_priv 表的主键中的列顺序将被更改,以便将主机名和用户名列放在一起。将主机名和用户名放在一起意味着可以使用索引查找,从而提高 CREATE USERDROP USERRENAME USER 语句的性能,以及 ACL 检查多个用户的多个权限。删除和重新创建索引是必要的,可能需要一些时间,如果系统有大量用户和权限。

  • 步骤 2 处理所有用户模式中的所有表,如有必要。表检查可能需要很长时间完成。每个表在被处理时将被锁定,因此不可用于其他会话。检查和修复操作可能需要很长时间,特别是对于大型表。表检查使用 FOR UPGRADE 选项的 CHECK TABLE 语句。有关该选项的详细信息,请参阅 第 15.7.3.2 节,“CHECK TABLE 语句”

    要防止表检查,启动服务器时使用 --upgrade=NONE--upgrade=MINIMAL 选项。

    要强制表检查,启动服务器时使用 --upgrade=FORCE 选项。

  • 步骤 2 将 MySQL 版本号保存在数据目录中的文件 mysql_upgrade_info 中。

    要忽略 mysql_upgrade_info 文件并执行检查,启动服务器时使用 --upgrade=FORCE 选项。

    Note

    mysql_upgrade_info 文件已弃用;预计它将在未来版本的 MySQL 中被删除。

  • 步骤 2 将所有检查和修复的表标记为当前 MySQL 版本号。这确保了在同一版本的服务器下次升级检查时,可以确定是否需要检查或修复给定的表。