MySQL 9.0 参考手册  /  升级 MySQL  /  在 Unix/Linux 上升级 MySQL 二进制或基于软件包的安装

3.7 在 Unix/Linux 上升级 MySQL 二进制或基于软件包的安装

本节介绍如何在 Unix/Linux 上升级 MySQL 二进制和基于软件包的安装。描述了就地升级和逻辑升级方法。

就地升级

就地升级涉及关闭旧的 MySQL 服务器,用新的 MySQL 二进制文件或软件包替换旧的 MySQL 二进制文件或软件包,在现有数据目录上重新启动 MySQL,以及升级现有安装中需要升级的任何剩余部分。有关可能需要升级的内容的详细信息,请参阅 第 3.4 节,“MySQL 升级过程升级的内容”

注意

如果您正在升级最初通过安装多个 RPM 软件包而生成的安装,请升级所有软件包,而不仅仅是一些软件包。例如,如果您之前安装了服务器和客户端 RPM,请不要只升级服务器 RPM。

对于一些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包含 systemd 支持,用于管理 MySQL 服务器启动和关闭。在这些平台上,mysqld_safe 未安装。在这种情况下,请使用 systemd 而不是以下说明中使用的方法来启动和关闭服务器。请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

有关升级 MySQL 集群安装的信息,另请参阅 MySQL 集群升级

要执行就地升级

  1. 查看 第 3.1 节,“开始之前” 中的信息。

  2. 通过完成 第 3.6 节,“准备您的安装以进行升级” 中的初步检查,确保安装已准备好升级。

  3. 如果您使用 InnoDB 进行了 XA 事务,请在升级之前运行 XA RECOVER 以检查未提交的 XA 事务。如果返回结果,请通过发出 XA COMMITXA ROLLBACK 语句来提交或回滚 XA 事务。

  4. 如果您通常运行的 MySQL 服务器配置为 innodb_fast_shutdown 设置为 2(冷启动),请通过执行以下语句之一来配置它执行快速或慢速启动

    SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
    SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

    通过快速或慢速启动,InnoDB 会将它的撤消日志和数据文件留在一个状态,该状态可以在发行版之间出现文件格式差异的情况下处理。

  5. 关闭旧的 MySQL 服务器。例如

    mysqladmin -u root -p shutdown
  6. 升级 MySQL 二进制文件或软件包。如果升级二进制安装,请解压缩新的 MySQL 二进制分发包。请参阅 获取并解压缩分发版。对于基于软件包的安装,请安装新的软件包。

  7. 使用现有数据目录启动 MySQL 9.0 服务器。例如

    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &

    如果有加密的 InnoDB 表空间,请使用 --early-plugin-load 选项加载密钥环插件。

    启动 MySQL 9.0 服务器时,它会自动检测数据字典表是否存在。如果不存在,服务器会在数据目录中创建它们,用元数据填充它们,然后继续其正常的启动序列。在此过程中,服务器会升级所有数据库对象的元数据,包括数据库、表空间、系统表和用户表、视图和存储程序(存储过程和函数、触发器和事件调度程序事件)。服务器还会删除以前用于元数据存储的文件。例如,在从 MySQL 8.4 升级到 MySQL 9.0 后,您可能会注意到表不再具有 .frm 文件。

    如果此步骤失败,服务器会还原对数据目录的所有更改。在这种情况下,您应该删除所有重做日志文件,在相同的数据目录上启动您的 MySQL 8.4 服务器,并修复任何错误的原因。然后执行 8.4 服务器的另一次慢速启动,并启动 MySQL 9.0 服务器以再次尝试。

  8. 在前面的步骤中,服务器根据需要升级数据字典,对 mysql 系统数据库在 MySQL 8.4 和 MySQL 9.0 之间的任何更改进行必要的更改,以便您可以利用新的权限或功能。它还会将性能模式、INFORMATION_SCHEMAsys 数据库更新到 MySQL 9.0 的最新版本,并检查所有用户数据库是否存在与当前 MySQL 版本不兼容的情况。

注意

升级过程不会升级时区表的內容。有关升级说明,请参阅 第 7.1.15 节,“MySQL 服务器时区支持”

逻辑升级

逻辑升级涉及使用备份或导出实用程序(如 mysqldump)从旧的 MySQL 实例导出 SQL,安装新的 MySQL 服务器,并将 SQL 应用到新的 MySQL 实例。有关可能需要升级的内容的详细信息,请参阅 第 3.4 节,“MySQL 升级过程升级的内容”

注意

