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

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

In-Place Upgrade

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

Note

如果要升级最初通过安装多个 RPM 软件包而产生的安装,请升级所有软件包,而不仅仅是某些软件包。例如,如果您以前安装了服务器和 Client 端 RPM,则不要仅升级服务器 RPM。

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

要执行就地升级:

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

  • 通过将innodb_fast_shutdown设置为0来配置 MySQL 以执行缓慢关闭。例如:

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

在缓慢关闭的情况下,InnoDB将在关闭之前执行完全清除和更改缓冲区合并,以确保在两个发行版之间的文件格式存在差异时,数据文件已准备就绪。

  • 关闭旧的 MySQL 服务器。例如:
mysqladmin -u root -p shutdown
  • 升级 MySQL 二进制安装或软件包。如果要升级二进制安装,请解压缩新的 MySQL 二进制分发包。参见获取并解压缩发行版。对于基于软件包的安装,请安装新软件包。

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

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

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

Note

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

  • 关闭并重新启动 MySQL 服务器,以确保对系统 table 所做的所有更改均生效。例如:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &

Logical Upgrade

逻辑升级包括使用备份或导出 Util(例如mysqldumpmysqlpump)从旧的 MySQL 实例中导出 SQL,安装新的 MySQL 服务器以及将该 SQL 应用于新的 MySQL 实例。

Note

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

要执行逻辑升级:

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

Note

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

Important

如果您的 table 包含生成的列,请使用 MySQL 5.7.9 或更高版本提供的mysqldumpUtil 来创建转储文件。早期版本中提供的mysqldumpUtil 对生成的列定义使用了不正确的语法(错误号 20769542)。您可以使用INFORMATION_SCHEMA.COLUMNStable 来标识具有已生成列的 table。

  • 关闭旧的 MySQL 服务器。例如:
mysqladmin -u root -p shutdown
mysqld --initialize --datadir=/path/to/5.7-datadir

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

  • 使用新的数据目录启动 MySQL 5.7 服务器。例如:
mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &
  • 重置root密码:
shell> mysql -u root -p
Enter password: ****  <- enter temporary root password
mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
  • 将先前创建的转储文件加载到新的 MySQL 服务器中。例如:
mysql -u root -p --force < data-for-upgrade.sql

Note

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

mysql_upgrade -u root -p

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

Note

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

  • 关闭并重新启动 MySQL 服务器,以确保对系统 table 所做的所有更改均生效。例如:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/5.7-datadir &