RDS MySQL迁移至PolarDB MySQL版

更新时间: 2023-11-22 16:05:40

手动部署

100

https://www.aliyun.com/solution/tech-solution/rds_polardb

方案概览

PolarDB MySQL 版是阿里云自研的云原生数据库,产品基于云原生架构、计算存储分离、软硬件一体化设计,具有一写多读或多写多读、共享存储、60亿行数据稳定运行、秒级DDL、主从切换无闪断、闪回查询等持续为业务提供高价值的特性。

通过本方案,您可以体验如何在不修改任何应用代码的情况下,将 MySQL 数据库中的数据迁移至 PolarDB MySQL 版,借助 PolarDB 的超高弹性、性能、高可用高可靠等特性来应对业务高速增长带来的数据库压力。

本迁移方案具有以下优势:

  • 零改造成本

    • 100%兼容MySQL,您可以像使用MySQL一样使用PolarDB MySQL版

    • 可保留数据库原连接地址,无需应用程序修改任何连接配置即可切换至PolarDB

  • 安全可靠

    • 支持在线热迁移(增量实时同步),迁移过程仅闪断一次(即当业务从RDS切换至PolarDB时),业务停机时间<10分钟

    • 支持一键回滚,迁移失败可以在10分钟内恢复

  • 迁移免费

    • 迁移链路完全免费

    • 对于包年包月的RDS实例,数据从RDS迁移到PolarDB后,若业务已在PolarDB上稳定运行且不再需要RDS时,您可以申请转单优惠退款,避免浪费闲置的RDS资源,详情请参见包年包月RDS迁移至PolarDB后申请转单优惠退款

方案架构

方案提供的默认设置(如地域、VPC、实例名称等)完成部署后在阿里云上运行环境如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。

image.png

本方案的技术架构包括以下基础设施和云服务:

  • 地域和可用区:RDS MySQL实例和PolarDB MySQL版实例必须在同地域,可用区无限制

  • 1个专有网络VPC:升级后的PolarDB MySQL版实例将与升级前RDS MySQL实例使用同一个VPC网络

  • 核心系统:

    • 1个ECS实例,用于部署MySQL客户端,模拟业务读写RDS MySQL数据库

    • 1个RDS MySQL实例,通过一键升级,切换至PolarDB MySQL实例

部署准备

10

开始部署前,请按以下指引完成账号申请、服务开通、网络规划、资源规划等准备工作。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值

    1. 为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。

    2. 完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。

      云服务

      规格配置

      地域

      预估费用参考

      PolarDB MySQL版

      规格:polar.mysql.x4.large

      华东2(上海)

      4.17 元/小时

      云数据库 RDS MySQL 版

      规格:mysql.n2.medium.2c

      存储空间:100 GB(ESSD PL1云盘)

      华东2(上海)

      1.38 元/小时

      云服务器 ECS

      规格:ecs.g7.xlarge

      存储空间:40 GB(ESSD PL0云盘)

      华东2(上海)

      配置费用:1.089 元/小时

      公网流量费用:0.800 元/GB

      按量费用:6.639 元/小时

      公网流量费用:0.800 元/GB

  3. 阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建一个RAM用户,使RAM用户仅能操作有限的资源,然后由RAM用户完成本方案。

    1. 访问资源组页面,单击创建资源组,创建一个资源组,例如命名为rds2polardb

    2. 访问RAM控制台-用户页面,单击创建用户,勾选控制台访问OpenAPI 调用访问,填写其他信息,创建一个RAM用户。

    3. 访问RAM控制台-权限策略页面,单击创建权限策略,单击脚本编辑,并复制粘贴以下内容,完成创建自定义权限策略。

      自定义权限策略

        {
            "Version": "1",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "ecs:Describe*",
                        "vpc:Describe*",
                        "polardb:*",
                        "ros:*"
                    ],
                    "Resource": "*"
                }
            ]
        }
    4. 访问RAM控制台-用户页面,授予权限。

      1. 单击目标RAM用户操作列的添加权限,选择授权范围指定资源组(例如rds2polardb),然后选择系统策略AliyunECSFullAccess、AliyunRDSFullAccess和AliyunVPCFullAccess,单击确定

      2. 再次单击目标RAM用户操作列的添加权限,选择授权范围整个云账号,然后选择前面创建的自定义权限策略,单击确定

    说明

    详细步骤参考:

  4. (可选,仅首次使用PolarDB服务时需要创建)创建AliyunServiceRoleForPolarDB角色,用于PolarDB服务访问其他云服务资源。

    访问RAM访问控制台-角色页面,单击创建角色角色类型选择阿里云服务角色类型配置为服务关联角色选择云服务云数据库 PolarDB,单击完成

规划网络和资源

10

网络规划

请参考表格中的说明和方案默认示例值为每个规划项做详细规划并在实际部署时将默认示例值修改为您的实际规划。

规划项

说明

方案默认示例

地域

地域

您的云服务部署的地域。选择地域的基本原则请参见地域和可用区

华东2(上海)

专有网络 VPC

VPC名称

建议您再部署过程中新建一个VPC作为本方案的专有网络。部署过程中填写VPC名称即可创建对应名称的VPC。

长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

vpc_rds2polardb

网段

在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见专有网络组成部分

在网络规划时可以按照管理网段-开发网段-测试网段-生产网段等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。

192.168.0.0/16

虚拟交换机

台数

本方案需要至少2台交换机,用来连接不同的云资源实例。

1

vswitch 名称

建议您在部署过程中在新建的VPC内创建虚拟交换机。部署过程中填写vswitch名称即可创建对应名称的虚拟交换机。

长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

vsw_rds2polardb

可用区

在规划的地域内选择1个可用区,部署虚拟交换机。

建议选择排序靠后的,一般此类可用区较新。新可用区资源更充沛,新规格也会在新的可用区优先上线。

可用区 L

IPv4网段

每台虚拟交换机需要一个IPv4网段

192.168.0.0/24

规划云资源

请参考表格中的说明和方案默认示例值为每个规划项做详细规划并在实际部署时将默认示例值修改为您的实际规划。

规划项

数量

说明

云服务器 ECS

(可选)

1

本方案需要1台ECS实例,用于部署MySQL客户端,模拟业务向RDS MySQL实例写入实时数据等。

云数据库 RDS MySQL 版

1

本方案需要1个RDS MySQL实例,用于承接线上业务系统数据,在线事务相关的数据等。

云原生数据库

PolarDB MySQL版

1

本方案需要1个PolarDB MySQL实例,用于迁移RDS MySQL的数据到PolarDB MySQL版实例

部署资源

15

请按照以下步骤部署方案中的所有资源,您也可以使用您已有的资源。

1. 创建专有网络VPC和交换机

  1. 登录专有网络管理控制台

  2. 在顶部菜单栏,选择被授权的资源组(本文以rds2polardb为例)和地域(本文以华东2(上海)地域为例)。

  3. 在左侧导航栏,单击专有网络

  4. 专有网络页面,单击创建专有网络

  5. 创建专有网络页面,按照网络规划配置1个专有网络和1台交换机,然后单击确定。配置交换机时,请确保交换机所属的可用区的ECS、RDS、PolarDB MySQL等资源是可用状态。

    项目

    说明

    示例值

    VPC名称

    建议您在部署过程中新建一个VPC作为本方案的专有网络。部署过程中填写VPC名称即可创建对应名称的VPC。

    长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    vpc_rds2polardb

    IPv4网段

    在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见专有网络组成部分

    在网络规划时可以按照管理网段-开发网段-测试网段-生产网段等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。

    192.168.0.0/16

    资源组

    选择被授权的资源组。

    Vswitch名称

    建议您在部署过程中在新建的VPC内创建虚拟交换机。部署过程中填写交换机名称即可创建对应名称的虚拟交换机。

    长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    vsw_rds2polardb

    可用区

    在规划的地域内选择2个可用区,2台虚拟交换机分别部署在2个可用区。

    建议选择排序靠后的,一般此类可用区较新。新可用区资源更充沛,新规格也会在新的可用区优先上线。

    可用区 L

2. 创建云服务器ECS

