阿里云AnalyticDB同步数据至华为云taurusdb

1 概述

AnalyticDB和taurusdb都是高度兼容mysql协议的数据库,从现有的AnalyticDB官方数据同步方案来看,只有FlinkSQL合适。

同步方案官方文档:

复制代码
https://help.aliyun.com/zh/analyticdb/analyticdb-for-mysql/user-guide/flink-subscribes-binlog

2 数据同步方案

2.1 架构

2.2 限制条件

AnalyticDB for MySQL产品系列为企业版、基础版、湖仓版和数仓版弹性模式。

AnalyticDB for MySQL集群的内核版本需为3.2.1.0及以上版本。

Flink实时计算引擎需为VVR 8.0.4及以上版本。

XUANWU_V2表不支持开启Binlog,因此不能通过订阅Binlog实现AnalyticDB for MySQL集群XUANWU_V2表的数据同步和流式计算。

Flink仅支持处理AnalyticDB for MySQL Binlog中的所有基础数据类型和复杂数据类型JSON。

Flink不会处理AnalyticDB for MySQL Binlog中的DDL操作记录和分区表自动分区删除的操作记录。

2.3 操作步骤

2.3.1 步骤1:在AnalyticDB中初始化一张示例源表

复制代码
CREATE DATABASE demo;
use demo;
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL
);
INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');
INSERT INTO users (username, email) VALUES ('user2', 'user2@example.com');
INSERT INTO users (username, email) VALUES ('user3', 'user3@example.com');

2.3.2 步骤2:为AnalyticDB的示例源表开启binlog

binlog开启仅支持表级别,需要为每一张表开启binlog。例如,为users表开启binglog,命令如下:

复制代码
ALTER TABLE users BINLOG=true;
ALTER TABLE users binlog_ttl='3d';

2.3.3 步骤3:在目标数据库mysql创建表结构

复制代码
CREATE DATABASE demo;
use demo;
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL
);

2.3.4 步骤4:在阿里云实时计算平台新建自定义连接器

参考官方文档,执行如下步骤:

1)下载连接器

2)登录实时计算控制台。在Flink全托管页签,单击目标工作空间操作列下的控制台。

3)在左侧导航栏,单击数据连接。

4)在数据连接页面,单击创建自定义连接器。上传步骤1下载的连接器。上传完成后,单击下一步,单击完成。创建完成的自定义连接器会出现在连接器列表中。

2.3.5 步骤5:在阿里云实时计算平台创建ETL任务

点击ETL左侧菜单,新建流作业,FlinkSQL如下:

复制代码
CREATE TEMPORARY TABLE adb_source_users (
  id INT,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'connector' = 'adb-mysql-cdc',
  'hostname' = '你的AnalyticDB',
  'username' = 'dba',
  'password' = '你的密码',
  'database-name' = 'demo',
  'table-name' = 'users'
);


CREATE TEMPORARY TABLE adb_sink_users (
  id INT,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'connector' = 'mysql',
  'hostname' = '你的mysql',
  'port' = '3306',
  'username' = 'root',
  'password' = '你的密码',
  'database-name' = 'demo',
  'table-name' = 'users'
);

INSERT INTO adb_sink_users
SELECT * FROM adb_source_users;

对ETL作业进行部署:

在目标数据库查询数据,发现源表的存量数据 已自动同步:

2.3.6 步骤6:测试增量数据同步

在源表插入一条新数据,SQL如下:

复制代码
INSERT INTO users (id, username, email) VALUES (4, 'user4', 'user4@example.com');

在目标数据库查询数据,发现源表的增量数据 已自动同步: