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盘实例。 |
主实例下面如果有多个只读实例,且只读实例之间的规格不相同,则不支持升级。建议先释放只读实例,主实例升级完成后再重新创建只读实例。 | |
升级前,请确保实例状态为运行中,如果为其他状态(如重启中,创建网络连接中等),请等待任务结束后再发起数据库版本升级任务。 | |
高可用版实例的主备节点状态健康且无延迟时,才支持升级。您可通过控制台监控与报警功能查看备节点复制线程状态 (单位:秒)和备节点复制线程状态 (单位:秒)监控指标。 | |
升级限制 | 不支持跨大版本升级。例如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引擎,但部分表仍是其他引擎,请使用 ALTER TABLE <表名> engine=InnoDB; 命令将表也转换为InnoDB引擎后,再进行升级。 | |
规格限制 | 部分已下线的历史规格实例无法进行版本升级,请先进行规格升级。更多信息,请参见变更配置。 |
重要 系统先升级备实例,完成后进行主备切换,再升级主实例。升级过程将造成不超过五分钟的业务中断,请您尽量在业务低峰期执行升级操作。
升级前准备
- 请务必仔细对比升级前后版本差异,如有必要建议新建一个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 MySQL升级数据库大版本 | 升级RDS实例版本。 |