Documentation Home
MySQL 8.0 参考手册  / 第 2 章安装和升级 MySQL  / 2.11 升级MySQL  /  2.11.4 在 Unix/Linux 上升级 MySQL 二进制或基于包的安装

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

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

就地升级

就地升级涉及关闭旧的 MySQL 服务器,用新的替换旧的 MySQL 二进制文件或包,在现有数据目录上重新启动 MySQL,以及升级现有安装中需要升级的任何剩余部分。

笔记

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

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

要执行就地升级:

  1. 如果将 XA 事务与 一起使用InnoDB,请在升级前运行XA RECOVER以检查未提交的 XA 事务。如果返回结果,则通过发出 XA COMMITor XA ROLLBACK语句提交或回滚 XA 事务。

  2. 将 MySQL 配置为执行缓慢关闭,方法是设置 innodb_fast_shutdown0. 例如:

    mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

    通过缓慢关闭,InnoDB在关闭之前执行完全清除和更改缓冲区合并,这确保在版本之间文件格式不同的情况下数据文件已完全准备好。

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

    mysqladmin -u root -p shutdown
  4. 升级 MySQL 二进制安装或包。如果升级二进制安装,请解压新的 MySQL 二进制分发包。请参阅 获取和解压分发。对于基于包的安装,请安装新包。

  5. 使用现有数据目录启动 MySQL 5.7 服务器。例如:

    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
  6. 运行mysql_upgrade。例如:

    mysql_upgrade -u root -p

    mysql_upgrade检查所有数据库中的所有表是否与当前版本的 MySQL 不兼容。mysql_upgrade还会升级 mysql系统数据库,以便您可以利用新的特权或功能。

    笔记

    mysql_upgrade不升级时区表或帮助表的内容。有关升级说明,请参阅 第 5.1.13 节,“MySQL 服务器时区支持”第 5.1.14 节,“服务器端帮助支持”

  7. 关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:

    mysqladmin -u root -p shutdown
    mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &

逻辑升级

逻辑升级涉及使用备份或导出实用程序(如 mysqldumpmysqlpump )从旧 MySQL 实例导出 SQL ,安装新的 MySQL 服务器,并将 SQL 应用到新的 MySQL 实例。

笔记

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

要执行逻辑升级:

  1. 查看 第 2.11.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)。您可以使用该 INFORMATION_SCHEMA.COLUMNS 表来识别具有生成列的表。

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

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

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

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

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

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

    mysqld_safe --user=mysql --datadir=/path/to/5.7-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_mode=ON如果您的转储文件包含系统表, 则不建议在服务器 ( ) 上启用 GTID 时加载转储文件。mysqldump为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,并且在启用 GTID 时不允许这种组合。另请注意,将转储文件从启用了 GTID 的服务器加载到另一台启用了 GTID 的服务器中,会导致生成不同的事务标识符。

  9. 运行mysql_upgrade。例如:

    mysql_upgrade -u root -p

    mysql_upgrade检查所有数据库中的所有表是否与当前版本的 MySQL 不兼容。mysql_upgrade还会升级 mysql系统数据库,以便您可以利用新的特权或功能。

    笔记

    mysql_upgrade不升级时区表或帮助表的内容。有关升级说明,请参阅 第 5.1.13 节,“MySQL 服务器时区支持”第 5.1.14 节,“服务器端帮助支持”

  10. 关闭并重新启动 MySQL 服务器以确保对系统表所做的任何更改生效。例如:

    mysqladmin -u root -p shutdown
    mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &