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引擎,但部分表仍是其他引擎,请使用 ALTER TABLE <表名> engine=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不再支持查看和修改部分在高版本废弃的低版本的参数。在大版本升级前,建议您备份相关参数的修改记录,以便后续操作和审计。

  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.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不再支持通过如下参数进行并发控制:

  • 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实例版本。