本节介绍如何在 Unix/Linux 上升级基于二进制和软件包的 MySQL 安装。描述了就地升级和逻辑升级方法。
就地升级包括关闭旧的 MySQL 服务器,将旧的 MySQL 二进制文件或软件包替换为新的,在现有数据目录上重新启动 MySQL,并升级需要升级的现有安装的任何剩余部分。有关可能需要升级的内容的详细信息,请参阅第 3.4 节“MySQL 升级过程升级的内容”。
如果您要升级最初通过安装多个 RPM 软件包生成的安装,请升级所有软件包,而不仅仅是一些软件包。例如,如果您之前安装了服务器和客户端 RPM,请不要只升级服务器 RPM。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括对用于管理 MySQL 服务器启动和关闭的 systemd 的支持。在这些平台上,未安装mysqld_safe。在这种情况下,请使用 systemd 进行服务器启动和关闭,而不是使用以下说明中使用的方法。请参阅第 2.5.9 节“使用 systemd 管理 MySQL 服务器”。
有关 MySQL 集群安装的升级,另请参阅MySQL 集群升级。
要执行就地升级,请执行以下操作
查看第 3.1 节“开始之前”中的信息。
通过完成第 3.6 节“准备安装升级”中的初步检查,确保您的安装已准备好升级。
如果您将 XA 事务与
InnoDB
一起使用,请在升级之前运行XA RECOVER
以检查未提交的 XA 事务。如果返回结果,请通过发出XA COMMIT
或XA ROLLBACK
语句提交或回滚 XA 事务。如果您通常运行配置了将
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.4 服务器。例如
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
如果有加密的
InnoDB
表空间,请使用--early-plugin-load
选项加载密钥环插件。当您启动 MySQL 8.4 服务器时,它会自动检测数据字典表是否存在。如果不存在,服务器会在数据目录中创建它们,用元数据填充它们,然后继续其正常的启动顺序。在此过程中,服务器会升级所有数据库对象的元数据,包括数据库、表空间、系统表和用户表、视图以及存储程序(存储过程和函数、触发器和事件调度程序事件)。服务器还会删除以前用于存储元数据的文件。例如,从 MySQL 8.3 升级到 MySQL 8.4 后,您可能会注意到表不再具有
.frm
文件。如果此步骤失败,服务器会将所有更改还原到数据目录。在这种情况下,您应该删除所有重做日志文件,在相同的数据目录上启动 MySQL 8.3 服务器,并修复任何错误的原因。然后再次对 8.3 服务器执行慢速关闭,并启动 MySQL 8.4 服务器重试。
在上一步中,服务器会根据需要升级数据字典,对 MySQL 8.3 和 MySQL 8.4 之间的
mysql
系统数据库进行任何必要的更改,以便您可以利用新的权限或功能。它还使性能模式、INFORMATION_SCHEMA
和sys
数据库更新到 MySQL 8.4,并检查所有用户数据库与当前版本 MySQL 的兼容性。
升级过程不会升级时区表的内容。有关升级说明,请参阅第 7.1.15 节“MySQL 服务器时区支持”。
逻辑升级包括使用备份或导出实用程序(例如mysqldump)从旧的 MySQL 实例导出 SQL,安装新的 MySQL 服务器,并将 SQL 应用于您的新 MySQL 实例。有关可能需要升级的内容的详细信息,请参阅第 3.4 节“MySQL 升级过程升级的内容”。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括对用于管理 MySQL 服务器启动和关闭的 systemd 的支持。在这些平台上,未安装mysqld_safe。在这种情况下,请使用 systemd 进行服务器启动和关闭,而不是使用以下说明中使用的方法。请参阅第 2.5.9 节“使用 systemd 管理 MySQL 服务器”。
将从以前的 MySQL 版本中提取的 SQL 应用于新的 MySQL 版本可能会导致错误,因为新版本、更改、弃用或删除的功能和性能不兼容。因此,从以前的 MySQL 版本中提取的 SQL 可能需要修改才能进行逻辑升级。
要在升级到最新的 MySQL 8.4 版本之前识别不兼容性,请执行第 3.6 节“准备安装升级”中描述的步骤。
要执行逻辑升级,请执行以下操作
查看第 3.1 节“开始之前”中的信息。
从以前的 MySQL 安装中导出现有数据
mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
注意如果您的数据库包含存储程序,请将
--routines
和--events
选项与mysqldump一起使用(如上所示)。--all-databases
选项包括转储中的所有数据库,包括包含系统表的mysql
数据库。关闭旧的 MySQL 服务器。例如
mysqladmin -u root -p shutdown
安装 MySQL 8.4。有关安装说明,请参阅第 2 章“安装 MySQL”。
初始化新的数据目录,如第 2.9.1 节“初始化数据目录”中所述。例如
mysqld --initialize --datadir=/path/to/8.4-datadir
复制显示在屏幕上或写入错误日志的临时
'root'@'localhost'
密码以供以后使用。使用新的数据目录启动 MySQL 8.4 服务器。例如
mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
重置
root
密码$> 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
注意如果您的转储文件包含系统表,则不建议在服务器上启用 GTID(
gtid_mode=ON
)时加载转储文件。mysqldump会为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,并且在启用 GTID 时不允许这种组合。另请注意,将启用了 GTID 的服务器中的转储文件加载到启用了 GTID 的另一台服务器中,会导致生成不同的交易标识符。执行任何剩余的升级操作
关闭服务器,然后使用
--upgrade=FORCE
选项重新启动它以执行剩余的升级任务。mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
使用
--upgrade=FORCE
重新启动后,服务器会对 MySQL 8.3 和 MySQL 8.4 之间的mysql
系统模式进行任何必要的更改,以便您可以利用新的权限或功能。它还将性能模式、INFORMATION_SCHEMA
和sys
模式更新到 MySQL 8.4,并检查所有用户模式与当前版本 MySQL 的不兼容性。
升级过程不会升级时区表的内容。有关升级说明,请参阅第 7.1.15 节“MySQL 服务器时区支持”。
本节中的信息是对 就地升级 中描述的就地升级过程的补充,适用于升级 MySQL 集群的情况。
MySQL 集群升级可以作为常规的滚动升级执行,遵循通常的三个有序步骤
升级 MGM 节点。
一次升级一个数据节点。
一次升级一个 API 节点(包括 MySQL 服务器)。
升级每个单独的 mysqld
有两个步骤
导入数据字典。
使用
--upgrade=MINIMAL
选项启动新服务器,以升级数据字典但不升级系统表。在此阶段完成之前,MySQL 服务器必须连接到
NDB
。如果存在任何NDB
或NDBINFO
表,并且服务器无法连接到集群,它将退出并显示错误消息Failed to Populate DD tables.
通过在不使用
--upgrade=MINIMAL
选项的情况下重新启动每个单独的 mysqld 来升级系统表。