通过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导入数据。
操作步骤
在页面左上角,选择实例所在地域。
在实例列表页面,单击目标实例ID,进入到实例详情页面。。
在左侧导航栏,单击数据迁移及同步,在顶部菜单栏,选择数据同步页签。
说明DTS数据同步通常包含存量数据的迁移和增量数据的实时同步,数据迁移通常用于存量历史数据的迁移。
单击创建同步任务,配置源库及目标库信息。
配置完成后,单击页面下方的测试连接以进行下一步。
配置任务对象及高级配置。
选择粒度为库级别,不支持后续新增表的数据同步。若您在使用DTS的过程中可能会新增数据表,可以将同步对象的粒度选择为表级别,后续可通过修改同步对象进行修改。
选择粒度为表级别,且需进行编辑(如表列名映射),则单次同步任务仅支持同步至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待同步的表,分批配置多个任务,或者配置整库的同步任务。
如需更改单个同步对象在目标实例中的名称,请右击已选择对象中的同步对象,设置方式,请参见库表列名单个映射。
如需批量更改同步对象在目标实例中的名称,请单击已选择对象方框右上方的批量编辑,设置方式,请参见库表列名批量映射。
如需按库或表级别选择同步的SQL操作,请在已选择对象中右击待同步对象,并在弹出的对话框中选择所需同步的SQL操作。支持的操作,请参见支持增量同步的SQL。
如需设置WHERE条件过滤数据,请在已选择对象中右击待同步的表,在弹出的对话框中设置过滤条件。设置方法请参见设置过滤条件。
如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象同步失败。
可选:上述配置完成后,单击下一步配置库表字段,设置待同步的表在目标中的主键列、分布键和引擎选择信息。
配置任务对象时同步类型勾选了库表结构同步时才会有本步骤,您可以将定义状态选择为全部后进行修改。
主键列可以是选择多个列组成联合主键,且需要从主键列中选择一个或者多个列作为分布键。引擎选择仅支持选择Unique。
保存任务并进行预检查。预检查通过率显示为100%时,单击下一步购买。
在购买页面,选择数据同步实例的计费方式、链路规格,阅读并勾选《数据传输(按量付费)服务条款》,单击购买并启动,同步任务正式开始,您可在数据同步界面查看具体任务进度。
类别 | 配置 | 说明 |
任务信息 | 任务名称 | 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实例的数据库账号,权限要求请参见数据库账号的权限要求。 | |
数据库密码 | 填入该数据库账号对应的密码。 |
配置 | 说明 |
同步类型 | 固定选中增量同步。默认情况下,您还需要同时选中库表结构同步和全量同步。预检查完成后,DTS会将源实例中待同步对象的全量数据在目标集群中初始化,作为后续增量同步数据的基线数据。 |
源库对象 | 在源库对象框中单击待同步对象,然后单击将其移动至已选择对象框。同步对象的选择粒度为库、表、列。 重要 |
已选择对象 | 说明 |
通过Flink CDC迁移数据
Flink提供Flink SQL、Flink CDC和DataStream三种方式从MySQL迁移数据到SelectDB,其中Flink CDC支持历史数据迁移、增量数据同步,且具备完备的库表迁移、DDL同步等能力。以Flink CDC为例,演示如何将上游MySQL数据同步到云数据库 SelectDB 版。更多详情,请参见通过Flink导入数据。
操作步骤
准备环境
搭建Flink环境,本示例以Flink 1.16单机环境为例。
下载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
进入FLINK_HOME/lib目录中下载flink-sql-connector-mysql-cdc-2.4.2和flink-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
启动Flink Standalone集群,示例如下。
bin/start-cluster.sh
创建云数据库 SelectDB 版实例。具体操作,请参见创建实例。
通过MySQL协议连接云数据库 SelectDB 版实例。具体操作,请参见连接实例。
创建测试数据库和测试表。
创建测试数据库。
CREATE DATABASE test_db;
创建测试表。
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表,可以使用"|"分隔多个表,并支持正则表达式。 例如 |
excluding-tables | 不需要同步的表,配置方法与including-tables相同。 |
mysql-conf | MySQL CDC Source配置。配置详情请参见MySQL CDC Connector,其中 |
sink-conf | Doris Sink的所有配置。更多详情,请参见通过Flink导入数据。 |
table-conf | SelectDB表的配置项,即创建SelectDB表时properties中的内容。 |
同步时需要在$FLINK_HOME/lib目录下添加对应的Flink CDC依赖,例如flink-sql-connector-mysql-cdc-${version}.jar,flink-sql-connector-oracle-cdc-${version}.jar。
整库同步支持Flink 1.15以上的版本,各个版本Flink Doris Connector的下载请参见Flink Doris Connector。
通过Catalog迁移数据
SelectDB提供的Catalog能力,支持通过联邦查询方式访问MySQL,可简单快速完成MySQL历史数据迁移到SelectDB。以下示例演示如何通过Catalog,将上游MySQL数据同步到云数据库 SelectDB 版。更多详情,请参见JDBC数据源。
操作步骤
连接SelectDB实例。具体操作,请参见连接实例。
说明使用DMS登录时,
SWITCH
指令失效。推荐使用MySQL客户端连接。创建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 | 否 | "" | 当 |
exclude_database_list | 否 | "" | 当 |
在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数据源。
创建MySQL数据源,详情请参见MySQL数据源。
创建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 版实例对应用户的密码。
配置单表离线同步任务
您可以选择向导模式或者脚本模式配置离线同步任务,操作流程请参见: