迁移MySQL数据

通过DTS、Flink CDC、Catalog、阿里云DataWorks,均可将MySQL(如自建MySQL、RDS MySQL和PolarDB MySQL等)的数据迁移至云数据库 SelectDB 版。您可依据迁移的数据量和业务场景,选择合适的方式完成数据迁移。本文为您介绍MySQL数据迁移到云数据库 SelectDB 版的各个方式以及各方式的功能对比。

迁移方式功能对比

DTS、Flink CDC、Catalog、阿里云DataWorks均可将MySQL的数据迁移至云数据库 SelectDB 版,但不同的方式支持迁移的数据有所不同,您可根据不同的业务场景,选择合适的迁移方式。

迁移方式

历史数据迁移

增量数据同步

表结构迁移

整库迁移

增量同步DDL

数据校验

DTS

✔️

✔️

✔️

✔️

✔️

✔️

Flink CDC

✔️

✔️

✔️

✔️

✔️

Catalog

✔️

DataWorks

✔️

本文将为您概述各个迁移方式的基本迁移步骤,如需获取更多详细信息,请根据指引查阅各个方式相应的详细文档。

前提条件

  • 已创建云数据库 SelectDB 版实例和MySQL实例。

  • 云数据库 SelectDB 版实例和MySQL实例需要网络互通,或者二者的网络都与迁移工具的网络互通。

通过DTS迁移数据

DTS支持迁移MySQL历史数据、同步增量数据到云数据库 SelectDB 版,且支持库表迁移、DDL同步、数据校验等能力。本小节以RDS MySQL为例,演示如何迁移MySQL数据到云数据库 SelectDB 版,更多详情,请参见通过DTS导入数据

操作步骤

  1. 登录云数据库 SelectDB 控制台

  2. 在页面左上角,选择实例所在地域。

  3. 实例列表页面,单击目标实例ID,进入到实例详情页面。

  4. 在左侧导航栏,单击数据迁移及同步,在顶部菜单栏,选择数据同步页签。

    说明

    DTS数据同步通常包含存量数据的迁移和增量数据的实时同步,数据迁移通常用于存量历史数据的迁移。

  5. 单击创建同步任务,配置源库及目标库信息。

  6. 类别

    配置

    说明

    任务信息

    任务名称

    DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。

    源库信息

    数据库类型

    选择MySQL

    接入方式

    选择云实例

    实例地区

    选择源RDS MySQL实例所属地域。

    RDS实例ID

    选择源RDS MySQL实例ID。例如rm-2z3m****。

    数据库账号

    填入源RDS MySQL实例的数据库账号,权限要求请参见数据库账号的权限要求

    数据库密码

    填入该数据库账号对应的密码。

    连接方式

    根据需求选择非加密连接SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS MySQL实例的SSL加密功能,详情请参见使用云端证书快速开启SSL链路加密

    目标库信息

    数据库类型

    选择SelectDB

    接入方式

    选择云实例

    实例地区

    选择目标SelectDB实例所属地域。

    实例ID

    选择目标SelectDB实例的ID。

    数据库账号

    填入目标SelectDB实例的数据库账号,权限要求请参见数据库账号的权限要求

    数据库密码

    填入该数据库账号对应的密码。

  7. 配置完成后,单击页面下方的测试连接以进行下一步

  8. 配置任务对象及高级配置。

  9. 配置

    说明

    同步类型

    固定选中增量同步。默认情况下,您还需要同时选中库表结构同步全量同步。预检查完成后,DTS会将源实例中待同步对象的全量数据在目标集群中初始化,作为后续增量同步数据的基线数据。

    重要

    MySQL的数据同步到SelectDB会进行类型转换,若您未勾选库表结构同步,则需要提前在目标SelectDB中创建好相应结构的Unique模型表。更多信息,请参见数据类型映射关系数据模型

    源库对象

    源库对象框中单击待同步对象,然后单击向右将其移动至已选择对象框。同步对象的选择粒度为库、表、列。

    重要
    • 选择粒度为库级别,不支持后续新增表的数据同步。若您在使用DTS的过程中可能会新增数据表,可以将同步对象的粒度选择为表级别,后续可通过修改同步对象进行修改。

    • 选择粒度为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。

    已选择对象

    • 如需更改单个同步对象在目标实例中的名称,请右击已选择对象中的同步对象,设置方式,请参见库表列名单个映射

    • 如需批量更改同步对象在目标实例中的名称,请单击已选择对象方框右上方的批量编辑,设置方式,请参见库表列名批量映射

    说明
    • 如需按库或表级别选择同步的SQL操作,请在已选择对象中右击待同步对象,并在弹出的对话框中选择所需同步的SQL操作。支持的操作,请参见支持增量同步的SQL

    • 如需设置WHERE条件过滤数据,请在已选择对象中右击待同步的表,在弹出的对话框中设置过滤条件。设置方法请参见设置过滤条件

    • 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象同步失败。

  10. 可选:上述配置完成后,单击下一步配置库表字段,设置待同步的表在目标中的主键列分布键引擎选择信息。

  11. 说明
    • 配置任务对象时同步类型勾选了库表结构同步时才会有本步骤,您可以将定义状态选择为全部后进行修改。

    • 主键列可以是选择多个列组成联合主键,且需要从主键列中选择一个或者多个列作为分布键引擎选择仅支持选择Unique

  12. 保存任务并进行预检查。预检查通过率显示为100%时,单击下一步购买

  13. 购买页面,选择数据同步实例的计费方式、链路规格,阅读并勾选《数据传输(按量付费)服务条款》,单击购买并启动,同步任务正式开始,您可在数据同步界面查看具体任务进度。

