原地升级
原地升级包括关闭旧的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之前的版本),则该过程也不会升级帮助表的内容。