两个drainer,一个同步文件,一个同步数据库,但是同步数据库的没有进行同步

两个drainer,一个同步文件,一个同步数据库,但是同步数据库的没有进行同步,查看数据库可以看出,drainer 同时时间不一样,如下图



同步文件的ts时间大于同步数据库的ts

注意下帖子的标签

你的疑问是?

新装的drainer的 initialCommitTs是从哪里获取,默认为-1表示什么意思呢

请参考官网
https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-configuration-file#initial-commit-ts

Drainer 会从 PD 得到一个最新的 timestamp 作为初始时间,最新的 timestamp是指当前时间还是什么时间呢

可以简单理解为当前时间。

我理解是当前时间但是从结果看并不是,当我重新部署drainer时,drainer中ts并不是当前的时间,如下图:


而另一个已经部署drainer的ts如下图:

可以看到新部署的drainer的ts小于已经部署的drainer,那么最新的 timestamp是指当前时间还是什么时间呢

重新部署 drainer 前,是否有清理 checkpoint 信息 ?
官网有步骤,可以按照官网操作验证一下。
https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-faq#drainer-机器发生故障下游数据还在如何在新机器上重新部署-drainer

已经清理了 checkpoint

现在的问题是重新部署drainer时,drainer中ts并不是当前的时间

最新的 timestamp是指当前时间还是什么时间呢

这个时间是 drainer 部署的时候,从 pd 中获取最新的时间(简单理解为部署时刻的时间) ,随着同步任务的进行,checkpoint 点是会逐渐增大的。
我这边测试了一下是没问题的,怀疑是你那边 checkpoint 信息没有清理。

node1主机没有安装drainer,且下游的checkpoint 信息清理


image
node1主机安装drainer

pump日志:



pump组件日志中的TS为2021-02-25 09:26:53.488
drainer的TS为2021-02-22 16:37:53.661
新装的drainer的TS时间并不是获取最新的TS时间,从结果来看

原理上讲确实是最新时间的,以上是我的测试结果。

你这边测试有问题,可以反馈下 drainer.log 以及 drainer 的配置文件。 版本也反馈一下吧。

您的集群是否同步过binlog,我这边的集群在已经在2021-02-22同步了数据,这个时间是不是指binlog开始同步时的ts时间
另外的我们的 drainer.log 以及 drainer 的配置文件如下
drainer.log (1.5 MB)


版本Release Version"=v5.0.0-rc

你这边可以测一下同步一些数据后,把checkpoint删除,然后重新安装drainer,我就是这样测的,发现下游新生成的checkpoint时间是binlog开始同步时的ts时间

麻烦部署的时候,在 drainer 配置文件中设置一下 commit_ts: -1,参数部署位置可参考下面链接:

https://github.com/pingcap/docs-cn/blob/e33be43dbf00e874f2238667d9d23a33f8511d7a/config-templates/complex-tidb-binlog.yaml#L122

谢谢你的帮助,initial-commit-ts=-1时,可以获取pd最新的ts,这个最新的ts对于同步的场景是什么,是指增量同步当前最新的数据吗,丢弃之前的数据?
我默认安装drainer时,initial-commit-ts=0,这个ts是指pump最初写入binlog的时间吗

当之前旧数据都不需要时或者不存在(新库新表),可以指定 initial-commit-ts=-1 从最新的位点同步。

不配置 initial-commit-ts 时,默认是 0 ,即 drainer 会消费 pump 中所有的数据。也就是 pump 中保存的最旧的位点(pump 中有 gc 会清理数据,因此可能不是最初写入 binlog 的时间)

看你这边测试使用的是 5.0.0-rc ,v4.0.x 以上版本建议使用 TiCDC 进行数据同步。