您已经创建1个专有网络VPC和交换机。接下来您需要创建1个云服务器ECS实例,来部署MySQL客户端应用程序。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在顶部菜单栏,选择被授权的资源组(本文以rds2polardb为例)和地域(本文以华东2(上海)地域为例)。

  4. 实例页面,单击创建实例

  5. 在云服务器ECS购买页面,创建1台云服务器ECS。

    项目

    说明

    示例值

    付费类型

    ECS实例的计费方式。

    ECS计费的详细信息请参见ECS计费方式概述。本文以按量付费为例。

    按量付费

    网络及可用区

    选择之前规划的专有网络VPC及交换机。

    实例和镜像

    实例

    ECS的实例规格及内核、vCPU数量。关于ECS选型的最佳实践请参见选型最佳实践

    ecs.g7.xlarge

    镜像

    ECS的“装机盘”,为ECS实例提供操作系统、预装软件等。

    CentOS

    镜像版本

    镜像的版本。

    CentOS 7.6 64位

    存储

    系统盘类型

    硬盘类型。

    ESSD云盘

    系统盘容量

    硬盘容量。

    40 GiB

    系统盘性能

    选择硬盘IOPS性能。

    PL0(单盘IOPS性能上限5万)

    带宽和安全组

    公网 IP

    选择是否分配公网 IPv4 地址。

    分配公网 IPv4 地址

    带宽计费模式

    带宽计费方式,用于计算流量成本。

    按使用流量

    带宽峰值

    本方案以100 Mbps为例。

    100 Mbps

    安全组

    新建安全组。

    开通IPv4端口:

    • SSH (22)

    • MySQL(3306)

    管理设置

    登录凭证

    本方案已自定义密码凭证为例。

    自定义密码

    登录名

    固定为root

    root

    登录密码

    设置登录ECS服务器的密码。

    password***

    确认密码

    高级选项

    实例名称

    配置云服务器ECS实例名称。

    ecs_rds2polardb

    资源组

    选择被授权的资源组。

3. 创建云数据库RDS MySQL版

您已经创建1台云服务器ECS。接下来您需要创建云数据库RDS MySQL版实例、数据库、数据库账号。您需要记录创建的云数据库RDS MySQL版的内网连接地址、数据库名称、账号、密码用于之后可通过客户端/应用程序来连接数据库。

  1. 登录云数据库RDS MySQL控制台

  2. 创建云数据库RDS MySQL版实例:

    1. 概览页面,单击创建实例

    2. 在购买页面,购买1个云数据库RDS MySQL版实例:

    3. 项目

      说明

      示例值

      计费方案

      本方案以按量付费为例。

      按量付费

      地域

      本方案以华东2(上海)地域为例。

      华东2(上海)

      类型

      本方案以MySQL 8.0为例。

      MySQL 8.0

      产品系列

      为保证实例的高可用性,本方案选择高可用版本。选择高可用版本或者集群版本等,请参见如何选择系列

      高可用版

      架构

      云数据库RDS MySQL版实例的CPU架构支持ARM和X86架构,选择架构请参见如何选择架构

      X86

      存储类型

      云数据库RDS MySQL版实例支持多种不同的存储类型,选择存储类型请参见如何选择存储类型

      ESSD PL1云盘

      主节点可用区

      选择RDS MySQL实例部署主节点所在的可用区。

      上海 可用区L

      部署方案

      选择RDS MySQL实例部署方案,可以选择多可用区部署或者单可用区部署。

      单可用区部署

      实例规格

      选择RDS MySQL实例的规格,RDS MySQL支持各种不同的规格,请参见如何选择实例规格

      分类:通用规格

      规格代码:mysql.n2.medium.2c

      存储空间

      选择RDS MySQL实例的存储空间,请参见存储空间与自动扩展

      100GB

      VPC

      选择之前规划的专有网络VPC及交换机。

      主节点交换机

      加入白名单

      将VPC网段加入到RDS实例白名单中,使得同一VPC下的ECS实例可以访问RDS实例。

      资源组

      选择被授权的资源组。

      实例描述

      定义易于区分和理解的关键字

      rds_2polardb

    4. 在页面右下角,单击下一步:确认订单,勾选服务协议后,完成支付。

  3. 创建数据库:

    1. RDS管理控制台左侧导航栏,选择实例列表

    2. 在顶部菜单栏,选择被授权的资源组(本文以Rds2Redis为例)和地域(本文以华东2(上海)地域为例)。

    3. 实例列表页面,单击创建的实例。

    4. 在左侧导航栏,选择数据库管理

    5. 单击创建数据库

    6. 创建数据库面板,设置数据库名称为db_rds2polardb,设置字符集为utf8mb4,然后单击创建

  4. 创建数据库账号:

    1. 在左侧导航栏,选择账号管理

    2. 用户账号页签,单击创建账号

    3. 创建账号面板,设置数据库账号名称为u_rds2polardb,选择账号类型为普通账号,授权上一步创建的数据库权限为读(DDL+DML),设置密码,然后单击确定

RDS MySQL 写入数据(可选)

15

本方案为了更好的说明RDS MySQL在线迁移PolarDB MySQL,模拟向 RDS MySQL 数据库写入库表信息并持续写入数据。在真实的业务场景中,可以采用真正的业务系统涉及到的库表信息等进行操作验证。

1. ECS服务器上安装MySQL客户端

  1. 返回ECS实例列表页面,找到已创建的实例,单击对应操作列下的远程连接

  2. 在弹出的远程连接对话框中,单击通过Workbench远程连接对应的立即登录

  3. 在弹出的登录实例对话框中,输入登录信息,单击确定

    • 用户名:输入用户名(例如root)

    • 密码:创建ECS实例时,在登录凭证处设置的登录密码

  4. 安装MySQL客户端

    # 下载MySQL 8.0版本的yum库
    wget https://repo.mysql.com//mysql80-community-release-el7-9.noarch.rpm
    
    # 安装下载的yum库
    rpm -ivh mysql80-community-release-el7-9.noarch.rpm
    
    # 使用yum安装MySQL 8.0客户端
    yum -y install mysql-community-client
    
    # 验证MySQL客户端是否安装成功:正常返回版本信息
    mysql --version
    mysql Ver 8.0.34 for Linux on x86_64 (MySQL Community Server - GPL)

2. 模拟业务持续读写RDS MySQL

  1. 使用MySQL客户端连接RDS MySQL

    mysql -h <connection_string> -P 3306 -u u_rds2polardb -p <password> -D db_rds2polardb
  2. 在RDS MySQL的db_rds2polardb库中创建表t_rds2polardb

    CREATE TABLE t_rds2polardb(
      id bigint NOT NULL AUTO_INCREMENT,
      gmt_create datetime NOT NULL,
      PRIMARY KEY (`id`)
    );
  3. 向表t_rds2polardb中持续写入数据

    说明

    本操作需退出数据库,回到操作系统中执行

    while true; do mysql -A -h<connection_string> -uu_rds2polardb -p<password> db_rds2polardb -NBe 'insert into t_rds2polardb(gmt_create) values(now());select concat("系统时间:",now(),"   数据写入时间:",max(gmt_create),"   总行数:",count(*)) from t_rds2polardb;show variables like "polardb_version";';sleep 5; done
    说明
    1. insert into t_rds2polardb(gmt_create) values(now()); 向表t_rds2polardb中插入当前时间。

    2. select concat("系统时间:",now()," 数据写入时间:",max(gmt_create)," 总行数:",count(*)) from t_rds2polardb; 查看表t_rds2polardb,包含当前系统时间、数据写入的最新是几点、数据总行数。

    3. show variables like 'polardb_version'; 查看当前实例的polardb版本信息(当前连接的是RDS MySQL,故polardb_version返回值为空;当迁移切换到PolarDB MySQL后,polardb_version则返回版本信息)。

    4. sleep 5;每5秒循环一次。

    image.png

一键升级RDS MySQL至PolarDB MySQL版

30

PolarDB支持将RDS MySQL一键升级至PolarDB MySQL版,升级后的PolarDB集群包含源RDS实例的账号信息、数据库、IP白名单和必要的参数。

1. 前置检查:删除源RDS实例中多余系统账号

为了兼容RDS MySQL和PolarDB两者的系统账号体系,避免迁移后目标PolarDB的系统账号被覆盖,源RDS实例中不允许同时存在root和aliyun_root账号。因此,在进行迁移升级前,请先删除源RDS实例中多余的系统账号。

重要

RDS MySQL各个版本的正确系统账号名如下:

RDS MySQL版本

正确的系统账号名

RDS MySQL 5.6

root

RDS MySQL 5.7

aliyun_root

RDS MySQL 8.0

aliyun_root

警告

各个版本除了对应的系统账号之外,其余系统账号均需删除。

