tidb-cdc日志tables are not eligible to replicate

本文介绍了使用TiCDC从TiDB同步数据到MySQL时遇到的问题,即部分无有效索引的新建表无法同步。文中详细解释了有效索引的定义,并提供了解决方案,包括修改配置来强制同步无有效索引的表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

新建了一个cdc同步的任务,上游为tidb,下游为mysql,但是发现一些新建的表并不能同步到下游mysql中

二、排查

1.查看日志

# 内容如下这表明这个表不满足同步条件
tables are not eligible to replicate

2.cdc同步的限制

TiCDC 只能同步至少存在一个有效索引的表,有效索引的定义如下:

  • 主键 (PRIMARY KEY) 为有效索引。
  • 同时满足下列条件的唯一索引 (UNIQUE INDEX) 为有效索引:
    • 索引中每一列在表结构中明确定义非空 (NOT NULL)。
    • 索引中不存在虚拟生成列 (VIRTUAL GENERATED COLUMNS)。

三、解决办法

方案一、创建满足cdc同步条件的表

方案二、更改cdc为可以同步无有效索引的表

1.停止任务

tiup ctl:v4.0.15 cdc changefeed pause --pd=http://pd_ip:pd_port --changefeed-id=simple-replication-task

2.修改cdc任务配置文件

vim cdc.yaml
# 添加如下配置
enable-old-value = true
force-replicate = true

3.修改配置

tiup ctl:v4.0.15 cdc changefeed  update --pd=http://pd_ip:pd_port --config=./cdc.yaml --changefeed-id=simple-replication-task

4.启动cdc任务

tiup ctl:v4.0.15 cdc changefeed resume --pd=http://pd_ip:pd_port --changefeed-id=simple-replication-task

5.注意点
enable-old-value v4.0.5开始支持
force-replicate v4.0.8开始支持
对于没有有效索引的表,INSERT 和 REPLACE 等操作不具备可重入性,因此会有数据冗余的风险。TiCDC 在同步过程中只保证数据至少分发一次,
因此开启该特性同步没有有效索引的表,一定会导致数据冗余出现。如果不能接受数据冗余,建议增加有效索引,譬如增加具有 AUTO RANDOM 属性的主键列。

官网文档: 文档地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值