RDS MySQL支持在控制台中直接升级数据库版本。此外,您也可以通过迁移的方式间接升级数据库版本,例如升级已开启TDE功能的实例。
目录
如果通过方式一无法升级成功,您可以使用方式二。
其他引擎升级数据库版本请参见:
方式一:通过控制台直接升级数据库版本
功能介绍
支持在控制台进行如下形式的版本升级:
-
RDS MySQL 5.7 → RDS MySQL 8.0
-
RDS MySQL 5.6 → RDS MySQL 5.7
-
RDS MySQL 5.5 → RDS MySQL 5.6
功能限制
限制类别 |
限制详情 |
实例限制 |
仅支持高可用版本地SSD盘实例。 |
若主实例有多个只读实例,则只读实例的规格均要保持一致(规格码一致),主实例和只读实例之间规格不做要求。 若主实例有只读实例,则只读实例数量不能超过5个。 |
|
升级前,请确保实例状态为 运行中 ,如果为其他状态(如 重启中 , 创建网络连接中 等),请等待任务结束后再发起数据库版本升级任务。 |
|
高可用版实例的主备节点状态健康且无延迟时,才支持升级。您可通过控制台 监控与报警 功能查看 备节点复制线程状态(单位:秒) 和 备节点复制线程状态(单位:秒) 监控指标。 |
|
升级限制 |
不支持跨大版本升级。例如MySQL 5.6无法直接升级至MySQL 8.0,需要先升级到MySQL 5.7,再升级MySQL 8.0。 |
升级后不支持降级。
说明
升级完成后,旧版本的备份集无法用于恢复新版本实例,如需进行恢复操作,请使用实例升级后生成的备份集。 |
|
加密限制 |
如果实例开启了SSL功能,则不支持升级,请先 关闭SSL加密 后再升级。 |
如果实例开启了TDE功能,则不支持通过控制台直接升级,请参见 方式二:通过数据迁移DTS升级数据库版本 。 |
|
数据库限制 |
数据库中创建了事件(EVENT)的实例不支持从5.7升级到8.0,您可以先删除EVENT,升级后再重新创建。 |
数据库中的存储过程、触发器、视图或函数中若包含 MySQL 8.0不支持的特性 ,则升级失败。 |
|
如果实例中数据表数量超过20万张,则不支持升级,请在升级前清理冗余表。 |
|
如果您使用了MyISAM、Memory,TokuDB,Sphinx或RocksDB引擎,则不支持升级,请先转换为InnoDB引擎。
说明
如果您的数据库已是InnoDB引擎,但部分表仍是其他引擎,请使用
|
|
升级前请检查您的业务是否对MySQL 5.7系统表(sys、mysql、information_schema、performance_schema库下的表)有依赖,由于MySQL 5.7中的部分系统表升级至8.0后会发生变化(如表被移除、表名变化、表结构变化等),若业务依赖这些发生变化的表,有可能出现错误。 |
|
规格限制 |
系统先升级备实例,完成后进行主备切换,再升级主实例。升级过程将造成不超过五分钟的业务中断,请您尽量在业务低峰期执行升级操作。
升级前准备
-
请务必仔细对比升级前后版本差异,如有必要建议新建一个RDS MySQL 8.0版本实例进行语法测试,避免应用使用的低版本语法或特性在升级高版本后不支持。具体版本差异请参见如下文档:
-
了解RDS MySQL目标新版本的优势。更多信息,请参见 附录一:MySQL 5.7升级MySQL 8.0的优势 或 附录二:MySQL5.6升级MySQL 5.7的优势 。
-
建议您克隆原实例,先使用克隆实例进行升级测试,确认各项功能正常后再升级原实例。
-
升级前请检查最近一周是否有全量数据备份的成功记录,必要时请进行一次全量数据备份。
-
在数据库升级过程中,RDS服务会出现闪断,请您尽量在业务低峰期执行升级操作,或确保您的应用有自动重连机制。
-
升级前请确保预留充足磁盘可用空间。
-
升级前请查看 保留关键字 ,您在创建自定义函数的过程中应避免使用这些保留关键字。
-
建议调整日志清理策略,增加本地日志保留时长以及最大存储空间占有率。具体操作,请参见 长期保留备份 。
-
如果升级到MySQL 8.0版本,请在升级前确认数据库表中的comment取值是否存在乱码,如果存在,comment将被清空。
说明这是由于MySQL 8.0的20221231及之后小版本引入参数loose_upgrade_clear_invalid_comment,该参数取值为ON(即默认值)时,在升级过程中会自动清空表、字段、索引的注释乱码,避免升级失败。
-
为确保MySQL在新版本中的稳定性和性能,完成MySQL数据库大版本升级后,RDS不再支持查看和修改部分在高版本废弃的低版本的参数。在大版本升级前,建议您备份相关参数的修改记录,以便后续操作和审计。
方式二:通过数据迁移DTS升级数据库版本
对于不支持通过控制台直接升级的实例,您可以按如下步骤间接升级:
例如您可以创建MySQL 8.0的新实例,然后将开启了TDE功能的MySQL 5.7实例的数据迁移至新实例,最后释放MySQL 5.7的原实例。
跨版本迁移请您务必先测试兼容性,并观察一段时间,确认正常后,再释放原实例。
附录一:MySQL 5.7升级MySQL 8.0的优势
-
提高了安全性,并在账号管理中实现了更大的灵活性。
-
支持资源组的创建和管理。
-
InnoDB存储引擎的功能增强。
-
新增字符集、数据类型、语法、新型备份锁、optimizer_switch标志等支持。
-
JSON、XML增强。
-
Optimizer优化器功能增强。
-
复制性能增强。
-
支持创建多值索引、派生条件下推优化。
-
支持读取MySQL授权表。
-
支持资源分配控制。
附录二:MySQL5.6升级MySQL 5.7的优势
-
增加密码管理、账号锁定、加密连接等功能,提高数据库的安全性。
-
支持在线DDL操作。例如RENAME INDEX重命名索引等。
-
改进了InnoDB引擎的可扩展性和临时表的性能,实现更快的数据加载速度。
-
支持JSON。
-
支持针对分区表的索引条件下推(ICP),以及全新的InnoDB空间索引。
-
优化了大部分解析器、优化器和成本模型,提高数据库的可维护性、可扩展性和性能。
-
扩展支持的字符集,包括中国国家标准规定的GB18030字符集。
-
提供ngram全文解析器插件,支持中文、日文和韩文。
-
优化源转储线程,减少锁的争用,提高了源吞吐量。
-
大幅改进了复制延迟问题。
-
新增sys系统库,提供多个监控项并减少存储空间占用,显著提高数据库的易用性。
附录三:MySQL 8.0和MySQL 5.7版本功能差异列表
下表中仅列出MySQL 8.0与5.7的部分重要差异,其它各版本间差异,请参见 MySQL Release Notes 。
特性 |
5.7 |
8.0 |
GRANT ... IDENTIFIED BY PASSWORD 语法 |
支持 |
不支持 |
PASSWORD()函数 |
支持 |
不支持 |
FLUSH QUERY CACHE 、 RESET QUERY CACHE 语法 |
支持 |
不支持 |
SQL_MODE 系统变量的参数:DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS |
支持 |
不支持 |
GROUP BY 语法默认自动排序 |
支持 |
不支持 |
包含 EXTENDED 或 PARTITIONS 关键字的相关语法 |
支持 |
不支持 |
ENCODE()、DECODE()、ENCRYPT()等加密函数 |
支持 |
不支持 |
空间分析相关函数。更多信息,请参见 官方文档 |
支持 |
不支持 |
函数以前接受WKB值的字符串或几何参数,现在不再允许几何参数 |
支持 |
不支持 |
将 \N 解析为 NULL |
支持 |
不支持 |
PROCEDURE ANALYSE()函数 |
支持 |
不支持 |
通过NDB存储引擎创建分区表 |
支持 |
不支持 |
通过InnoDB存储引擎压缩临时表 |
支持 |
不支持 |
JSON_APPEND()函数 |
支持 |
不支持 |
在共享表空间中放置表分区的支持 |
支持 |
不支持 |
ALTER TABLE ... UPGRADE PARTITIONING 语法 |
支持 |
不支持 |
附录四:MySQL 5.7和MySQL 5.6版本功能差异列表
下表中仅列出MySQL 5.7与5.6的部分重要差异,其它各版本间差异,请参见 MySQL Release Notes 。
特性 |
5.6 |
5.7 |
GTID模式下的 CREATE...AS SELECT |
支持 |
不支持 |
GTID模式下在事务中使用临时表 |
支持 |
不支持 |
在分区表中指定分区键 |
支持 |
不支持 |
ENGINE_NO_CACHE 语法 |
支持 |
不支持 |
不可见索引(Invisible Indexes) |
支持 |
不支持 |
UPDATE non_affected_rows INSERT 语法 |
支持 |
不支持 |
Proxy相关命令 |
使用SET命令方式 |
使用Call Procedure模式 |
TokuDB、Sphinx、RocksDB和Memory引擎 |
支持 |
不支持 |
str_ord()函数 |
支持 |
不支持 |
raiseerror()函数 |
支持 |
不支持 |
OPTIMIZE TABLE table ASYNC |
支持 |
不支持 |
ENGINE_NO_CACHE |
支持 |
不支持 |
表INFORMATION.TABLE_UTILIZATION |
支持 |
不支持 |
表INFORMATION_SCHEMA.INNODB_LOCK_WAITS中的 requesting_thd_id 列和 blocking_thd_id 列 |
支持 |
不支持 |
表INFORMATION_SCHEMA.INNODB_RSEG |
支持 |
不支持 |
表INFORMATION_SCHEMA.INNODB_IO_STATUS |
支持 |
不支持 |
压缩列功能 |
支持 |
不支持 |
Query Plan Cache |
支持 |
不支持 |
Limit + Union语法 |
不需要括号 |
需要括号 |
SHOW FULL PROCESSLIST 语法 |
MySQL 5.7返回结果删除 memory 和 query_memory 列。 |
|
max_statement_time 和 max_execution_time |
MySQL 5.7删除 max_statement_time ,只保留 max_execution_time 。 |
|
RDS_SQL_MAX_AFFECTED 语法 |
MySQL 5.7不再支持通过 RDS_SQL_MAX_AFFECTED 限制单条 UPDATE 或 DELETE 影响的记录数。通过变量 rds_sql_max_affected_rows 控制。 |
|
并发性能优化调整 |
MySQL 5.7不再支持通过如下参数进行并发控制:
|
|
连接数变量的调整 |
MySQL 5.7删除如下变量:
|
|
复制相关调整 |
|
|
日志相关调整 |
MySQL 5.7错误日志调整:
|
常见问题
-
问:升级过程中,实例为什么会出现闪断?是否会有其他严重风险?
答:为保证业务稳定,升级采用先备后主的方式。备实例升级完成后,业务自动切换至备实例,引发闪断。无其他严重风险。
-
问:升级时,主备实例会一起升级吗?
答:系统先行升级备实例,再升级主实例。
-
问:基础版实例控制台上为什么没有数据库版本的升级入口?基础版实例应如何升级?
答:基础版实例当前不支持直接升级,因此控制台上无法看到升级入口。您可以先将目标实例从 基础版升级为高可用版 ,然后再 升级数据库版本 。
说明-
当前仅支持高可用版本地SSD盘实例通过控制台直接升级数据库版本。
-
MySQL 5.7基础版(SSD云盘)在升级为高可用版时,支持将存储类型从SSD云盘变更为本地SSD盘。
-
-
Q:数据库版本升级期间,是否能变更实例?
A:数据库版本升级期间不支持变更实例,必须在版本升级完成后,才可以进行其他操作。
-
Q:数据库版本是否支持自动升级?
A:暂不支持自动升级数据库版本。
相关API
API |
描述 |
升级RDS实例版本。 |