binlog复制中断报错Field 'user_id' doesn't have a default value

【 TiDB 使用环境】生产\测试环境\ POC
生产环境

【 TiDB 版本】
v5.1.2

【遇到的问题】
A集群通过drainer同步到B集群
同步中断,drainer日志报错如下
[2022/09/05 14:52:50.640 +08:00] [ERROR] [executor.go:111] [“Exec fail, will rollback”] [error=“Error 1364: Field ‘user_id’ doesn’t have a default value”]

然后去B集群手动查一下这条数据,也是无法查出:
select user_id from xxx_tb where row_id=9223521735016135040;
ERROR 1364 (HY000): Field ‘user_id’ doesn’t have a default value

如果查询其它列,比如name,则不会报错的,如下面sql正常
select opt from xxx_tb where row_id=9223521735016135040;

这个表上有一个唯一索引,是 (xxx_id,user_id)

下面sql显示这条数据已经存坏。
select * from xxx_tb where user_id=‘82946666’;
ERROR 1105 (HY000): [components/tidb_query_executors/src/table_scan_executor.rs:373]: Data is corrupted, missing data for NOT NULL column (offset = 1)

查了一些askgtug的帖子,应该是bug导致的。

现在问题是:
1、这个bug是什么原因导致的,目前在哪个版本修复的?
2、这1条损坏的数据有办法删除吗,这样可以避免重做下游B集群

【复现路径】做过哪些操作出现的问题
【问题现象及影响】
【附件】

  • 相关日志、配置文件、Grafana 监控(https://metricstool.pingcap.com/)
  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息
  • TiDB-Overview 监控
  • 对应模块的 Grafana 监控(如有 BR、TiDB-binlog、TiCDC 等)
  • 对应模块日志(包含问题前后 1 小时日志)

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

看git的描述是在4.0就已经修复了。

5.X 不推荐用binlog了,推荐用 tiCDC…

错误的数据,用这个试试,检查下索引和数据是否有问题
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-check-table-index#admin-check-tableindex

现在没办法删除么?

https://docs.pingcap.com/zh/tidb/dev/tidb-binlog-overview#注意事项

谢谢,是的,没办法删除这条数据

5.1版本又冒出来了,:smile:

:ok_hand::ok_hand:

A集群上面数据正常的不?

A集群上数据是正常的。B集群上应该只有那一条数据又问题。

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