说明

账号可能是用户创建的,也可能是系统创建并因版本升级而遗留的,某些场景下不会在控制台显示

以清理RDS MySQL 5.6多余的系统账号为例,具体删除步骤如下:

  1. 使用高权限账号连接实例。

  2. 找到所有的root和aliyun_root系统账号。

    select * from mysql.user where user in ('root', 'aliyun_root');
  3. 删除多余的系统账号。RDS MySQL 5.6正确的系统账号是root,因此需要删除aliyun_root账号。

    delete from mysql.user where user = 'aliyun_root' limit n; 

2. PolarDB MySQL兼容性和性能验证(可选)

在正式一键迁移升级到PolarDB MySQL版前,您可以先通过一键克隆RDS MySQL至PolarDB MySQL版功能克隆一份RDS的数据到PolarDB,并通过数据库自治服务DAS提供的流量回放和压测功能,进行兼容性和性能的全面评估,有效避免切换后的兼容性或性能影响。

3. 创建PolarDB MySQL实例:从RDS迁移

  1. 登录PolarDB控制台,在顶部菜单栏,选择被授权的资源组(本文以rds2polardb为例)和地域(本文以华东2(上海)地域为例)。

  2. 在左侧导航栏,单击集群列表。单击创建新集群,进入PolarDB购买页。

  3. 设置如下参数。

    项目

    说明

    示例值

    计费类型

    短期使用PolarDB实例,请选择按量付费(后付费)。您可以先创建按量付费的实例,确认实例符合要求后变更计费方式为包年包月。

    按量付费

    地域

    选择已购买的RDS MySQL实例所在地域。

    说明

    新建的PolarDB集群也将在此地域。

    华东2(上海)

    创建方式

    选择从RDS迁移

    选择从RDS迁移

    源RDS版本

    已购买的RDS MySQL实例的版本。

    MySQL 8.0

    源RDS实例

    选择已购买的RDS MySQL实例。

    数据库引擎

    目标PolarDB MySQL集群的数据库引擎版本。您可以选择与源RDS实例一致的版本,也可以选择跨版本。

    8.0.2

    主可用区

    选择之前规划的交换机所在地域。

    可用区L

    子系列

    按需选择,建议不低于源RDS实例规格。

    独享规格

    筛选

    polar.mysql.x4.large (4 核 16 GB )

    集群名称

    自定义集群名称,便于区分。

    rds2_polardb

    资源组

    选择被授权的资源组。

    网络类型

    选择之前规划的专有网络VPC及交换机。

    是否开启Binlog

    勾选“开启”。

    开启

  1. 确认订单页面确认订单信息,阅读并选中服务协议,单击立即开通即可。

  2. 集群创建成功后,登录PolarDB控制台,单击集群ID进入集群基本信息页。

  3. 基本信息页的RDS迁移功能中,查看RDS至PolarDB的迁移状态。

    image.png

4. 迁移切换

当目标PolarDB集群的复制延迟小于60秒时,即可进行迁移切换操作。正式业务切换,建议选择业务低峰期进行。

  1. 本方案通过模拟持续写入RDS MySQL,并查看RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。

    1. RDS MySQL端执行

      while true; do mysql -A -h<connection_string> -uu_rds2polardb -p<password> db_rds2polardb -NBe 'insert into t_rds2polardb(gmt_create) values(now());select concat("系统时间:",now(),"   数据写入时间:",max(gmt_create),"   总行数:",count(*)) from t_rds2polardb;show variables like "polardb_version";';sleep 5; done
    2. PolarDB MySQL端执行

      while true; do mysql -A -h<connection_string> -uu_rds2polardb -p<password> db_rds2polardb -NBe 'select concat("系统时间:",now(),"   数据写入时间:",max(gmt_create),"   总行数:",count(*)) from t_rds2polardb;show variables like "polardb_version";';sleep 5; done
      说明

      image.png

      如上图:

      1. 左边是RDS MySQL,右边是PolarDB MySQL;其中PolarDB MySQL侧有polardb_version的返回信息

  2. 基本信息页面的RDS迁移功能中,单击迁移切换

    说明

    本操作将交换源RDS实例和目标PolarDB集群的读写状态(即将源RDS实例修改为只读,将PolarDB集群修改为可读可写),同时会更换复制方向(即将PolarDB集群的新增数据同步到RDS实例)。

    image.png

    警告

    您需要在30天内进行完成迁移操作。

  3. 开始切换对话框中,选择带地址切换(应用程序不用改连接配置)

    image.png

  4. 切换成功

    说明
    • 本方案重点介绍在线不更改连接地址完成RDS MySQL一键升级至PolarDB MySQL

    • 影响中断时间的因素较多,实际生产业务升级中,切换过程一般小于5分钟。

    image.png