对于一些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包含 systemd 支持,用于管理 MySQL 服务器启动和关闭。在这些平台上,mysqld_safe 未安装。在这种情况下,请使用 systemd 而不是以下说明中使用的方法来启动和关闭服务器。请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

警告

将从以前 MySQL 版本中提取的 SQL 应用到新的 MySQL 版本可能会导致错误,因为新的、已更改的、已弃用的或已删除的功能和功能引入了不兼容性。因此,从以前 MySQL 版本中提取的 SQL 可能需要修改才能启用逻辑升级。

要在升级到最新的 MySQL 9.0 版本之前识别不兼容性,请执行 第 3.6 节,“准备您的安装以进行升级” 中描述的步骤。

要执行逻辑升级

  1. 查看 第 3.1 节,“开始之前” 中的信息。

  2. 从以前的 MySQL 安装中导出您的现有数据

    mysqldump -u root -p
      --add-drop-table --routines --events
      --all-databases --force > data-for-upgrade.sql
    注意

    如果您的数据库包含存储程序,请使用 --routines--events 选项与 mysqldump(如上所示)一起使用。 --all-databases 选项包含转储中的所有数据库,包括包含系统表的 mysql 数据库。

    重要

    如果您有包含生成列的表,请使用 MySQL 5.7.9 或更高版本提供的 mysqldump 实用程序来创建您的转储文件。在早期版本中提供的 mysqldump 实用程序对生成列定义使用不正确的语法(错误 #20769542)。您可以使用信息模式 COLUMNS 表来识别具有生成列的表。

  3. 关闭旧的 MySQL 服务器。例如

    mysqladmin -u root -p shutdown
  4. 安装 MySQL 9.0。有关安装说明,请参阅 第 2 章,安装 MySQL

  5. 初始化新的数据目录,如 第 2.9.1 节,“初始化数据目录” 中所述。例如

    mysqld --initialize --datadir=/path/to/9.0-datadir

    将显示在屏幕上或写入错误日志的临时 'root'@'localhost' 密码复制到您的屏幕或错误日志以备后用。

  6. 使用新的数据目录启动 MySQL 9.0 服务器。例如

    mysqld_safe --user=mysql --datadir=/path/to/9.0-datadir &
  7. 重置 root 密码

    $> mysql -u root -p
    Enter password: ****  <- enter temporary root password
    mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
  8. 将之前创建的转储文件加载到新的 MySQL 服务器中。例如

    mysql -u root -p --force < data-for-upgrade.sql
    注意

    如果您的转储文件包含系统表,则不建议在服务器上启用 GTID 时加载转储文件 (gtid_mode=ON)。 mysqldump 为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,而这种组合在启用 GTID 时是不允许的。还要注意,将启用 GTID 的服务器上的转储文件加载到另一个启用 GTID 的服务器中会导致生成不同的事务标识符。

  9. 执行任何剩余的升级操作

    关闭服务器,然后使用 --upgrade=FORCE 选项重新启动服务器以执行剩余的升级任务。

    mysqladmin -u root -p shutdown
    mysqld_safe --user=mysql --datadir=/path/to/9.0-datadir --upgrade=FORCE &

    使用 --upgrade=FORCE 选项重新启动后,服务器将对 MySQL 8.4 和 MySQL 9.0 之间的 mysql 系统模式进行必要的更改,以便您可以利用新的权限或功能。它还会将 Performance Schema、INFORMATION_SCHEMAsys 模式更新到 MySQL 9.0 版本,并检查所有用户模式是否与当前版本的 MySQL 兼容。

注意

升级过程不会升级时区表的內容。有关升级说明,请参阅 第 7.1.15 节,“MySQL 服务器时区支持”

MySQL 集群升级

本节中的信息是对 就地升级 中描述的升级过程的补充,用于您升级 MySQL 集群时使用。

MySQL 集群升级可以作为常规的滚动升级执行,按照通常的三个有序步骤进行

  1. 升级 MGM 节点。

  2. 一次升级一个数据节点。

  3. 一次升级一个 API 节点(包括 MySQL 服务器)。

升级每个单独的 mysqld 包含两个步骤

  1. 导入数据字典。

    使用 --upgrade=MINIMAL 选项启动新服务器,以升级数据字典,但不升级系统表。

    要完成此阶段,MySQL 服务器必须连接到 NDB。如果存在任何 NDBNDBINFO 表,并且服务器无法连接到集群,它将退出并显示错误消息。

    Failed to Populate DD tables.
  2. 通过重新启动每个单独的 mysqld 而不使用 --upgrade=MINIMAL 选项来升级系统表。