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  /  Upgrading MySQL Binary or Package-based Installations on Unix/Linux

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

本节描述如何在 Unix/Linux 上升级 MySQL 二进制和基于包的安装。在位升级和逻辑升级方法将被描述。

就地升级

就地升级涉及关闭旧的 MySQL 服务器,替换旧的 MySQL 二进制文件或包,重新启动 MySQL 服务器,并升级现有的安装部分。有关升级的详细信息,请参阅 第 3.4 节,“MySQL 升级过程升级的内容”

Note

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

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

对于 MySQL 集群安装的升级,请参阅 MySQL 集群升级

要执行就地升级:

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

  2. 通过完成 第 3.6 节,“升级前准备安装” 中的初步检查来确保安装的升级准备就绪。

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

  4. 如果您通常以 innodb_fast_shutdown 设置为 2(冷关机)配置 MySQL 服务器,请配置它以执行快速或慢速关机,方法是执行以下语句:

    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 8.3 服务器,使用现有的数据目录。例如:

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

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

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

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

  8. 在前一步骤中,服务器升级数据词典,如有必要,使 MySQL 8.2 和 MySQL 8.3 之间的 mysql 系统数据库保持最新状态,以便您可以利用新的权限或功能。它还将性能模式、 INFORMATION_SCHEMAsys 数据库升级到 MySQL 8.3,并检查所有用户数据库以检测当前版本的 MySQL 的不兼容性。

Note

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

逻辑升级

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

Note

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

Warning

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

要在升级到最新的 MySQL 8.3 版本之前识别不兼容性,请执行 第 3.6 节,“升级前的准备” 中的步骤。

要执行逻辑升级:

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

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

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

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

    Important

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

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

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

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

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

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

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

    mysqld_safe --user=mysql --datadir=/path/to/8.3-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
    Note

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

  9. 执行剩余的升级操作:

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

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

    在重新启动时使用 --upgrade=FORCE,服务器将对 MySQL 8.2 和 MySQL 8.3 之间的 mysql 系统架构进行必要的更改,以便您可以利用新的权限或功能。它还将性能架构、INFORMATION_SCHEMAsys 架构升级到 MySQL 8.3,并检查所有用户架构以确保与当前版本的 MySQL 兼容。

Note

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

Note

加载包含 MySQL 5.7 mysql 架构的转储文件将重新创建两个不再使用的表:eventproc。(相应的 MySQL 8.0 表是 eventsroutines,都是数据字典表并受到保护。)在您确认升级成功后,可以通过执行以下 SQL 语句删除 eventproc 表:

DROP TABLE mysql.event;
DROP TABLE mysql.proc;

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 选项。