5. 迁移回滚(可选)

在完成迁移前,如果您发现数据存在异常等问题,可以进行回滚操作,快速恢复至迁移前的状态(RDS实例为可读可写,PolarDB集群为只读,同时会将RDS实例的数据同步到PolarDB集群)。

  1. 基本信息页面的RDS迁移功能中,查看RDS至PolarDB的迁移状态。

    说明

    迁移切换后源端RDS可读,PolarDB可读写,同时复制关系已经变成PolarDB到RDS的同步,便于进行迁移回滚的操作。

    image.png

  2. 单击迁移回滚

    image.png

  3. 在迁移回滚对话框中,选择带地址回切(应用程序不用改连接配置)

    image.png

  4. 回切成功

    说明

    本方案重点介绍在线不更改连接地址完成RDS MySQL一键升级至PolarDB MySQL,并且支持迁移回切操作

    image.png

完成及清理

20

方案验证

参考一键迁移升级RDS MySQL至PolarDB MySQL版

清理资源

在本方案中,您创建了1个专有网络VPC、1台交换机、1台ECS云服务器、1个云数据库 RDS MySQL 实例、1个云原生数据库 PolarDB MySQL 实例。测试完方案后,您可以参考以下规则处理基础设施和云服务的实例,避免继续产生费用:

  1. 释放1个云数据库 RDS MySQL 实例:

    登录RDS管理控制台实例列表页面,找到目标实例,然后在操作列选择216更多-竖向..png>释放设置,根据界面提示释放实例。

  2. 释放1个云原数据库 PolarDB MySQL 实例:

    登录PolarDB控制台,在默认实例列表页面,找到目标实例,然后在操作列选择216更多-竖向..png>删除,根据界面提示释放实例。

  3. 释放1台交换机:

    登录专有网络控制台,在交换机页面,找到目标交换机,然后在操作列单击删除,按照界面提示释放交换机。

  4. 释放1个专有网络VPC:

    登录专有网络控制台,在专有网络页面,找到目标VPC,然后在操作列单击删除,按照界面提示释放专有网络。

  5. 释放1个云服务器 ECS 实例:

    登录ECS管理控制台,在实例页面,找到目标实例,然后在操作列选择216更多-竖向..png>释放设置,根据界面提示释放实例。

一键部署

80

https://www.aliyun.com/solution/tech-solution/rds_polardb

方案概览

PolarDB MySQL 版是阿里云自研的云原生数据库,产品基于云原生架构、计算存储分离、软硬件一体化设计,具有一写多读或多写多读、共享存储、60亿行数据稳定运行、秒级DDL、主从切换无闪断、闪回查询等持续为业务提供高价值的特性。

通过本方案,您可以体验如何在不修改任何应用代码的情况下,将 MySQL 数据库中的数据迁移至 PolarDB MySQL 版,借助 PolarDB 的超高弹性、性能、高可用高可靠等特性来应对业务高速增长带来的数据库压力。

本迁移方案具有以下优势:

  • 零改造成本

    • 100%兼容MySQL,您可以像使用MySQL一样使用PolarDB MySQL版

    • 可保留数据库原连接地址,无需应用程序修改任何连接配置即可切换至PolarDB

  • 安全可靠

    • 支持在线热迁移(增量实时同步),迁移过程仅闪断一次(即当业务从RDS切换至PolarDB时),业务停机时间<10分钟

    • 支持一键回滚,迁移失败可以在10分钟内恢复

  • 迁移免费

    • 迁移链路完全免费

    • 对于包年包月的RDS实例,数据从RDS迁移到PolarDB后,若业务已在PolarDB上稳定运行且不再需要RDS时,您可以申请转单优惠退款,避免浪费闲置的RDS资源,详情请参见包年包月RDS迁移至PolarDB后申请转单优惠退款

