本节介绍如何在Unix / Linux上升级MySQL二进制和基于软件包的安装。描述了就地和逻辑升级方法。
就地升级
就地升级包括关闭旧的MySQL服务器,用新的MySQL二进制文件或程序包替换旧的MySQL二进制文件或程序包,在现有数据目录上重新启动MySQL以及升级现有安装中需要升级的任何其余部分。有关可能需要升级的内容的详细信息,请参见 第2.11.3节“ MySQL升级过程将进行哪些升级”。
注意
如果要升级最初通过安装多个RPM软件包而产生的安装,请升级所有软件包,而不仅仅是某些软件包。例如,如果您以前安装了服务器和客户端RPM,则不要仅升级服务器RPM。
对于某些Linux平台,从RPM或Debian软件包安装的MySQL包括对管理MySQL服务器启动和关闭的系统支持。在这些平台上, 未安装mysqld_safe。在这种情况下,请使用systemd来启动和关闭服务器,而不要使用以下说明中使用的方法。请参见 第2.5.9节“使用systemd管理MySQL服务器”。
有关MySQL Cluster安装的升级,另请参见 MySQL Cluster Upgrade。
要执行就地升级:
-
通过完成第2.11.5节“准备安装进行升级”中的初步检查,确保安装已准备就绪 。
-
如果您将XA事务与结合使用
InnoDB,请XA RECOVER在升级前运行以检查未提交的XA事务。如果返回结果,则通过发出XA COMMITorXA 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 &如果存在加密的
InnoDB表空间,请使用该--early-plugin-load选项来加载密钥环插件。启动MySQL 8.0服务器时,它将自动检测是否存在数据字典表。如果不是,则服务器在数据目录中创建它们,并用元数据填充它们,然后继续其正常的启动顺序。在此过程中,服务器将升级所有数据库对象的元数据,包括数据库,表空间,系统和用户表,视图以及存储的程序(存储过程和函数,触发器和事件调度程序事件)。服务器还会删除以前用于元数据存储的文件。例如,从MySQL 5.7升级到MySQL 8.0后,您可能会注意到表不再包含
.frm文件。如果此步骤失败,则服务器会将所有更改还原到数据目录。在这种情况下,您应该删除所有重做日志文件,在同一数据目录上启动MySQL 5.7服务器,并修复所有错误的原因。然后对5.7服务器执行另一次缓慢关闭,并启动MySQL 8.0服务器再试一次。
-
在上一步中,服务器将根据需要升级数据字典。现在,有必要执行所有剩余的升级操作:
-
从MySQL 8.0.16开始,服务器将作为上一步的一部分进行操作,
mysql在MySQL 5.7和MySQL 8.0之间对系统数据库进行所需的任何更改 ,以便您可以利用新的特权或功能。它还使MySQL 8.0的性能模式,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已成功运行,则第二次启动服务器时不应出现此类消息。
-
注意
升级过程不会升级时区表的内容。有关升级说明,请参见 第5.1.15节“ MySQL服务器时区支持”。
如果升级过程使用mysql_upgrade (即MySQL 8.0.16之前的版本),则该过程也不升级帮助表的内容。有关这种情况下的升级说明,请参见 第5.1.17节“服务器端帮助支持”。
逻辑升级
逻辑升级包括使用备份或导出实用程序(如mysqldump或mysqlpump)从旧的MySQL实例中导出SQL ,安装新的MySQL服务器以及将该SQL应用于新的MySQL实例。有关可能需要升级的内容的详细信息,请参见第2.11.3节“ MySQL升级过程将进行哪些升级”。
注意
对于某些Linux平台,从RPM或Debian软件包安装的MySQL包括对管理MySQL服务器启动和关闭的系统支持。在这些平台上, 未安装mysqld_safe。在这种情况下,请使用systemd来启动和关闭服务器,而不要使用以下说明中使用的方法。请参见 第2.5.9节“使用systemd管理MySQL服务器”。
警告
由于从新的,更改的,不推荐的或删除的特性和功能引入的不兼容性,将从以前的MySQL版本中提取的SQL应用于新的MySQL版本可能会导致错误。因此,从先前的MySQL版本中提取的SQL可能需要进行修改才能启用逻辑升级。
要在升级到最新的MySQL 8.0版本之前发现不兼容性,请执行第2.11.5节“为升级准备安装”中所述的步骤 。
要执行逻辑升级:
-
从以前的MySQL安装中导出现有数据:
mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql注意
如果您的数据库包含存储的程序, 请在MySQLdump中使用
--routines和--events选项 (如上所示)。该 选项包括转储中的所有数据库,包括保存系统表的 数据库。--all-databasesmysql重要
如果您的表包含生成的列,请使用MySQL 5.7.9或更高版本提供的 mysqldump实用程序来创建转储文件。早期版本中提供的 mysqldump实用程序对生成的列定义使用了不正确的语法(错误号20769542)。您可以使用该
INFORMATION_SCHEMA.COLUMNS表来标识具有生成的列的表。 -
关闭旧的MySQL服务器。例如:
mysqladmin -u root -p shutdown -
安装MySQL 8.0。有关安装说明,请参见第2章,安装和升级MySQL。
-
初始化新的数据目录,如 第2.10.1节“初始化数据目录”中所述。例如:
mysqld --initialize --datadir=/path/to/8.0-datadir复制
'root'@'localhost'显示在屏幕上的临时密码或将其写入错误日志以供以后使用。 -
使用新的数据目录启动MySQL 8.0服务器。例如:
mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir & -
重设
root密码:shell> mysql -u root -p Enter password: **** <- enter temporary root passwordmysql> ALTER USER USER() IDENTIFIED BY 'your new password'; -
将先前创建的转储文件加载到新的MySQL服务器中。例如:
mysql -u root -p --force < data-for-upgrade.sql注意
gtid_mode=ON如果转储文件包含系统表, 则不建议在服务器()上启用GTID时加载转储文件。 mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且当启用GTID时不允许这种组合。还应注意,将已启用GTID的服务器上的转储文件加载到已启用GTID的另一台服务器中,会生成不同的事务标识符。 -
执行所有剩余的升级操作:
-
在MySQL 8.0.16及更高版本中,关闭服务器,然后使用
--upgrade=FORCE选项执行其余的升级任务重新启动服务器 :mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir --upgrade=FORCE &使用重启时
--upgrade=FORCE,服务器会mysql在MySQL 5.7和MySQL 8.0之间的系统架构中进行任何所需的更改 ,以便您可以利用新的特权或功能。它还使MySQL 8.0的性能模式INFORMATION_SCHEMA和 性能模式sys保持最新,并检查所有用户模式是否与当前版本的MySQL不兼容。 -
在MySQL 8.0.16之前,执行 mysql_upgrade来执行其余的升级任务:
mysql_upgrade -u root -p然后关闭并重新启动MySQL服务器,以确保对系统表所做的所有更改均生效。例如:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir &
-
注意
升级过程不会升级时区表的内容。有关升级说明,请参见 第5.1.15节“ MySQL服务器时区支持”。
如果升级过程使用mysql_upgrade (即MySQL 8.0.16之前的版本),则该过程也不升级帮助表的内容。有关这种情况下的升级说明,请参见 第5.1.17节“服务器端帮助支持”。
注意
加载包含MySQL 5.7mysql模式的转储文件会 重新创建两个不再使用的表:event和 proc。(对应的MySQL 8.0表是events和routines,这两个表都是数据字典表,并受到保护。)在您满意升级成功后,可以通过执行以下SQL语句删除event和 proc表:
DROP TABLE mysql.event;
DROP TABLE mysql.proc;
MySQL集群升级
本节中的信息是一种辅助的就地升级过程中所述 就地升级,使用的,如果你要升级MySQL集群。
从MySQL 8.0.16开始,可以按照通常的三个有序步骤将MySQL Cluster升级作为常规滚动升级执行:
- 升级MGM节点。
- 一次升级一个数据节点。
- 一次升级一个API节点(包括MySQL服务器)。
升级每个节点的方式与MySQL 8.0.16之前的方式几乎相同,因为升级数据字典和升级系统表之间是分开的。升级每个人有两个步骤 mysqld:
-
导入数据字典。
使用
--upgrade=MINIMAL选项升级数据字典而不是系统表来启动新服务器 。这与启动服务器而不调用mysql_upgrade的MySQL 8.0.16之前的操作基本相同 。必须连接MySQL服务器才能
NDB完成此阶段。如果存在任何表NDB或NDBINFO表,并且服务器无法连接到集群,则会退出并显示错误消息:Failed to Populate DD tables. -
升级系统表。
在MySQL 8.0.16之前,DBA调用 mysql_upgrade客户端来升级系统表。从MySQL 8.0.16开始,服务器执行以下操作:要升级系统表,请在不使用该选项的情况下 重新启动每个单独的mysqld
--upgrade=MINIMAL。




