原地升级

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

注意

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

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

要执行原地升级:

备份好数据,包括系统库;

知晓数据库驱动、字段类型等兼容性问题;

如果使用了innodb的XA事务,在升级之前运行XA RECOVER来检查未提交的XA事务。如果返回结果,则通过XA COMMIT或者XA ROLLBACK语句来提交或者回滚XA事务;

如果存在加密的InnoDB表空间,请执行以下语句:

ALTER INSTANCE ROTATE INNODB MASTER KEY;

如果使用innodb_fast_shutdown=2来启动MySQL服务器,通过执行以下任一语句,将其配置为执行快速或慢速关闭:

SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown

SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

通过快速关闭或缓慢关闭,InnoDB会将其撤消日志和数据文件保持在某种状态下,以防止版本之间的文件格式差异。

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

mysqladmin -u root -p shutdown

升级MySQL二进制文件或软件包。如果要升级二进制安装程序,请解压缩新的MySQL二进制分发程序包。对于基于软件包的安装,请安装新软件包。

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

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

在上一步中,服务器将根据需要升级数据字典。现在有必要执行所有剩余的升级操作:

从MySQL 8.0.16开始,服务器将在上一步中完成此操作:在MySQL 5.7和MySQL 8.0之间的mysql系统模式中进行所需的任何更改,以便可以利用新的特性或功能。它还使MySQL 8.0的Performance Schema,INFORMATION_SCHEMA和sys模式保持最新,并检查所有用户模式与当前版本的MySQL的兼容性。

在MySQL 8.0.16之前,服务器仅在上一步中升级数据字典。MySQL 8.0服务器成功启动后,执行mysql_upgrade来执行其余的升级任务:

mysql_upgrade -u root -p

然后关闭并重新启动MySQL服务器,以确保对系统表所做的所有更改均生效。例如:

mysqladmin -u root -p shutdown

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

第一次启动MySQL 8.0服务器时(在较早的步骤中),可能会在错误日志中注意到有关未升级表的消息。如果mysql_upgrade已成功运行,则第二次启动服务器时不应出现此类消息。

注意

升级过程不会升级时区表的内容。如果升级过程使用mysql_upgrade(即MySQL 8.0.16之前的版本),则该过程也不会升级帮助表的内容。