全部产品
Search
文档中心

云数据库 RDS:升级数据库版本

更新时间:Mar 14, 2024

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盘实例。

若主实例有多个只读实例,则只读实例的规格均要保持一致(规格码一致),主实例和只读实例之间规格不做要求。

若主实例有只读实例,则只读实例数量不能超过8个。

建议先释放只读实例,主实例升级完成后再重新创建只读实例

升级前,请确保实例状态为运行中,如果为其他状态(如重启中创建网络连接中等),请等待任务结束后再发起数据库版本升级任务。

高可用系列实例的主备节点状态健康且无延迟时,才支持升级。您可通过控制台监控与报警功能查看节点复制线程状态(单位:秒)节点复制延迟(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引擎,但部分表仍是其他引擎,请使用ALTER TABLE <表名> engine=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会进行实例切换,请您尽量在业务低峰期执行升级操作,或确保您的应用有自动重连机制。实例切换的影响请参见实例切换的影响

  • 升级前请确保预留充足磁盘可用空间。

  • 升级前请查看保留关键字,您在创建自定义函数的过程中应避免使用这些保留关键字。

  • 如果升级到RDS MySQL5.7版本,请在升级前检查全文索引及版本信息,避免出现数据损坏。详情请参见常见问题

  • 建议调整日志清理策略,增加本地日志保留时长以及最大存储空间占有率。具体操作,请参见修改本地日志策略

  • 如果升级到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 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.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返回结果删除memoryquery_memory列。

max_statement_timemax_execution_time

MySQL 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显示表名。

常见问题

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

    A:为保证业务稳定,升级采用先备后主的方式,备实例升级完成后,业务自动切换至备实例。无其他严重风险。主备切换的影响请参见主备切换的影响

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

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

  • Q:基础系列实例控制台上为什么没有数据库版本的升级入口?基础系列实例应如何升级?

    A:基础系列实例当前不支持直接升级,因此控制台上无法看到升级入口。您可以先将目标实例从基础系列升级为高可用系列,然后再升级数据库版本

    说明
    • 当前仅支持高可用系列本地SSD盘实例通过控制台直接升级数据库版本。

    • MySQL 5.7基础系列(SSD云盘)在升级为高可用系列时,支持将存储类型从SSD云盘变更为本地SSD盘。

  • Q:数据库版本升级期间,是否能变更实例?

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

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

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

  • Q:数据库版本是否支持降级?

    A:不支持降级,包括升级后降级以及对原版本降级。

  • Q:RDS MySQL 5.6升级至RDS MySQL 5.7时,升级失败,提示“当前实例有全文索引且小版本低于 20221130,请先进行小版本升级后再进行删除、重建全文索引”或“当前实例包含建立在系统表空间的全文索引,请删除并重建相应全文索引后再进行升级操作”,问题原因和解决方案是什么?

    A:问题原因和解决方案如下:

    • 问题原因

      由于 MySQL 的历史原因,较低版本的 MySQL 5.6 在创建全文索引(Full-Text Index)时会建立在系统表空间(System Tablespace)之上。当升级到 5.7 或进一步升级到 8.0 后,建立在系统表空间的全文索引有概率会导致表空间损坏,因此需要在升级前进行处理,避免实例数据损坏和不可访问等问题。

      说明

      RDS MySQL 5.6 20221130 对该问题进行了修复,全文索引将建立在单独的表空间之上。

    • 解决方案

      重要

      老版本 RDS MySQL 5.6 全文索引会创建在系统表空间,因此需要确保升级前的版本是 RDS MySQL 5.6 20221130 或之后的版本。如您的版本较低,请先升级到最新的 RDS MySQL 5.6 版本。

      1. 根据提示中的表名,删除建立在系统表空间的全文索引。

        # 删除全文索引
        ALTER TABLE $table_name DROP INDEX $fts_name;
      2. 重新创建全文索引。

        # 重新创建全文索引
        ALTER TABLE $table_name ADD FULLTEXT INDEX $fts_name;
      3. 建立完索引后,可以使用如下SQL对当前实例的全文索引进行检查。SQL会返回建立在系统表空间的全文索引,如查询结果为空,则RDS MySQL5.6升级至RDS MySQL5.7的过程中不会因为该问题而导致失败。

        # 查询建立在系统表空间的全文索引
        SELECT NAME FROM information_schema.INNODB_SYS_TABLES WHERE TABLE_ID IN ( SELECT CONV(SUBSTRING_INDEX(SUBSTRING_INDEX(NAME, '_', -4),'_', 1),16,10) FROM INNODB_SYS_TABLES WHERE NAME LIKE '%fts_00000000%' AND SPACE = 0);

相关API

API

描述

RDS MySQL升级数据库大版本

升级RDS实例版本。