TiCDC因DDL阻塞无法恢复同步

cdc.log (547.6 KB)
cdc_stderr.log (5.0 KB)
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0.8
  • 【问题描述】:TiCDC因DDL阻塞无法恢复同步

同步的目标数据库是mysql 因为是借用别的项目的数据库 目标数据库的用户权限不高 所以这个测试中间有些通融做法

– 以下是在源数据库(tidb4.0.8)上执行的语句
– step 1 目标mysql数据库没有test_cdc库 所以这条ddl会失败
create table dic_event_node_tmp like test_cdc.dic_event_node_cdc
;
insert into dic_event_node_tmp select * from test_cdc.dic_event_node_cdc
;

– step 2 意识到上面的ddl失败之后 我drop掉 dic_event_node_tmp 重新执行了这个:
create table dic_event_node_tmp like dic_event_node_cdc
;
insert into dic_event_node_tmp select * from dic_event_node_cdc
;

– step 3 执行完了之后觉得tmp表会互相影响了 所以又执行了这个
create table dic_event_node_tmp2 like dic_event_node_cdc
;
insert into dic_event_node_tmp2 select * from dic_event_node_cdc
;

监控的cdc信息如下(附件有详细日志)
– 执行step 1 之后的情况:
[tidb@bjgsyl059225 log]$ tiup cdc cli changefeed list
Starting component cdc: /home/tidb/.tiup/components/cdc/v4.0.8/cdc cli changefeed list
[
{
“id”: “simple-replication-task”,
“summary”: {
“state”: “stopped”,
“tso”: 420582918822297606,
“checkpoint”: “2020-11-03 17:41:50.400”,
“error”: null
}
}
]

– 执行step 2 之后的情况:
[tidb@bjgsyl059225 log]$ tiup cdc cli changefeed list
Starting component cdc: /home/tidb/.tiup/components/cdc/v4.0.8/cdc cli changefeed list
[
{
“id”: “simple-replication-task”,
“summary”: {
“state”: “stopped”,
“tso”: 420582918822297606,
“checkpoint”: “2020-11-03 17:41:50.400”,
“error”: {
“addr”: “10.18.59.240:8300”,
“code”: “CDC:ErrProcessorUnknown”,
“message”: “[CDC:ErrMySQLTxnError]Error 1146: Table ‘data_report_dev.dic_event_node_tmp’ doesn’t exist”
}
}
}
]

– 我在目标数据库mysql上执行了 create table dic_event_node_tmp like dic_event_node_cdc 之后, 再启动cdc同步之后
[tidb@bjgsyl059225 log]$ tiup cdc cli changefeed list
Starting component cdc: /home/tidb/.tiup/components/cdc/v4.0.8/cdc cli changefeed list
[
{
“id”: “simple-replication-task”,
“summary”: {
“state”: “normal”,
“tso”: 420582918822297606,
“checkpoint”: “2020-11-03 17:41:50.400”,
“error”: null
}
}
]
– 过了一会儿之后 出现了这个报错
[tidb@bjgsyl059225 log]$ tiup cdc cli changefeed list
Starting component cdc: /home/tidb/.tiup/components/cdc/v4.0.8/cdc cli changefeed list
[
{
“id”: “simple-replication-task”,
“summary”: {
“state”: “stopped”,
“tso”: 420582918822297606,
“checkpoint”: “2020-11-03 17:41:50.400”,
“error”: {
“addr”: “10.18.59.240:8300”,
“code”: “CDC:ErrProcessorUnknown”,
“message”: “[CDC:ErrMySQLTxnError]Error 1054: Unknown column ‘_id’ in ‘field list’”
}
}
}
]

请问这种情况之后 我要如何恢复整个同步任务?

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

现在的情况是这个cdc任务已经无法启动 同时最后一个报错也没法子绕开
那我是直接舍弃这个任务重建还是怎么处理比较好?

另外 我的测试环境时区存在其他问题

https://asktug.com/t/topic/63192/31

可能导致了日志里一直有timezone时间很长的记录

你好,
完整 ticdc 的 log 辛苦发下, 我们看下, 另外如果需要快速恢复可以重建任务, 继续使用

完整日志是cdc.log已经附上了; 这是在cdc机器上的日志目录拿到的 还需要哪里的日志呢?

稍等, 看下

测试发现在tidb执行这样的语句,
insert into dic_event_node_tmp2 select * from dic_event_node_cdc;

cdc直接推送到mysql是会报错的:
从[CDC:ErrMySQLTxnError]Error 1054: Unknown column ‘_id’ in ‘field list’来看
应该是tidb的隐藏列_id无法推送到mysql

现在的问题就变成了如果出现这种报错 整个任务只能放弃了重来 是否有建议的异常处理办法?

TiDB 的 handle 隐藏列名字应该是 _tidb_rowid。请问 dic_event_node_cdc 的表结构可以提供一下么

你说对了 我从里边拿结构做比较的时候 发现另外一个etl工具给它扩展了一个_id字段 :joy:

:+1::+1::+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。