3.7 Unix/Linux 上升级 MySQL 二进制或包安装
本节描述了如何在 Unix/Linux 上升级 MySQL 二进制和包安装。在本地升级和逻辑升级方法都将被描述。
本地升级涉及到停止旧 MySQL 服务器,替换旧的 MySQL 二进制或包,重新启动 MySQL 在现有数据目录上,并升级现有安装的任何需要升级的部分。关于可能需要升级的部分的详细信息,请参见第 3.4 节,“MySQL 升级过程升级了什么”。
如果您正在升级由安装多个 RPM 包的安装,升级所有包,而不是只升级一些。例如,如果您之前安装了服务器和客户端 RPM,不能只升级服务器 RPM。
在某些 Linux 平台上,MySQL 安装从 RPM 或 Debian 包中包括 systemd 支持,以便管理 MySQL 服务器启动和关闭。在这些平台上,mysqld_safe 不安装。在这种情况下,使用 systemd 而不是以下说明中的方法来启动和关闭服务器。请参见第 2.5.9 节,“使用 systemd”。
对于 MySQL 集群升级,请参见MySQL 集群升级
要执行本地升级:
-
查看第 3.1 节,“开始前准备”中的信息。
-
确保升级前安装的准备工作,详细信息请参见第 3.6 节,“升级前准备”。
-
如果您使用
InnoDB
进行XA事务,如果您使用XA RECOVER
检查未提交的XA事务。如果结果返回,请提交或回滚XA事务,使用XA COMMIT
或XA ROLLBACK
语句。 -
如果您通常以
innodb_fast_shutdown
设置为2
(冷启动),配置它以执行快速或慢速关闭,执行以下语句之一:SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
在快速或慢速关机时,
InnoDB
会将其undo日志和数据文件留在一个状态,这样可以在文件格式差异之间的版本之间进行处理。 -
关机老的MySQL服务器。例如:
mysqladmin -u root -p shutdown
-
升级MySQL二进制或包。升级二进制安装时,解压缩新的MySQL二进制分发包。见获取和解压缩分发包。对于包安装,安装新的包。
-
启动MySQL 8.4服务器,使用现有数据目录。例如:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir &
如果存在加密的
InnoDB
表空间,使用--early-plugin-load
选项加载密钥ring插件。当您启动MySQL 8.4服务器时,它自动检测是否存在数据字典表。如果不存在,服务器将在数据目录中创建它们,填充元数据,然后继续其正常启动序列。在这个过程中,服务器将所有数据库对象的元数据升级,包括数据库、表空间、系统和用户表、视图和存储程序(存储过程和函数、触发器和事件调度器事件)。服务器还将删除用于元数据存储的文件。例如,在从MySQL 8.3升级到MySQL 8.4时,您可能会注意到表不再具有
.frm
文件。如果这个步骤失败,服务器将回退所有对数据目录的更改。在这种情况下,您应该删除所有redo日志文件,然后在同一个数据目录上启动您的MySQL 8.3服务器,并解决任何错误。然后,重新启动MySQL 8.3服务器并尝试再次启动MySQL 8.4服务器。
-
在上一步骤中,服务器将根据需要升级数据字典,使得在MySQL 8.3和MySQL 8.4之间的
mysql
系统数据库升级,以便您可以使用新的权限或功能。它还将Performance Schema、INFORMATION_SCHEMA
和sys
数据库升级到MySQL 8.4,并检查所有用户数据库是否与当前MySQL版本兼容。
升级过程不升级时间区表的内容。有关升级说明,请见第7.1.15节,“MySQL Server Time Zone Support”。
逻辑升级涉及从老MySQL实例导出SQL使用备份或导出工具,如mysqldump,安装新的MySQL服务器,并将SQL应用于新MySQL实例。有关需要升级的详细信息,请见第3.4节,“What the MySQL Upgrade Process Upgrades”。
对于某些 Linux 平台,MySQL 的 RPM 或 Debian 软件包安装包括 systemd 支持,以便管理 MySQL 服务器的启动和关闭。在这些平台上,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
Note使用
--routines
和--events
选项与mysqldump(如上所示),如果您的数据库包含存储程序。使用mysqldump工具将所有数据库包含在 dump 中,包括mysqldump工具提供的 MySQL 5.7.9 或更高版本中。 -
关闭老的 MySQL 服务器。例如:
mysqladmin -u root -p shutdown
-
安装 MySQL 8.4。安装说明,请参阅第 2 章,“安装 MySQL”。
-
初始化新的数据目录,详见第 2.9.1 节,“初始化数据目录”。例如:
mysqld --initialize --datadir=/path/to/8.4-datadir
将临时mysqldump密码复制到您的屏幕或错误日志中,以便后续使用。
-
启动 MySQL 8.4 服务器,使用新的数据目录。例如:
mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir &
-
重置mysqldump密码:
$> 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
Note在服务器上启用 GTIDs(
gtid_mode=ON
)时,不建议加载包含系统表的备份文件。 mysqldump 对系统表使用非事务性 MyISAM 存储引擎的 DML 指令,这种组合在 GTIDs 启用时不可行。此外,加载从启用 GTIDs 的服务器上获取的备份文件到另一个启用 GTIDs 的服务器上,会生成不同的事务标识符。 -
执行任何剩余的升级操作:
关闭服务器,然后使用
--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 系统架构进行所需的更改,以便使用新的权限或功能。此外,还将将 Performance Schema、INFORMATION_SCHEMA 和 sys 架构更新到 MySQL 8.4,并检查所有用户架构是否与当前 MySQL 版本兼容。
升级过程中不会升级时区表的内容。有关升级指南,请参阅 第7.1.15节,“MySQL Server Time Zone Support”。
本节中的信息是《在位升级》过程的附件,用于升级 MySQL 集群。
MySQL 集群升级可以作为常规的滚动升级,按照通常的三个顺序步骤进行:
-
升级 MGM 节点。
-
升级数据节点一个一个地。
-
升级 API 节点(包括 MySQL 服务器)一个一个地。
每个单个 mysqld
都有两个步骤:
-
导入数据字典。
使用
--upgrade=MINIMAL
选项重新启动服务器,以升级数据字典,但不升级系统表。MySQL 服务器必须连接到
NDB
以完成这个阶段。如果存在NDB
或NDBINFO
表,并且服务器不能连接到集群,它将以错误信息退出。Failed to Populate DD tables.
-
升级系统表通过重新启动每个单个 mysqld,而不使用
--upgrade=MINIMAL
选项。