Sink to MySQL
本文档描述如何使用 Sink to MySQL changefeed,将数据从平凯云 Essential 实时同步到 MySQL。
注意
目前,平凯云 Essential 的 changefeed 功能仅可按需申请开通。要申请此功能,请执行以下操作:
- 在 平凯数据库云服务控制台的右下角,点击 ?。
- 点击 Support Tickets 进入 Help Center。
- 创建一个工单。在 "Description" 字段中,填写 "Apply for changefeed"。
- 点击 Submit。
限制
- 每个平凯云 Essential instance 最多可创建 10 个 changefeed。
- 由于平凯云 Essential 使用 TiCDC 建立 changefeed,因此具有与 TiCDC 的相同限制。
- 如果待同步的表没有主键或非空唯一索引,在某些重试场景下,由于缺少唯一约束,可能会导致下游插入重复数据。
前置条件
在创建 changefeed 之前,你需要完成以下前置条件:
- 设置网络连接
- 导出并加载已有数据到 MySQL(可选)
- 如果不加载已有数据,仅希望同步增量数据到 MySQL,则需在 MySQL 中创建对应的目标表
网络
确保你的平凯云 Essential instance 能够连接到 MySQL service。你可以选择以下任一连接方式:
- 私有连接:满足安全合规要求,并保证网络质量。
- Public Network:适用于快速搭建。
私有连接利用云服务商的私有网络连接能力,使你 VPC 内的资源可以通过私有 IP 地址连接到其他 VPC 的 service,就像这些 service 直接部署在你的 VPC 内一样。
你可以通过私有连接,将平凯云 Essential instance 安全地连接到 MySQL service。如果你的 MySQL service 尚未支持私有连接,请参考 通过 Private Link 连接到阿里云 ApsaraDB RDS for MySQL 创建连接;腾讯云支持情况请以平凯数据库云服务控制台为准。
如果你的 MySQL service 可以通过公网访问,你可以选择通过公网 IP 或域名连接到 MySQL。
加载已有数据(可选)
Sink to MySQL 连接器只能将平凯云 Essential instance 中某一时间点之后的增量数据同步到 MySQL。如果你的平凯云 Essential instance 中已经存在数据,可以在启用 Sink to MySQL 之前,将已有数据导出并加载到 MySQL。
加载已有数据的步骤如下:
-
将 tidb_gc_life_time 设置为大于以下两个操作总耗时的值,以避免这期间的历史数据被 TiDB GC 回收。
- 导出和导入已有数据的时间
- 创建 Sink to MySQL 的时间
例如:
SET GLOBAL tidb_gc_life_time = '72h'; -
使用 Export 功能从平凯云 Essential instance 导出数据,然后使用社区工具如 mydumper/myloader 将数据加载到 MySQL service。
-
记录 Export 返回的 snapshot time。在配置 MySQL sink 时,将该时间戳作为起始位置。
在 MySQL 中创建目标表
如果你没有加载已有数据,需要在 MySQL 中手动创建对应的目标表,用于存储来自 TiDB 的增量数据。否则,数据将无法被同步。
创建 MySQL sink
完成前置条件后,你可以将数据同步到 MySQL。
-
进入目标平凯云 Essential instance 的概览页面,在左侧导航栏点击 Data > Changefeed。
-
点击 Create Changefeed,并选择 MySQL 作为 Destination。
-
在 Connectivity Method 中,选择连接 MySQL service 的方式。
- 如果选择 Public,填写你的 MySQL endpoint。
- 如果选择 私有连接,选择你在 网络 部分创建的私有连接,并填写 MySQL service 的 port。
-
在 Authentication 中,填写 MySQL 用户名和密码,并为 MySQL service 配置 TLS 加密。目前,平凯数据库云服务不支持 MySQL TLS 连接的自签名证书。
-
点击 Next,测试 TiDB 是否能成功连接到 MySQL:
- 如果连接成功,将进入下一步配置。
- 如果连接失败,会显示连接错误,你需要处理该错误。错误解决后,重新点击 Next。
-
自定义 Table Filter,筛选你希望同步的表。规则语法详见 table filter rules。
- Replication Scope:你可以选择仅同步具有有效键的表,或同步所有选中的表。
- Filter Rules:你可以在此列设置过滤规则。默认规则为
*.*,表示同步所有表。添加新规则并点击 Apply 后,平凯数据库云服务会查询 TiDB 中所有表,仅显示符合规则的表在 Filter results 下。 - Case Sensitive:你可以设置过滤规则中数据库和表名的匹配是否大小写敏感。默认情况下,匹配不区分大小写。
- Filter results with valid keys:此列显示具有有效键(包括主键或唯一索引)的表。
- Filter results without valid keys:此列显示缺少主键或唯一键的表。这些表在同步时存在挑战,因为缺少唯一标识,可能导致下游处理重复事件时数据不一致。为保证数据一致性,建议在同步前为这些表添加唯一键或主键,或通过添加过滤规则排除这些表。例如,可以通过规则
"!test.tbl1"排除表test.tbl1。
-
自定义 Event Filter,筛选你希望同步的事件。
- Tables matching:你可以在此列设置 event filter 应用到哪些表。规则语法与前述 Table Filter 区域相同。
- Event Filter:你可以选择要忽略的事件类型。
-
在 Start Replication Position 中,配置 MySQL sink 的起始位置。
- 如果你已通过 Export 加载了已有数据,请选择 From Time,并填写 Export 返回的 snapshot time,确保时区设置正确。
- 如果上游平凯云 Essential instance 没有任何数据,选择 Start replication from now on。
-
点击 Next 配置 changefeed。
在 Changefeed Name 区域,指定 changefeed 的名称。
-
检查配置。如果所有设置无误,点击 Submit。
如果需要修改配置,点击 Previous 返回上一步配置页面。
-
创建完成后,sink 状态会从 Creating 变为 Running。
点击 changefeed 名称,可以查看更多 changefeed 详情,如 checkpoint、replication latency 及其他统计/指标(信息)。
-
如果你已 加载了已有数据 并延长了 GC 时间,sink 创建完成后请将其恢复为原值(默认值为
10m):SET GLOBAL tidb_gc_life_time = '10m';