MySQL 8.4 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 集群升级

要执行本地升级:

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

  2. 确保升级前安装的准备工作,详细信息请参见第 3.6 节,“升级前准备”

  3. 如果您使用 InnoDB 进行XA事务,如果您使用 XA RECOVER 检查未提交的XA事务。如果结果返回,请提交或回滚XA事务,使用XA COMMITXA ROLLBACK 语句。

  4. 如果您通常以innodb_fast_shutdown 设置为 2(冷启动),配置它以执行快速或慢速关闭,执行以下语句之一:

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

    在快速或慢速关机时,InnoDB 会将其undo日志和数据文件留在一个状态,这样可以在文件格式差异之间的版本之间进行处理。

  5. 关机老的MySQL服务器。例如:

    mysqladmin -u root -p shutdown
  6. 升级MySQL二进制或包。升级二进制安装时,解压缩新的MySQL二进制分发包。见获取和解压缩分发包。对于包安装,安装新的包。

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

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

    如果存在加密的InnoDB表空间,使用--early-plugin-load选项加载密钥ring插件。

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

    如果这个步骤失败,服务器将回退所有对数据目录的更改。在这种情况下,您应该删除所有redo日志文件,然后在同一个数据目录上启动您的MySQL 8.3服务器,并解决任何错误。然后,重新启动MySQL 8.3服务器并尝试再次启动MySQL 8.4服务器。

  8. 在上一步骤中,服务器将根据需要升级数据字典,使得在MySQL 8.3和MySQL 8.4之间的mysql系统数据库升级,以便您可以使用新的权限或功能。它还将Performance Schema、INFORMATION_SCHEMAsys数据库升级到MySQL 8.4,并检查所有用户数据库是否与当前MySQL版本兼容。

Note

升级过程不升级时间区表的内容。有关升级说明,请见第7.1.15节,“MySQL Server Time Zone Support”

逻辑升级涉及从老MySQL实例导出SQL使用备份或导出工具,如mysqldump,安装新的MySQL服务器,并将SQL应用于新MySQL实例。有关需要升级的详细信息,请见第3.4节,“What the MySQL Upgrade Process Upgrades”

Note

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

Warning

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

在升级到最新的 MySQL 8.4 版本前,执行以下步骤,以确定不兼容性:第 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(如上所示),如果您的数据库包含存储程序。使用mysqldump工具将所有数据库包含在 dump 中,包括mysqldump工具提供的 MySQL 5.7.9 或更高版本中。

    Important

    如果您有包含生成列的表,使用mysqldump工具提供的 MySQL 5.7.9 或更高版本创建 dump 文件。早期版本的mysqldump工具使用错误的语法来定义生成列定义(Bug #20769542)。您可以使用信息 SchemaCOLUMNS表来确定包含生成列的表。

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

    mysqladmin -u root -p shutdown
  4. 安装 MySQL 8.4。安装说明,请参阅第 2 章,“安装 MySQL”

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

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

    将临时mysqldump密码复制到您的屏幕或错误日志中,以便后续使用。

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

    mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
  7. 重置mysqldump密码:

    $> 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 对系统表使用非事务性 MyISAM 存储引擎的 DML 指令,这种组合在 GTIDs 启用时不可行。此外,加载从启用 GTIDs 的服务器上获取的备份文件到另一个启用 GTIDs 的服务器上,会生成不同的事务标识符。

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

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

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

    在使用 --upgrade=FORCE 重新启动服务器时,服务器将在 MySQL 8.3 和 MySQL 8.4 之间对 mysql 系统架构进行所需的更改,以便使用新的权限或功能。此外,还将将 Performance Schema、INFORMATION_SCHEMA 和 sys 架构更新到 MySQL 8.4,并检查所有用户架构是否与当前 MySQL 版本兼容。

Note

升级过程中不会升级时区表的内容。有关升级指南,请参阅 第7.1.15节,“MySQL Server Time Zone Support”

本节中的信息是《在位升级》过程的附件,用于升级 MySQL 集群。

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

  1. 升级 MGM 节点。

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

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

每个单个 mysqld 都有两个步骤:

  1. 导入数据字典。

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

    MySQL 服务器必须连接到 NDB以完成这个阶段。如果存在 NDBNDBINFO 表,并且服务器不能连接到集群,它将以错误信息退出。

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