本指南详细介绍了将 MySQL 升级到 8.4 版本的完整流程、注意事项和操作方法。
一、升级前准备 (3.1 Before You Begin)
在开始升级之前,必须仔细审阅本节信息并执行所有推荐的操作:
理解升级过程:了解升级期间可能发生的情况。请参阅第 3.4 节“MySQL 升级过程升级的内容”。
备份数据:创建完整的数据库备份以保护您的数据。此备份必须包含
mysql
系统数据库,该数据库存储了 MySQL 数据字典表和其他系统表。重要提示:
- 不支持从 MySQL 8.4 降级到 MySQL 8.3,或从一个 MySQL 8.4 版本降级到更早的 MySQL 8.4 版本。
- 唯一支持的降级替代方案是恢复升级前创建的备份。
- 因此,在启动升级过程之前备份数据是绝对必要的。
检查升级路径:审阅第 3.2 节“升级路径”,确保您计划的升级路径是受支持的。
审阅变更:审阅第 3.5 节“MySQL 8.4 中的变更”,了解升级前需要注意的变更。某些变更可能需要您采取行动。
审阅废弃和移除功能:审阅第 1.4 节“自 MySQL 8.0 以来 MySQL 8.4 的新变化”中关于废弃和移除功能的信息。如果您使用了这些功能中的任何一项,升级可能需要相应更改。
审阅配置变量变更:审阅第 1.5 节“自 8.0 以来 MySQL 8.4 中新增、废弃或移除的服务器和状态变量及选项”。如果您使用了废弃或已移除的变量,升级可能需要更改配置。
查阅发行说明:查阅 MySQL 8.4 的发行说明,了解修复、变更和新功能信息。
复制环境:如果使用了复制,审阅第 19.5.3 节“升级或降级复制拓扑”。
遵循最佳实践:审阅第 3.3 节“升级最佳实践”并相应地进行规划。
二、升级路径 (3.2 Upgrade Paths)
注意:
- 在尝试降级之前,请确保了解 MySQL 长期支持 (LTS) 和创新版本的发布模型。
- 建议在执行升级之前,使用 MySQL Shell 的升级检查器工具 (
util.checkForServerUpgrade()
) 检查升级兼容性。 - 复制拓扑的升级遵循第 19.5.3 节“升级或降级复制拓扑”中描述的滚动升级方案,该方案使用支持的单一服务器升级方法之一来升级每个单独的服务器。
- 月度快速更新 (MRU) 和热修复在此文档中也视为发布。
表:MySQL 服务器的升级路径
升级路径 | 路径示例 | 支持的升级方法 |
---|---|---|
在同一个 LTS 或 Bugfix 系列内 | 8.0.37 到 8.0.41 或 8.4.0 到 8.4.4 | 原地升级、逻辑导出导入、复制、MySQL 克隆 |
从 LTS/Bugfix 系列到下一个 LTS 系列 | 8.0.37 到 8.4.x LTS | 原地升级、逻辑导出导入、复制 |
从 LTS/Bugfix 到下一个 LTS 系列之前的创新版 | 8.0.34 到 8.3.0 或 8.4.0 到 9.0.0 | 原地升级、逻辑导出导入、复制 |
从创新系列到下一个 LTS 系列 | 8.3.0 到 8.4 LTS | 原地升级、逻辑导出导入、复制 |
从创新系列到下一个 LTS 系列之后的创新版 | 不允许 | 需要两步:8.3.0 到 8.4 LTS,然后 8.4 LTS 到 9.x 创新版 |
在同一个创新系列内 | 8.1.0 到 8.3.0 | 原地升级、逻辑导出导入、复制 |
从 MySQL 5.7 到 LTS 或创新版 | MySQL 5.7 到 8.4 | 不能跳过 Bugfix 或 LTS 系列。例如,需先将 MySQL 5.7 升级到 MySQL 8.0,再将 MySQL 8.0 升级到 MySQL 8.4。 |
三、升级最佳实践 (3.3 Upgrade Best Practices)
MySQL 支持在次要版本之间(LTS 系列内)升级和跨主版本(跨 LTS 系列)升级。升级可提供最新的功能、性能和安全性修复。
为确保成功升级到最新的 MySQL 8.4 版本,我们推荐以下最佳实践:
- 决定升级的主版本或次版本:
- 了解 MySQL 发布模型中 LTS(长期支持)和创新版本的区别。LTS 版本提供 8 年以上的支持,适用于生产环境。创新版本为用户提供最新的功能和能力。
- 次要版本升级通常较简单,而主版本升级需要战略规划和额外的升级前测试。本指南对主版本升级尤其有用。
- 决定升级类型:
- 原地升级 (In-place):替换 MySQL 服务器软件包。
- 逻辑升级 (Logical):将 SQL 从旧的 MySQL 实例导出并导入到新的实例。
- 复制拓扑升级 (Replication):考虑每个服务器在拓扑中的角色。
- 审查支持的平台:
- 如果您的当前操作系统不被新版本的 MySQL 支持,则计划升级操作系统,否则不支持原地升级。
- 查看当前支持的平台列表:https://www.mysql.com/support/supportedplatforms/database.html
- 了解 MySQL 服务器变更:
- 每个主版本都会带来新功能、行为变更、废弃项和移除项。了解这些变更对现有应用的影响至关重要。
- 参阅:第 3.5 节 “MySQL 8.4 中的变更”。
- 运行升级检查器并修复不兼容问题:
- 使用 MySQL Shell 的升级检查器工具 (
util.checkForServerUpgrade()
) 检测数据库版本之间必须解决的升级前不兼容问题。 - 连接到现有的 MySQL 服务器,并选择计划升级到的目标 MySQL 服务器版本。该工具将报告升级前需要解决的问题(例如数据类型、存储引擎等的不兼容性)。
- 当升级检查器不再报告任何问题时,您已准备好升级。
- 使用 MySQL Shell 的升级检查器工具 (
- 在测试环境中运行应用程序:
- 完成升级检查器的要求后,下一步在目标 MySQL 服务器上测试您的应用程序。
- 检查 MySQL 错误日志和应用程序日志中的错误和警告。
- 对应用程序和工作负载进行基准测试:
- 建议通过比较应用程序和工作负载在 MySQL 新旧版本上的性能表现来进行基准测试。通常,较新的 MySQL 版本会增加功能并提高性能,但在某些情况下,特定查询在升级后可能会变慢。
- 可能导致性能下降的原因包括:
- 先前的服务器配置对新版本不是最优的
- 数据类型变更
- 多字节字符集支持需要更多存储空间
- 存储引擎变更
- 索引被删除或更改
- 更强的加密
- 更强的认证
- SQL 优化器变更
- 新版本的 MySQL 需要更多内存
- 物理或虚拟硬件变慢(计算或存储)
- 有关信息及可能的缓解技术,请参阅 验证性能下降。
- 并行运行新旧 MySQL 版本:
- 为最小化风险,最好在运行升级系统的同时保持当前系统运行(并行运行)。
- 进行最终的测试升级:
- 在升级生产系统之前,进行练习和全面测试升级流程。
- 检查 MySQL 备份:
- 在执行升级之前,确认存在完整的备份并且可用。
- 升级生产服务器:
- 完成上述步骤后,即可进行生产环境升级。
- 企业支持:
- 如果您是 MySQL 企业版客户,还可以联系 MySQL 支持团队专家咨询任何问题。
四、MySQL 升级过程升级的内容 (3.4 What the MySQL Upgrade Process Upgrades)
安装新版本的 MySQL 可能需要升级现有安装的以下部分:
mysql
系统模式:包含存储 MySQL 服务器运行时所需信息的表(参见第 7.3 节 “mysql
系统模式”)。mysql
模式表分为两大类:- 数据字典表:存储数据库对象元数据。
- 系统表(即剩余的非数据字典表):用于其他操作目的。
- 其他模式:包括一些内置的、可视为服务器“拥有”的模式,以及其他用户模式:
performance_schema
、INFORMATION_SCHEMA
、ndbinfo
和sys
模式。- 用户模式。
有两个不同的版本号与可能需要升级的部分相关联:
- 数据字典版本:适用于数据字典表。
- 服务器版本(又称 MySQL 版本):适用于系统表和其他模式中的对象。
升级过程发生在两个步骤:
- 步骤 1:数据字典升级:
- 升级
mysql
模式中的数据字典表、Performance Schema、INFORMATION_SCHEMA
和ndbinfo
。 - 由服务器在启动时自动执行(除非使用
--upgrade=NONE
选项禁止)。 - 如果数据字典过期但被禁止升级,服务器将无法启动并报错退出。
- 使用
--upgrade
服务器选项控制自动升级行为:--upgrade=AUTO
(或无选项):升级所有过期的内容(步骤 1 和 2)。--upgrade=NONE
:不升级任何内容,但如果数据字典必须升级则退出报错。--upgrade=MINIMAL
:仅升级数据字典、Performance Schema 和INFORMATION_SCHEMA
(步骤 1)。注意:此选项后无法启动组复制,且其他功能可能受限。--upgrade=FORCE
:升级步骤 1 的内容,并强制升级其他所有内容(步骤 2)。启动时间可能较长。
- 升级
- 步骤 2:服务器升级:
- 升级
mysql
模式中的系统表(剩余的非数据字典表)、sys
模式和用户模式。 - 安装或升级
sys
模式(如果存在同名用户模式会报错)。 - 将系统表升级到当前结构(包括帮助表,不包括时区表)。
- 更改
mysql.db
,mysql.tables_priv
,mysql.columns_priv
,mysql.procs_priv
表主键列顺序以提升性能(对拥有大量用户和权限的系统可能耗时)。 - 使用
CHECK TABLE ... FOR UPGRADE
检查并处理所有用户模式中的所有表(可能耗时且锁表)。 - 将所有检查和修复过的表标记为当前的 MySQL 版本号。
- 注意:升级过程不会升级时区表的内容。升级时区表需手动操作,参见第 7.1.15 节 “MySQL 服务器时区支持”。
- 升级
五、MySQL 8.4 中的变更 (3.5 Changes in MySQL 8.4)
在升级到 MySQL 8.4 之前,请审阅以下部分描述的变更,以识别适用于您当前 MySQL 安装和应用程序的变更:
MySQL 8.4 中的不兼容变更:
- 空间索引:升级到 MySQL 8.4.4 或更高版本时,建议在升级前删除所有空间索引,升级完成后再重新创建它们。或者,您也可以在升级后立即(但在使用包含这些索引的表之前)删除并重新创建此类索引。更多信息参见第 13.4.10 节 “创建空间索引”。
- 移除
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
函数:MySQL 8.0 中已废弃的WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
SQL 函数在 8.4 中已移除;尝试调用它现在会导致语法错误。请改用WAIT_FOR_EXECUTED_GTID_SET()
。 authentication_fido
和authentication_fido_client
在某些平台上不再可用:由于服务器捆绑的libfido2
库升级到需要 OpenSSL 1.1.1 或更高版本的 1.13.0,authentication_fido
和authentication_fido_client
认证插件在 Enterprise Linux 6, Enterprise Linux 7, Solaris 11 或 SUSE Enterprise Linux 12 上不再可用。- 命令行选项禁止设置为
NULL
:在命令行上将服务器变量设置为 SQLNULL
是不支持的。在 MySQL 8.4 中,明确禁止将任何此类变量设置为NULL
,尝试这样做将被拒绝并报错。特定变量(如basedir
,datadir
,plugin_dir
等)除外。参见第 7.1.8 节 “服务器系统变量”。 - 更多变更信息请参阅第 1.4 节 “自 MySQL 8.0 以来 MySQL 8.4 的新变化”。
变更的服务器默认值:
- 下表列出了 MySQL 8.4 与 MySQL 8.0 相比,系统变量默认值发生变化的项目。虽然新默认值适用于大多数用例,但在特定场景或需要兼容旧配置时可能需要调整。
分类 系统变量 旧默认值 新默认值 InnoDB 变更 innodb_adaptive_hash_index
ON OFF innodb_buffer_pool_in_core_file
ON OFF innodb_buffer_pool_instances
innodb_buffer_pool_size
< 1GB: 1; 否则: 8innodb_buffer_pool_size
<= 1GB: 1; 否则:MIN( 0.5 * (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size), 0.25 * number_of_cpus)
innodb_change_buffering
all none innodb_doublewrite_files
innodb_buffer_pool_instances * 2
2 innodb_doublewrite_pages
innodb_write_io_threads
的值128 innodb_flush_method
fsync
支持则 O_DIRECT
,否则fsync
innodb_io_capacity
200 10000 innodb_io_capacity_max
MIN(2 * innodb_io_capacity, 2000)
2 * innodb_io_capacity
innodb_log_buffer_size
16777216 (16MB) 67108864 (64MB) innodb_numa_interleave
OFF ON innodb_page_cleaners
4 innodb_buffer_pool_instances
的值innodb_parallel_read_threads
4 MIN(number_of_cpus / 8, 4)
innodb_purge_threads
4 如果 number_of_cpus <= 16
: 1; 否则: 4innodb_use_fdatasync
OFF ON 组复制变更 group_replication_consistency
EVENTUAL BEFORE_ON_PRIMARY_FAILOVER group_replication_exit_state_action
READ_ONLY OFFLINE_MODE 临时表变更 temptable_max_mmap
1073741824 (1GB) 0 temptable_max_ram
1073741824 (1GB) 总内存的 3% (范围 1-4 GB) temptable_use_mmap
ON OFF - 有关 MySQL 8.4 中新增的选项或变量,请参阅 MySQL 服务器版本参考中的“MySQL 8.4 的选项和变量变更”。
- 性能模式
variables_info
表显示了每个系统变量的设置来源及其取值范围。
六、准备安装进行升级 (3.6 Preparing Your Installation for Upgrade)
在升级到最新的 MySQL 8.4 版本之前,通过执行以下初步检查,确保您当前的 MySQL 8.3 或 MySQL 8.4 服务器实例已做好升级准备:
提示: 考虑使用 MySQL Shell 升级检查器工具 (util.checkForServerUpgrade()
) 来验证 MySQL 服务器实例是否已准备好升级。您可以指定计划升级到的目标 MySQL 服务器版本(从 MySQL Server 8.0.11 到与当前 MySQL Shell 版本号匹配的 MySQL Server 版本号)。该工具执行与指定目标版本相关的自动检查,并建议您应手动进行的其他相关检查。升级检查器适用于 MySQL 的所有 Bugfix、Innovation 和 LTS 版本。MySQL Shell 安装说明请参阅 此处。
初步检查(必须不存在以下问题):
- 运行升级兼容性检查:
如果mysqlcheck -u root -p --all-databases --check-upgrade
mysqlcheck
报告任何错误,请纠正这些问题。具体包括:- 没有使用废弃数据类型或函数的表。
- 没有孤立的
.frm
文件。 - 触发器没有缺失或空的定义者 (
DEFINER
) 或无效的创建上下文(由SHOW TRIGGERS
或INFORMATION_SCHEMA.TRIGGERS
表中的character_set_client
,collation_connection
,Database Collation
属性指示)。任何此类触发器必须导出并重新导入以修复问题。
- 检查不支持分区的存储引擎:
查询报告的任何表必须更改为使用 InnoDB 或使其变为非分区表:SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
- 更改存储引擎:
ALTER TABLE table_name ENGINE = INNODB;
(参见第 17.6.1.5 节 “将表从 MyISAM 转换到 InnoDB”)。 - 移除分区:
ALTER TABLE table_name REMOVE PARTITIONING;
- 更改存储引擎:
- 检查保留关键字冲突:MySQL 8.4 中的一些新保留关键字可能使之前用作标识符的词变得非法。修复方法是使用反引号
`
引用标识符。参见第 11.2 节 “模式对象名称” 和第 11.3 节 “关键字和保留词”。 - 检查与数据字典表冲突的用户表:
查询报告的任何表必须删除或重命名 (SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql' AND LOWER(TABLE_NAME) IN ( 'catalogs', 'character_sets', 'check_constraints', 'collations', 'column_statistics', 'column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata', 'st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats', 'tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage' );
RENAME TABLE
)。这也可能需要更改使用这些受影响表的应用程序。 - 检查过长的外键约束名 (超过 64 字符):
对于约束名超过 64 字符的表,删除该约束并使用不超过 64 字符的约束名重新添加 (SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1), INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);
ALTER TABLE ... DROP FOREIGN KEY ..., ADD CONSTRAINT ... FOREIGN KEY ...
)。 - 检查 SQL 模式:
sql_mode
系统变量中不能定义已废弃的 SQL 模式。尝试使用已废弃的 SQL 模式会阻止 MySQL 8.4 启动。应修改使用已废弃 SQL 模式的应用程序以避免它们。参见服务器变更中移除的 SQL 模式。 - 确保正常关机:仅升级已正确关闭的 MySQL 服务器实例。如果实例意外关闭,请重启该实例并使用
innodb_fast_shutdown=0
关闭它后再进行升级。 - 检查视图列名长度:不能有显式定义列名超过 64 字符的视图(MySQL 5.7 允许最多 255 字符)。为避免升级错误,应在升级前修改此类视图。识别方法:使用
SHOW CREATE VIEW
或查询INFORMATION_SCHEMA.VIEWS
表检查视图定义。 - 检查 ENUM/SET 元素长度:不能有单个
ENUM
或SET
列元素超过 255 字符或 1020 字节长度的表或存储过程。在 MySQL 8.4 之前,ENUM
或SET
列元素的最大组合长度为 64K。在 MySQL 8.4 中,单个ENUM
或SET
列元素的最大字符长度为 255,最大字节长度为 1020(支持多字节字符集)。在升级到 MySQL 8.4 之前,修改任何超出新限制的ENUM
或SET
列元素。否则会导致升级失败。 - 移除废弃功能:您的 MySQL 8.3 安装不能使用 MySQL 8.4 不支持的功能。例如:
- 审阅 MySQL 8.4 中移除的功能和已移除的服务器启动选项及系统变量(参见第 1.5 节)。如果使用了其中任何一项,升级需要更改配置。
lower_case_table_names
变更注意事项:- 如果您打算在升级时将
lower_case_table_names
设置更改为1
,请确保在升级前模式和表名都是小写的。否则,由于模式或表名字母大小写不匹配,可能会导致失败。 - 使用以下查询检查包含大写字符的模式和表名:
SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME COLLATE utf8mb4_bin <> LOWER(TABLE_NAME) COLLATE utf8mb4_bin;
- 注意:不建议在升级时更改
lower_case_table_names
设置。如果lower_case_table_names=1
,升级过程会检查表和模式名是否全为小写字符。如果发现包含大写字符的表或模式名,升级过程将因错误而失败。
- 如果您打算在升级时将
升级失败处理:
如果升级到 MySQL 8.4 因上述任何问题失败,服务器将回滚对数据目录的所有更改。在这种情况下,应删除所有重做日志文件 (ib_logfile*
),在现有数据目录上重新启动 MySQL 8.3 服务器以解决错误。修复错误后,执行慢速关闭 (innodb_fast_shutdown=0
),然后再次尝试升级。
七、Unix/Linux 上基于二进制或软件包的安装升级 (3.7)
升级方法取决于平台和初始安装方式:
1. 原地升级 (In-Place Upgrade)
原地升级涉及关闭旧服务器,用新的二进制文件或软件包替换旧的,然后在现有数据目录上重启新服务器。
步骤:
- 审阅第 3.1 节信息。
- 按照第 3.6 节完成安装准备检查。
- XA 事务:如果使用 InnoDB 的 XA 事务,升级前运行
XA RECOVER
检查未提交的 XA 事务。如果有结果,使用XA COMMIT
或XA ROLLBACK
提交或回滚这些事务。 - 关机设置:如果通常配置
innodb_fast_shutdown=2
(冷关机),请配置为执行快速或慢速关机:SET GLOBAL innodb_fast_shutdown = 1; -- 快速关机 SET GLOBAL innodb_fast_shutdown = 0; -- 慢速关机 (推荐用于跨版本升级)
- 关闭旧服务器:
mysqladmin -u root -p shutdown
- 升级 MySQL 二进制文件或软件包:
- 二进制安装:解压新的 MySQL 二进制分发包 (参见 获取并解压分发版)。
- 软件包安装:安装新软件包 (注意:如果最初安装了多个 RPM 包,需升级所有包,而不仅仅是服务器包)。对于 Yum/APT/SLES 仓库安装,请使用相应的包管理器命令 (如
sudo yum update mysql-server
,sudo apt-get install mysql-server
)。 - 注意:对于使用 systemd 的平台 (RPM/Debian 包安装),使用
systemctl
管理服务 (systemctl stop mysqld
,systemctl start mysqld
),而不是mysqld_safe
。
- 启动 MySQL 8.4 服务器 (使用现有数据目录):
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir & # 或者对于 systemd 系统 sudo systemctl start mysqld
- 如果有加密的 InnoDB 表空间,使用
--early-plugin-load
选项加载密钥环插件。
- 如果有加密的 InnoDB 表空间,使用
- 自动升级:
- 服务器启动时自动检测数据字典表是否存在。如果不存在,则在数据目录中创建它们,用元数据填充,然后继续正常启动序列。
- 此过程升级所有数据库对象的元数据(数据库、表空间、系统和用户表、视图、存储程序)并移除以前用于元数据存储的文件(如
.frm
文件)。 - 失败处理:如果此步骤失败,服务器回滚更改。需删除重做日志文件,重启旧版服务器修复错误,慢速关机后重试升级。
- 此步骤还根据需要升级
mysql
系统数据库,更新 Performance Schema、INFORMATION_SCHEMA
、sys
数据库,并检查所有用户数据库与当前 MySQL 版本的兼容性。 - 注意:此过程不会升级时区表。升级时区表需手动操作,参见第 7.1.15 节。
2. 逻辑升级 (Logical Upgrade)
逻辑升级涉及使用 mysqldump
等工具从旧实例导出 SQL,安装新服务器,然后将 SQL 导入到新实例。
步骤:
- 审阅第 3.1 节信息。
- 从旧安装导出数据:
重要提示: 如果表包含生成列,请使用 MySQL 5.7.9 或更高版本附带的mysqldump -u root -p --add-drop-table --routines --events --all-databases --force > data-for-upgrade.sql
mysqldump
。可以使用INFORMATION_SCHEMA.COLUMNS
表识别带有生成列的表。 - 关闭旧服务器:
mysqladmin -u root -p shutdown
- 安装 MySQL 8.4:参见第 2 章 “安装 MySQL”。
- 初始化新数据目录:
记下屏幕上显示或写入错误日志的临时 ‘root’@‘localhost’ 密码。mysqld --initialize --datadir=/path/to/8.4-datadir
- 启动 MySQL 8.4 服务器 (使用新数据目录):
mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir & # 或者对于 systemd 系统 sudo systemctl start mysqld
- 重置 root 密码:
mysql -u root -p Enter password: **** <- 输入临时 root 密码 mysql> ALTER USER USER() IDENTIFIED BY 'your new password';
- 将导出的 SQL 导入新服务器:
注意:如果启用了 GTID (mysql -u root -p --force < data-for-upgrade.sql
gtid_mode=ON
) 且转储文件包含系统表,不建议加载转储文件。mysqldump
为非事务性的 MyISAM 系统表发出 DML 指令,这在启用 GTID 时是不允许的。另外,将启用 GTID 的服务器转储加载到另一个启用 GTID 的服务器会生成不同的事务 ID。 - 执行剩余升级操作:
- 关闭服务器,然后使用
--upgrade=FORCE
选项重启以执行剩余的升级任务:
mysqladmin -u root -p shutdown mysqld_safe --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE & # 或者对于 systemd 系统 (需在配置文件中设置 upgrade=FORCE 或命令行传递) sudo systemctl stop mysqld sudo mysqld --user=mysql --datadir=/path/to/8.4-datadir --upgrade=FORCE &
- 使用
--upgrade=FORCE
重启会强制进行步骤 2 的升级任务(升级系统表、sys
模式、检查用户模式中的所有对象)。 - 注意:此过程不会升级时区表。
- 关闭服务器,然后使用
3. MySQL 集群升级 (MySQL Cluster Upgrade)
MySQL 集群升级遵循常规滚动升级方案 (MGM 节点 -> 数据节点 -> API 节点/MySQL 服务器)。升级每个 mysqld
有两个步骤:
- 导入数据字典:使用
--upgrade=MINIMAL
选项启动新的mysqld
以升级数据字典但不升级系统表。服务器必须能连接到 NDB 集群才能完成此阶段。 - 升级系统表:不使用
--upgrade=MINIMAL
选项重启每个mysqld
。
八、使用 MySQL Yum 仓库升级 (3.8)
适用于支持的 Yum-based 平台 (参见第 2.5.1 节)。
- 选择目标系列:
- 默认情况下,MySQL Yum 仓库会将 MySQL 更新到您安装时选择的发布轨道中的最新版本(例如,8.0.x 安装不会自动更新到 8.4.x)。
- 要更新到另一个发布系列,必须首先禁用当前选定的子仓库,并为目标系列启用子仓库。编辑
/etc/yum.repos.d/mysql-community.repo
文件中的子仓库条目。 - 一般规则:从一个 Bugfix 系列升级到另一个时,应升级到下一个 Bugfix 系列,而不是跳过一个。例如,从 MySQL 5.7 升级到 8.4,应先升级到 MySQL 8.0,再升级到 8.4。
- MySQL Yum 仓库不支持原地降级。降级请参见第 4 章。
- 升级 MySQL:
注意:MySQL 服务器在通过 Yum 更新后总是会重启。sudo yum update mysql-server # 非 dnf 系统 sudo dnf upgrade mysql-server # dnf 系统 # 或者更新整个系统 sudo yum update # 非 dnf 系统 sudo dnf upgrade # dnf 系统 # 升级特定组件 (先列出:`sudo yum list installed | grep "^mysql"`) sudo yum update package-name # 非 dnf 系统 sudo dnf upgrade package-name # dnf 系统
- 升级共享客户端库:
- 使用旧的共享客户端库编译的应用程序在更新后应继续工作。
- 如果重新编译应用程序并动态链接到更新后的库,则需要在部署这些应用程序的系统上也部署 MySQL 提供的新共享库包。为此,请在这些系统上添加 MySQL Yum 仓库并安装最新的共享库。
九、使用 MySQL APT 仓库升级 (3.9)
在 Debian 和 Ubuntu 平台上,使用 MySQL APT 仓库执行原地升级。具体步骤参见 使用 MySQL APT 仓库升级 MySQL。
十、使用 MySQL SLES 仓库升级 (3.10)
在 SUSE Linux Enterprise Server (SLES) 平台上,使用 MySQL SLES 仓库执行原地升级。具体步骤参见 使用 MySQL SLES 仓库升级 MySQL。
十一、在 Windows 上升级 (3.11)
升级方法取决于现有安装方式:
1. 使用 MSI 安装程序升级
- 下载并执行最新的 MySQL Server MSI。
- 虽然不支持直接跨系列升级,但“自定义安装”选项允许指定安装位置(否则默认安装到
C:\Program Files\MySQL\MySQL Server 8.4\
)。 - 运行捆绑的 MySQL 配置器 (MySQL Configurator) 来配置新安装。
参考链接:https://dev.mysql.com/doc/refman/8.4/en/upgrading.html