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