字段类型由int修改成varchar后,通过drainer同步,在下游为乱码

【 TiDB 使用环境】生产

【 TiDB 版本】
v5.2.2

【遇到的问题】
在上游通过alter语句修改字段类型,sql如下:
alter table table_name MODIFY PRStatus varchar(50) DEFAULT NULL comment ‘PR状态’

在上游查询

在下游查询

修改后的表结构

drainer中相关日志


【附件】

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

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

下游手动执行这样的 ddl 会乱码吗

你这里使用的版本 v5.2.2,在这个版本之前有个 alter table modify column 的 bug,会导致数据乱码:

https://github.com/pingcap/tidb/pull/31070

这个 pr 被 merge 进去的时间是 2022 年 4 月 12 号,你可以检查下你版本的时间:

[bin]$ ./tidb-server -V

如果时间早于 4 月 12 号,那么恭喜你,很可能你遇到这个 bug 了。

这个 bug 的触发条件是并发执行 alter table modify column,你可以通过命令检查下 ddl 有没有被重复(并发)执行:
mysql> admin show ddl jobs;

如果也有,那就确认是这个问题了。

bug 的触发条件,可以参考:

谢谢!我们早于2022年4月12号

我们升级到5.4.1版本是否可以解决这个问题?

按道理讲是可以的!

你好,这个版本之前的所有版本都有这个问题?

TiDB v5.1、5.2、5.3 这几个版本

谢谢!
5.0应该也有,我们之前modify后,下游一直同步不了,只好全清了,重新全量同步一次再用drainer增量同步

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