同步出错问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0.1
  • 【问题描述】:从2.1.13版本binlog以mysql的方式同步至下游4.0.1版本,在同步应用过程中出错了,但是在重新配置initial_commit_ts之后还是无法跳过,下游一直还是报之前的同步出错的问题,这种问题该怎么处理或跳过呢

您好,根据您这边提供的描述,麻烦确认下 上游 TiDB 的版本、TiDB-Binlog 的版本。
另外同步出错可以详细描述下么? 比如拿下详细日志。

  • 如果同步过程中因 ddl 导致报错,可以按照参考下官网 FAQ 解决。链接如下:
  • 如果同步过程中因 dml 导致报错,需要先解决下 dml,不然跳过该错误后面还是可能会出现。

https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-faq#同步时出现上游数据库支持但是下游数据库执行会出错的-ddl应该怎么办

下游版本是4.0.1


另外根据你给的文档没有找到可以忽略的ts位点。这个要怎么跳过去呢

error 1067: Invalid default 这种报错猜测是上下游 sql_mode 不一致,建议将上下游 sql_mode 修改为一致然后再同步。

另外如果后面遇到不支持的 ddl 操作,可以参考下面步骤进行修复。

上次咨询过不是sql mode的问题,现在是日志里没有ignore-ts的日志所以无法跳过

您这边可以确认下上下游 sql_mode 是否一致。手动将建表语句插入到下游看下是否成功。先确认下 sql_mode 吧。

都说不是sqlmode的问题,前面我有咨询过,现在就想问下怎么去跳过,4.0.1版本没有ignore-ts提示的日志,也就是无法确认报错的具体ts位点,麻烦告知下怎么去跳过就好了

datetime(3) 改成 datetime 即可

现在是配置binlog type为tidb同步到下游的数据库报错,这个没法改日志内容吧

或者参考下这个帖子

没太理解你的意思,

就是这个建表语句已经是在binlog里面了,不是手动执行报错可以更改创建语句的

跳过下这个 pos 点,下游创建下新的表结构

我是跳不过,print之后的日志然后设置了之后下游还是报错

如果此类 sql 较多,建议更改上游环境,重新导入。
如果不方便,在可以保证上游没有新的 ddl 执行的情况下可以将下游提前创建此表结构,binlog 忽略所有 ddl 操作,将数据同步上。
https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-faq#什么是-checkpoint

看了下 Drainer的配置文件只有忽略库,表的同步设置,没有过滤ddl的设置选择

明白了,谢谢。

Drainer确实没有忽略ddl的选项是吗?你刚才说的可以跳过指定的错误

可以试试这个参数,这个是确认是否 DDL statement 同步的。

额,搞蒙了,sorry,楼上正解。
@lk463419442