方案架构

方案提供的默认设置(如地域、VPC、实例名称等)完成部署后在阿里云上运行环境如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。

image.png

本方案的技术架构包括以下基础设施和云服务:

  • 地域和可用区:RDS MySQL实例和PolarDB MySQL版实例必须在同地域,可用区无限制

  • 1个专有网络VPC:升级后的PolarDB MySQL版实例将与升级前RDS MySQL实例使用同一个VPC网络

  • 核心系统:

    • 1个ECS实例,用于部署MySQL客户端,模拟业务读写RDS MySQL数据库

    • 1个RDS MySQL实例,通过一键升级,切换至PolarDB MySQL实例

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值

    1. 为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。

    2. 完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。

      云服务

      规格配置

      地域

      预估费用参考

      云数据库 PolarDB

      polar.mysql.x4.large

      华东2(上海)

      4.17 元/小时

      云数据库 RDS MySQL

      mysql.n2.medium.2c

      华东2(上海)

      1.381 元/小时

      云服务器 ECS

      ecs.g7.xlarge

      华东2(上海)

      配置费用:1.089 元/小时

      公网流量费用:0.800 元/GB

      按量费用:6.64 元/小时

      公网流量费用:0.800 元/GB

  3. 阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建一个RAM用户,使RAM用户仅能操作有限的资源,然后由RAM用户完成本方案。

    1. 访问资源组页面,单击创建资源组,创建一个资源组,例如命名为rds2polardb

    2. 访问RAM控制台-用户页面,单击创建用户,勾选控制台访问OpenAPI 调用访问,填写其他信息,创建一个RAM用户。

    3. 访问RAM控制台-权限策略页面,单击创建权限策略,单击脚本编辑,并复制粘贴以下内容,完成创建自定义权限策略。

      自定义权限策略

        {
            "Version": "1",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "polardb:Describe*",
                        "ecs:Describe*",
                        "vpc:Describe*",
                        "ros:*"
                    ],
                    "Resource": "*"
                }
            ]
        }
    4. 访问RAM控制台-用户页面,授予权限。

      1. 单击目标RAM用户操作列的添加权限,选择授权范围指定资源组(例如rds2polardb),然后选择系统策略AliyunECSFullAccess、AliyunRDSFullAccess、AliyunVPCFullAccess和AliyunPolardbFullAccess,单击确定

      2. 再次单击目标RAM用户操作列的添加权限,选择授权范围整个云账号,然后选择前面创建的自定义权限策略,单击确定

    5. 创建AliyunServiceRoleForPolarDB角色,用于PolarDB服务访问其他云服务资源。

      访问RAM访问控制台-角色页面,单击创建角色角色类型选择阿里云服务角色类型配置为服务关联角色选择云服务云数据库 PolarDB,单击完成

    说明

    详细步骤参考:

一键部署

40

资源编排(ROS)可以让您通过YAML或JSON文件清晰简洁地描述所需的云资源及其依赖关系,然后自动化地创建和配置这些资源。您可以通过下方提供的ROS一键部署链接,来自动化地完成这些资源的创建和配置。

本文介绍的ROS模板主要完成了以下内容:

  • 部署1个专有网络VPC。

  • 部署1台交换机。

  • 部署1台云服务器 ECS。

  • 部署1个云数据库 RDS MySQL实例。

  • 已在RDS MySQL实例中写入测试数据。

  • 部署1个从云数据库 RDS MySQL实例迁移生成的云数据库 PolarDB MySQL实例。

  1. 单击一键部署前往ROS控制台,系统自动打开使用新资源创建资源栈的面板。

    说明

    ROS控制台默认处于您上一次访问控制台时的地域,请根据您创建的资源所在地域修改地域后再执行下一步。

  2. 确认好地域后(本文以华东2(上海)为例),在配置模板参数步骤中配置资源栈名称ECS等配置。

    配置项

    参数

    说明

    示例值

    资源栈名称

    资源栈名称

    ROS一键部署任务名称,可自定义。

    rds2polardb

    基础配置

    可用区ID

    ECS、RDS和PolarDB资源所在的可用区,同一地域下,不同可用区内网互通,按需选择即可。

    可用区L

    ECS

    实例类型

    ECS实例的架构、分类和规格配置。

    架构:x86计算

    分类:通用型

    实例规格:ecs.g7.xlarge

    系统盘类型

    ECS实例的硬盘类型。

    ESSD云盘

    实例密码

    ECS实例的密码。

    RDS配置

    RDS实例规格

    RDS MySQL实例的规格。

    mysql.n2.medium.2c

    实例存储

    RDS实例的存储空间。单位GB。

    100

    数据库账号密码

    数据库账号的密码。

    PolarDB配置

    PolarDB集群规格

    PolarDB MySQL实例的规格。

    polar.mysql.x4.large

  3. 单击两次下一步,跳转至配置资源栈(可选)步骤,选择资源组为被授权的资源组(本文以rds2polardb为例)。

  4. 单击创建,系统将自动创建并部署本教程所需的资源。

  5. 资源栈信息页面的状态显示为创建成功时表示一键配置完成。

    说明

    创建时间较久,耗时约30分钟,请耐心等待。

    image.png

  1. 单击资源页签,找到已创建的PolarDB实例,单击实例ID,进入PolarDB实例详情页,查看RDS实例的数据是否已存在。