通过Flink CDC迁移数据

Flink提供Flink SQL、Flink CDC和DataStream三种方式从MySQL迁移数据到SelectDB,其中Flink CDC支持历史数据迁移、增量数据同步,且具备完备的库表迁移、DDL同步等能力。以Flink CDC为例,演示如何将上游MySQL数据同步到云数据库 SelectDB 版。更多详情,请参见通过Flink导入数据

操作步骤

准备环境

搭建Flink环境,本示例以Flink 1.16单机环境为例。

  1. 下载flink-1.16.3-bin-scala_2.12.tgz,进行解压,示例如下。

    wget https://dlcdn.apache.org/flink/flink-1.16.3/flink-1.16.3-bin-scala_2.12.tgz
    tar -zxvf flink-1.16.3-bin-scala_2.12.tgz
  2. 进入FLINK_HOME/lib目录中下载flink-sql-connector-mysql-cdc-2.4.2flink-doris-connector-1.16-1.5.2,示例如下。

    cd flink-1.16.3
    cd lib/
    wget https://repo1.maven.org/maven2/com/ververica/flink-sql-connector-mysql-cdc/2.4.2/flink-sql-connector-mysql-cdc-2.4.2.jar
    wget https://repo.maven.apache.org/maven2/org/apache/doris/flink-doris-connector-1.16/1.5.2/flink-doris-connector-1.16-1.5.2.jar
  3. 启动Flink Standalone集群,示例如下。

    bin/start-cluster.sh
  4. 创建云数据库 SelectDB 版实例。具体操作,请参见创建实例

  5. 通过MySQL协议连接云数据库 SelectDB 版实例。具体操作,请参见连接实例

  6. 创建测试数据库和测试表。

    1. 创建测试数据库。

      CREATE DATABASE test_db;
    2. 创建测试表。

      USE test_db;
      CREATE TABLE employees (
          emp_no       int NOT NULL,
          birth_date   date,
          first_name   varchar(20),
          last_name    varchar(20),
          gender       char(2),
          hire_date    date
      )
      UNIQUE KEY(`emp_no`)
      DISTRIBUTED BY HASH(`emp_no`) BUCKETS 1;

提交Flink CDC任务

提交Flink CDC任务的语法如下:

<FLINK_HOME>/bin/flink run \
    -Dexecution.checkpointing.interval=10s \
    -Dparallelism.default=1 \
    -c org.apache.doris.flink.tools.cdc.CdcTools \
    lib/flink-doris-connector-1.16-1.5.2.jar \
    mysql-sync-database \
    --database test_db \
    --including-tables "tbl1|test.*" \
    --mysql-conf hostname=127.0.0.1 \
    --mysql-conf username=root \
    --mysql-conf password=123456 \
    --mysql-conf database-name=mysql_db \
    --sink-conf fenodes=selectdb-cn-****.selectdbfe.rds.aliyuncs.com:8080 \
    --sink-conf username=admin \
    --sink-conf password=****

参数

说明

execution.checkpointing.interval

Flink checkpoint的时间间隔,影响数据同步的频率,推荐10s。

parallelism.default

设置Flink任务的并行度,适当增加并行度可提高数据同步速度。

database

同步到SelectDB的数据库名。

including-tables

