本文介绍如何通过数据迁传输服务(Data Transmission Service,简称DTS)实现将MySQL 5.6版本的RDS实例升级到MySQL 5.7版本。

前提条件

因为MySQL 5.6与MySQL 5.7版本支持的特性不同,所以如果使用了MySQL 5.6支持但是MySQL5.7不支持的语法或者特性,则需要手动调整代码实现,详细特性见表 1

因为升级操作是通过2个RDS MySQL实例间进行数据同步实现的,所以会需要创建同等或以上规格实例。

下面以深圳地域实例为例,完成MySQL版本升级。

创建RDS MySQL 5.7实例

  1. 在登录账号后,进入 RDS管理控制台 > 实例列表,单击待升级的实例名称。
  2. 实例详情页,查看并记录待升级的RDS MySQL 5.6实例信息和规格:
    • 可用区
    • CPU信息
    • 数据库内存
    • 最大IOPS
    • 存储空间
    待升级实例规格带升级实例规格
  3. 返回实例列表,单击创建实例
  4. 基础资源页面选择新实例规格。2中提到的关键规格需要等于或大于RDS MySQL 5.6实例。
    1. 选择数据库类型及版本为MySQL 5.7,选择主节点可用区,这里选择华南可用区D。
      说明 建议选择待升级的实例主节点的可用区,相同可用区内进行数据同步,可以提高升级的稳定性。
      创建升级实例2
    2. 选择规格不低于原RDS MySQL 5.6实例。
      创建升级实例3
    3. 单击下一步:实例配置
  5. 创建RDS MySQL 5.7实例。
    1. 实例配置页面确认规格等信息后,单击下一步:确认订单
    2. 确认订单页面,确认订单详细,并勾选服务协议,单击去支付
    3. 支付页面,单击订购,完成新实例创建。
    预计等待1~5分钟左右,返回到RDS管理控制台,单击实例列表,可以看到新建的RDS MySQL 5.7版本的实例。新实例创建成功
  6. 开启SSL或TDE。
    说明 新实例的SSL与TDE配置需要与原实例配置相同。如果原实例有开启SSL或者TDE,则新实例必须开启。
    1. 单击新实例名称,进入基本信息页面。
    2. 在页面左侧列表单击数据安全性,在页面右侧切换到SSL页签,设置SSL证书信息为已开通。
      说明 开通SSL预计花费5分钟左右,过程中实例不可用。
      开通SSL
    3. 在页面右侧,切换到TDE页签,切换TDE状态开关为已开通状态。
      说明

      开通时间预计在5分钟左右,过程中实例不可用。

      开通TDE
  7. 为RDS MySQL 5.7实例创建高权限账号。
    说明 因数据同步需要使用高权限账号,所以在创建完新实例后,需要配置一个高权限账号。
    1. 在页面左侧列表中选择账号管理,在页面右侧用户账号页签,单击创建账号
      创建高权限账号1
    2. 在弹出的创建账号窗口中,填写账号名称账号类型密码等信息,单击创建完成账号创建。
      创建高权限账号2

      在账号列表中可以看到创建的账号信息,如果状态为未激活,等待系统完成高权限账号创建即可。

      激活高权限账户

配置DTS

DTS是一个阿里云提供的数据传输服务,支持同构或异构数据源之间的数据迁移,同时提供了库表列三级映射、数据过滤等多种ETL特性,DTS详细介绍请参见什么是数据传输服务DTS

  1. 创建数据同步作业。
    1. 切换到数据传输服务控制台
    2. 在页面左侧列表中选择数据同步,在页面右侧同步作业列表选择升级实例所在地域,在右侧单击创建同步作业,进入同步作业配置页面。
      创建同步作业

      这里根据之前的配置,选择华南1(深圳)

    3. 在弹出页面中选择需要购买的链路。这里选择后付费模式,进入数据传输服务(后付费) 页面进行配置及购买。
      数据传输服务配置
      说明 为了保证有更高的容错性,完成平滑升级(即在升级遇到问题时,也不影响数据库服务),这里选择使用数据传输服务中的双向数据同步链路。
    4. 单击立即购买,进入确认订单页面。
    5. 勾选服务协议复选框后,单击立即开通,完成数据同步服务创建。
      创建数据同步服务
    6. 查看数据同步作业。单击管理控制台页面,返回数据传输页面,在页面左侧列表单击数据同步,在右侧同步作业列表中选择同步作业目标实例所在地域。这里选择华南1(深圳)
      在页面右下的同步作业列表中,可以看到创建的同步链路信息,包含有同步作业名称,及同步方向为正向反向的同步链路。查看同步作业信息
  2. 配置正向同步链路。
    1. 在同步作业列表的操作列中,单击正向同步链路右侧的配置同步链路链接,跳转到创建同步作业页面。
      进入配置正向同步链路
    2. 创建同步作业页面,根据实例情况选择实例ID链接方式等选项,单击授权白名单并进入下一步,跳转至选择同步对象页面。
      创建同步作业2
      其中:
      • 1:实例ID选择待升级的实例,此处为RDS MySQL 5.6实例。
      • 2、5:按照实例实际配置选择连接方式
      • 3:实例ID选择升级后的实例,此处为RDS MySQL 5.7实例。
      • 4:数据库账号密码,请使用之前配置的MySQL 5.7实例的高权限账号。
    3. 选择同步对象页面,完成冲突修复策略源库对象等配置,单击下一步
      配置正向链路
    4. 高级设置页面中勾选勾选结构初始化全量数据初始化复选框,单击预检查并启动
      配置正向链路高级设置

      弹出预检查窗口,完成同步前检查。

      预检查窗口
      系统检查完成并同步初始化后,正向链路切换为同步中状态。正向同步链路配置完成
  3. 配置反向同步链路。
    说明 反向同步链路配置项与正向同步链路配置步骤基本相同。
    1. 单击作业列表中反向链路操作配置同步链路链接,进入选择同步通道的源及目标实例页面。
    2. 在页面中填写源实例及目标实例信息,单击授权白名单并进入下一步,进入选择同步对象页面。
      配置反向同步链路1
      其中:
      • 源实例:创建的RDS MySQL 5.7实例。
      • 目标实例:原RDS MySQL 5.6实例。
    3. 与正向链路一样进行配置,单击下一步,进入高级设置页面。
      反向同步链路配置2
    4. 在页面中勾选结构初始化全量数据初始化复选框,单击预检查并启动,启动预检查。
      配置反向同步链路3
    弹出预检查窗口,等待预检查完毕。反向同步链路初始化等待同步完成,作业链接的反向链路行状态列会变更为同步初始化中 > 同步中反向同步链路同步中
    说明
    • 同步时间依赖数据库实例的数据量以及DTS传输速率,例如实例的数据量为2.88G,DTS同步速度显示为约454KB/s,耗时可预估为2.88×1024×1024/454=6495秒,100分钟左右。如果希望加快同步速度,可以单击同步任务列表上的操作升级来升级链路规格。
    • 同步过程中遇到问题,请参见RDS MySQL实例间的双向同步

同步其它配置

当前已经完成了数据同步,现需要将原实例中的其它配置迁移到新实例上来。

  1. 将原实例中的账号同步到新实例中。
    1. 切换到RDS管理控制台页面,左侧列表中选择实例列表,在页面右侧的实例ID/名称列,单击升级的RDS MySQL 5.7实例名称,打开实例基本信息页面。
      同步账号
    2. 页面左侧列表中选择账号管理,在页面右侧进行账号配置。
      同步账号2
  2. 左侧列表中单击基本信息,配置白名单只读实例备灾实例等。
    配置实例基本信息
  3. 修改数据库连接。
    1. 在左侧列表中单击数据库连接,在右侧页面中单击修改连接地址,弹出修改连接地址窗口。
      修改数据库连接
    2. 修改连接地址窗口中,更改连接地址为原实例连接地址,单击确定保存生效。
      修改连接地址2
    3. 同b步骤,将原实例链接地址改为其它地址,例如在结尾处添加“-5.6”信息。

释放原实例

待业务平稳运行一段时间(如几天)后,可以将DTS双向同步链路释放,同时释放原实例。

常见问题

问题:如下图所示,当原RDS MySQL 5.6实例(A1-1)下拥有一个自建MySQL 5.7实例(A1-2)时,如何升级?常见问题场景1
说明
  • A1-1:待升级的RDS MySQL 5.6实例,为master节点。
  • A1-2:ECS实例,搭载有自建的MySQL 5.7版本数据库,为slave节点。
  • B1:新创建的RDS MySQL 5.7实例,为升级后的master节点。
操作思路:
  1. 按照前文的步骤将A1-1与B1建立双向的DTS链路。等B1实例的数据追平A1-1实例,停止向A1-1实例写入数据,等待3-5分钟。
  2. 将A1-2设置为B1的slave节点。在A1-2实例上进行操作,有两种方式:
    • 通过master_log_pos和master_log_file的方式。
    • 通过GTID的方式。
  • 通过master_log_pos和master_log_file的方式
    1. 在A1-2实例上执行如下命令:
      stop slave;
      reset slave all;
    2. 在B1实例上执行如下命令,并记录下FilePosition的值:
      show master status;
    3. 回到A1-2实例上,执行如下命令:
      change master to master_host='rm-wz9******.mysql.rds.aliyuncs.com', master_user='userName', master_password='yourPassword',master_log_file='mysql-bin.******',master_log_pos=******;
      start slave;

      其中,master_log_filemaster_log_pos的值为上一步的FilePosition的值。

  • GTID方式
    1. 在A1-2实例上执行如下命令:
      stop slave;
      reset slave all;
      reset master;
    2. 在B1实例上执行如下命令,并记录Executed_Gtid_Set的值:
      show master status;
    3. 在A1-2实例上执行如下命令:
      change master to master_host='rm-wz9*******.mysql.rds.aliyuncs.com', master_user='userName', master_password='Password';
      set global GTID_PURGED='037*****-****-****-****-************:*-****7';
      start slave

      其中,GTID_PURGED的值来源于Executed_Gtid_Set

问题:MySQL 5.6与MySQL 5.7存在特性或功能上的差异,有哪些是需要额外注意的?

因为MySQL版本的差异,部分MySQL 5.6支持的功能或者场景,在升级MySQL 5.7后需要调整代码来实现。详细差异见下表:

表 1. 表MySQL 5.7不支持的MySQL 5.6特性或语法
特性、语法 MySQL 5.6 MySQL 5.7
GTID模式下面的create as select语法 支持 不支持
GTID模式下在事务中使用临时表的语法 支持 不支持
多源复制功能 支持 不支持
select for update waitselect from update语法 支持 不支持
update non_affected_rows insert语法 支持 不支持
select statement timeout 支持 不支持
select ENGINE_NO_CACHE 特性 支持 不支持
不可见索引 支持 不支持
RocksDB引擎 支持 不支持