迁移切换

10

当目标PolarDB集群的复制延迟小于60秒时,即可进行迁移切换操作。正式业务切换,建议选择业务低峰期进行。

  1. 本方案通过持续写入RDS MySQL,并查看RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。

    说明

    一键部署完成后,会生成2个脚本可用于模拟业务持续写入RDS MySQL,并实时观察RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。2个脚本包含:loop_insert_query_mysql.sh、loop_query_polardb.sh,其中

    • loop_insert_query_mysql.sh 主要用于模拟每隔5秒向RDS MySQL写入数据,并打印系统时间、数据写入时间、数据的总行数、PolarDB的版本等信息。

    • loop_query_polardb.sh 主要用于模拟每隔5秒查询PolarDB数据库,并打印系统时间、数据写入时间、数据的总行数、PolarDB的版本等信息。

    • 可通过PolarDB版本信息判断当前连接的是RDS MySQL还是PolarDB,如下

      image.png

      • 左边是RDS MySQL(无polardb_version返回值),右边是PolarDB MySQL(polardb_version非空)

  2. 登录ECS

    1. 返回ECS实例列表页面,找到已创建的实例,单击对应操作列下的远程连接

    2. 在弹出的远程连接对话框中,单击通过Workbench远程连接对应的立即登录

    3. 在弹出的登录实例对话框中,输入登录信息,单击确定

      • 用户名:输入用户名(例如root)

      • 密码:创建ECS实例时,在登录凭证处设置的登录密码

  3. 在ECS上,执行脚本模拟业务持续在RDS MySQL写入数据,并观察RDS MySQL和PolarDB MySQL两边的最新时间和数据量来观察切换带来的中断耗时。

    ~]# ls /root/*.sh
    /root/loop_insert_query_mysql.sh  /root/loop_query_polardb.sh
    -- A窗口
    ~]# sh /root/loop_insert_query_mysql.sh
    -- B窗口
    ~]# sh loop_query_polardb.sh 
    说明
    • 为便于观察,建议开2个窗口对比观察,可参考

    image.png

  4. 基本信息页面的RDS迁移功能中,单击迁移切换

    说明

    本操作将交换源RDS实例和目标PolarDB集群的读写状态(即将源RDS实例修改为只读,将PolarDB集群修改为可读可写),同时会更换复制方向(即将PolarDB集群的新增数据同步到RDS实例)。

    image.png

    警告

    您需要在30天内进行完成迁移操作。

  5. 开始切换对话框中,选择带地址切换(应用程序不用改连接配置)

    image.png

  6. 切换成功

    说明
    • 本方案重点介绍在线不更改连接地址完成RDS MySQL一键升级至PolarDB MySQL

    • 影响中断时间的因素较多,实际生产业务升级中,切换过程一般小于5分钟。

    image.png

完成及清理

20

方案验证

参考迁移切换迁移成功的结果显示。

清理资源

在本方案中,您创建了1个专有网络VPC、1台交换机、1台ECS云服务器、1个云数据库 RDS MySQL 实例、1个云原生数据库 PolarDB MySQL 实例。测试完方案后,您可以在ROS控制台直接删除资源栈并删除相关资源。