需要同步的MySQL表,可以使用"|"分隔多个表,并支持正则表达式。 例如--including-tables table1|tbl.*,指同步table1和所有以tbl开头的表。

excluding-tables

不需要同步的表,配置方法与including-tables相同。

mysql-conf

MySQL CDC Source配置。配置详情请参见MySQL CDC Connector,其中hostnameusernamepassworddatabase-name是必选项。

sink-conf

Doris Sink的所有配置。更多详情,请参见通过Flink导入数据

table-conf

SelectDB表的配置项,即创建SelectDB表时properties中的内容。

说明
  1. 同步时需要在$FLINK_HOME/lib目录下添加对应的Flink CDC依赖,例如flink-sql-connector-mysql-cdc-${version}.jar,flink-sql-connector-oracle-cdc-${version}.jar。

  2. 整库同步支持Flink 1.15以上的版本,各个版本Flink Doris Connector的下载请参见Flink Doris Connector

通过Catalog迁移数据

SelectDB提供的Catalog能力,支持通过联邦查询方式访问MySQL,可简单快速完成MySQL历史数据迁移到SelectDB。以下示例演示如何通过Catalog,将上游MySQL数据同步到云数据库 SelectDB 版。更多详情,请参见JDBC数据源

操作步骤

  1. 连接SelectDB实例。具体操作,请参见连接实例

    说明

    使用DMS登录时,SWITCH指令失效。推荐使用MySQL客户端连接。

  2. 创建MySQL JDBC Catalog。

CREATE CATALOG jdbc_mysql PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:mysql://127.0.0.1:3306/demo",
    "driver_url" = "mysql-connector-java-8.0.25.jar",
    "driver_class" = "com.mysql.cj.jdbc.Driver",
    "checksum" = "fdf55dcef04b09f2eaf42b75e61ccc9a"
)

参数说明

参数

是否必选

默认值

说明

user

对应数据库的账号。

password

对应数据库的密码。

jdbc_url

JDBC连接串。

driver_url

JDBC Driver Jar包名称。

driver_class

JDBC Driver Class名称。

lower_case_table_names

"false"

指定是否以小写的形式同步JDBC外部数据源的库名和表名。

only_specified_database

"false"

指定是否只同步指定的Database。

include_database_list

""

only_specified_database=true时,指定同步多个Database,以英文逗号(,)分隔。DB名称大小写敏感。

exclude_database_list

""

only_specified_database=true时,指定不需要同步的多个Database,以英文逗号(,)分隔。DB名称大小写敏感。

  1. 在SelectDB中进行建表后,然后通过库内ETL语法insert into select完成数据同步。更多insert into详情,请参见Insert Into

# 建表
CREATE TABLE selectdb_table ...

# 迁移数据
INSERT INTO selectdb_table SELECT * FROM mysql_catalog.mysql_database.mysql_table;

通过DataWorks迁移数据

云数据库 SelectDB 版支持使用DataWorks的数据集成功能导入历史数据。下文将介绍如何通过DataWorks同步MySQL数据至云数据库 SelectDB 版。更多详情,请参见通过DataWorks导入数据

重要

不支持写入BITMAP、HLL(HyperLogLog)和QUANTILE_STATE类型的字段。

数据同步任务开发

新增数据源

在进行数据同步任务开发时,您需要在DataWorks上分别创建MySQL和SelectDB数据源。

  1. 创建MySQL数据源,详情请参见MySQL数据源

  2. 创建SelectDB数据源,详情请参见创建并管理数据源。SelectDB数据源的部分配置参数如下所示:

    参数

    说明

    数据源名称

    数据源的名称。

    MySQL连接地址

    请填写JDBC连接串jdbc:mysql://<ip>:<port>/<dbname>

    您可以从云数据库 SelectDB 版控制台的实例详情 > 网络信息中获取VPC地址(或公网地址)和MySQL协议端口

    示例:jdbc:mysql://selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:9030/test_db

    HTTP连接地址

    请填写HTTP协议访问地址<ip>:<port>

    您可以从云数据库 SelectDB 版控制台的实例详情 > 网络信息中获取VPC地址(或公网地址)和HTTP协议端口

    示例:selectdb-cn-4xl3jv1****.selectdbfe.rds.aliyuncs.com:8080

    用户名

    请填写云数据库 SelectDB 版实例的用户名。

    密码

    请填写云数据库 SelectDB 版实例对应用户的密码。

配置单表离线同步任务

您可以选择向导模式或者脚本模式配置离线同步任务,操作流程请参见: