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个。 | |
升级前,请确保实例状态为运行中,如果为其他状态(如重启中,创建网络连接中等),请等待任务结束后再发起数据库版本升级任务。 | |
高可用系列实例的主备节点状态健康且无延迟时,才支持升级。您可通过控制台监控与报警功能查看节点复制线程状态(单位:秒)和节点复制延迟(second)(单位:秒)监控指标。 | |
升级限制 | 不支持跨大版本升级。例如MySQL 5.6无法直接升级至MySQL 8.0,需要先升级到MySQL 5.7,再升级MySQL 8.0。 |
升级后不支持降级。 说明 升级完成后,旧版本的备份集无法用于恢复新版本实例,如需进行恢复操作,请使用实例升级后生成的备份集。 | |
加密限制 | 如果实例开启了SSL功能,则不支持升级,请先设置SSL加密后再升级。 |
如果实例开启了TDE功能,则不支持通过控制台直接升级,请参见方式二:通过数据迁移DTS升级数据库版本。 | |
数据库中的存储过程、触发器、视图或函数中若包含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后会发生变化(如表被移除、表名变化、表结构变化等),若业务依赖这些发生变化的表,有可能出现错误。 | |
规格限制 | |
代理限制 | 如果实例使用了代理,代理的小版本需要高于或等于1.13.41才支持升级数据库版本。如果代理小版本不符合要求,请先升级代理小版本至符合要求的版本后,再升级数据库版本。 升级代理小版本的操作方法,请参见升级独享代理内核小版本。 |
系统先升级备实例,完成后进行主备切换,再升级主实例。升级过程将造成不超过五分钟的业务中断,请您尽量在业务低峰期执行升级操作。
升级前准备
请务必仔细对比升级前后版本差异,如有必要建议新建一个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:暂不支持自动升级数据库版本。
Q:数据库版本是否支持降级?
A:不支持降级,包括升级后降级以及对原版本降级。
相关API
API | 描述 |
升级RDS实例版本。 |