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不再支持查看和修改部分在高版本废弃的低版本的参数。在大版本升级前,建议您备份相关参数的修改记录,以便后续操作和审计。
  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 配置信息区域单击升级数据库版本
    说明 如果未找到该入口,请确认实例版本是否符合升级的要求。
  3. 在弹出的对话框中,选择立即切换在可维护时间段内进行切换,并单击确定
    • 立即切换:立即开始升级。
    • 在可维护时间段内进行切换:在可维护时间段升级。您也可以单击可维护时间段右侧的设置快速修改可维护时间段。
    说明 升级过程中,实例的状态为迁移版本中

方式二:通过数据迁移DTS升级数据库版本

对于不支持通过控制台直接升级的实例,您可以按如下步骤间接升级:

  1. 创建新实例
  2. 数据迁移至新实例
  3. 释放原实例

例如您可以创建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.78.0
GRANT ... IDENTIFIED BY PASSWORD语法支持不支持
PASSWORD()函数支持不支持
FLUSH QUERY CACHERESET QUERY CACHE语法支持不支持
SQL_MODE系统变量的参数:DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS支持不支持
GROUP BY语法默认自动排序支持不支持
包含EXTENDEDPARTITIONS关键字的相关语法支持不支持
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.65.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返回结果删除memoryquery_memory列。
max_statement_timemax_execution_timeMySQL 5.7删除max_statement_time,只保留max_execution_time
RDS_SQL_MAX_AFFECTED语法MySQL 5.7不再支持通过RDS_SQL_MAX_AFFECTED限制单条UPDATEDELETE影响的记录数。通过变量rds_sql_max_affected_rows控制。
并发性能优化调整MySQL 5.7不再支持通过如下参数进行并发控制:
  • innodb_adaptive_tickets_algo
  • innodb_min_concurrency_tickets
  • rds_threads_running_ctl_mode
  • rds_threads_running_high_watermark
  • rds_filter_key_cmp_in_order
  • rds_reset_all_filter
  • rds_sql_delete_filter
  • rds_sql_select_filter
  • rds_sql_update_filter
  • rds_strict_concurrency
  • rds_thread_extra_concurrency
  • rds_strict_trx_idle_timeout
  • rds_sql_buf_read_bandwidth
  • rds_sql_buf_read_threshold_bytes
  • rds_sql_buf_write_bandwidth
  • rds_sql_buf_write_threshold_bytes
  • rds_sql_max_iops
连接数变量的调整MySQL 5.7删除如下变量:
  • extra_max_connections
  • rds_root_connections
  • rds_sysinfo_connections
  • rds_sysinfo_user_list
复制相关调整
  • MySQL 5.7兼容性调整:
    • 不再支持GTID和非GTID之间的复制。
    • sql_slave_skip_counter不能再用于GTID。
    • 不再支持CREATE .... SELECT
  • MySQL 5.7 slave相关调整:
    • SHOW SLAVE LAG不再支持。
    • SHOW SLAVE STATUS不再支持超时。
    • SHOW SLAVE STATUS显示的信息变少。
    • slave的sql_thread不再支持执行超时。
    • slave的sql_thread不再支持跳过某些语句。
  • MySQL 5.7 Binlog调整:
    • 不再支持传输速度调整。
    • 不再支持rds_rpl_receive_buffer_difftime
    • 不再支持rds_rpl_receive_buffer_size
日志相关调整MySQL 5.7错误日志调整:
  • 不再记录SHUTDOWN的IP、user和io/net latency。
  • 不再支持Duplicate key显示表名。

常见问题

  • 问:升级过程中,实例为什么会出现闪断?是否会有其他严重风险?

    答:为保证业务稳定,升级采用先备后主的方式。备实例升级完成后,业务自动切换至备实例,引发闪断。无其他严重风险。

  • 问:升级时,主备实例会一起升级吗?

    答:系统先行升级备实例,再升级主实例。

  • 问:基础版实例控制台上为什么没有数据库版本的升级入口?基础版实例应如何升级?
    答:基础版实例当前不支持直接升级,因此控制台上无法看到升级入口。您可以先将目标实例从基础版升级为高可用版,然后再升级数据库版本
    说明
    • 当前仅支持高可用版本地SSD盘实例通过控制台直接升级数据库版本。
    • MySQL 5.7基础版(SSD云盘)在升级为高可用版时,支持将存储类型从SSD云盘变更为本地SSD盘。
  • Q:数据库版本升级期间,是否能变更实例?

    A:数据库版本升级期间不支持变更实例,必须在版本升级完成后,才可以进行其他操作。

  • Q:数据库版本是否支持自动升级?

    A:暂不支持自动升级数据库版本。

相关API

API描述
RDS MySQL升级数据库大版本升级RDS实例版本。