首页 RDS MySQL 迁移至 PolarDB MySQL 版

RDS MySQL 迁移至 PolarDB MySQL 版

更新时间: 2025-01-06 17:31:51

手动部署

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 分钟内恢复。

方案架构

方案提供的默认设置(如地域、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 hostname -u username -p
    说明

    hostname 替换成数据库内网地址

    username 替换成你上一步设置的数据库账号名称

    按照提示输入密码即可

  2. 在 RDS MySQL 的 db_rds2polardb 库中创建表 t_rds2polardb ,依次执行如下语句:

    USE db_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 同步任务状态,验证迁移完成

  1. 登录PolarDB 控制台在左侧导航栏,单击集群列表,在左侧顶部菜单栏,选择 ROS 创建的地域,点击创建的目标实例,进入基本信息页面,找到 RDS 迁移功能界面如下:image可看到 RDS 迁移功能状态已更新为数据库切换完成,源 RDS 读写状态变成只读,PolarDB读写状态为读写

  2. 点击 DTS数据同步任务,进入到如下界面可以看到数据传输的状态:image

  3. 点击对应任务 id,进入到任务管理界面,在左侧导航栏性能监控如下:image可以看到 PolarDB MySQL 实例已经成为数据源端,迁移已经完成。

二、通过执行写入数据脚本,验证迁移成功

  1. 登录ECS 管理控制台,找到创建的实例,单击对应操作列下的远程连接

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

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

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

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

  4. 在 ECS 上,执行脚本模拟业务持续在 RDS 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 的版本等信息。

    sh /root/loop_insert_query_mysql.sh

    image可看到目前已经链接至 PolarDB 实例,数据写入进 PolarDB 实例中。

  5. 登录PolarDB 控制台在左侧导航栏,单击集群列表,在左侧顶部菜单栏,选择 ROS 创建的地域,点击创建的目标实例,点击登录数据库按钮。

  6. 在 SQL Console 界面,执行如下查询语句:

    SELECT * FROM  t_rds2polardb;

    可得到如下结果:image经查询可以看到通过在 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 分钟内恢复。

方案架构

方案提供的默认设置(如地域、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 迁移功能中,查看 RDS 至 PolarDB 的迁移状态。image

  7. 切换成功

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

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

    image.png

完成及清理

20

方案验证

一、通过查看 RDS 同步任务状态,验证迁移完成

  1. 登录PolarDB 控制台在左侧导航栏,单击集群列表,在左侧顶部菜单栏,选择 ROS 创建的地域,点击创建的目标实例,进入基本信息页面,找到 RDS 迁移功能界面如下:image可看到 RDS 迁移功能状态已更新为数据库切换完成,源 RDS 读写状态变成只读,PolarDB读写状态为读写

  2. 点击 DTS数据同步任务,进入到如下界面可以看到数据传输的状态:image

  3. 点击对应任务 id,进入到任务管理界面,在左侧导航栏性能监控如下:image可以看到 PolarDB MySQL 实例已经成为数据源端,迁移已经完成。

二、通过执行写入数据脚本,验证迁移成功

  1. 登录ECS 管理控制台,找到创建的实例,单击对应操作列下的远程连接

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

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

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

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

  4. 在 ECS 上,执行脚本模拟业务持续在 RDS 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 的版本等信息。

    sh /root/loop_insert_query_mysql.sh

    image可看到目前已经链接至 PolarDB 实例,数据写入进 PolarDB 实例中。

  5. 登录PolarDB 控制台在左侧导航栏,单击集群列表,在左侧顶部菜单栏,选择 ROS 创建的地域,点击创建的目标实例,点击登录数据库按钮。

  6. 在 SQL Console 界面,执行如下查询语句:

    SELECT * FROM  t_rds2polardb;

    可得到如下结果:image经查询可以看到通过在 RDS MySQL 实例写入的数据已经在 PolarDB MySQL 实例中。迁移成功。

清理资源

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