DM 数据同步若干问题

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

  • 【TiDB 版本】:v1.0.4
  • 【问题描述】:

对DM进行了初步了解及功能测试之后,发现了若干问题,

1、当上游表结构和下游不一致导致同步失败,通过跳过或者是替换的方式来解决,如果通过跳过的方式(跳过某个事件)肯定会造成数据丢失,这个怎么解决?如果是通过替换的方式,怎么知道需要替换的sql是什么?

如下链接提问:

2、checkpoint是异步push到tidb的,那么checkpoint 在内存中存储的这段时间内是由master维护还是work维护?如果是master维护,目前master存在单点故障,假如还没push到tidb中master挂掉了,再从新启动任务,是否会导致数据重复?

3、任务由于某种原因导致同步失败,这种情况是不可避免的,那么后续的数据就不会在进行同步。特别是针对于tp业务,需要的数据延迟和准确性都非常高,为了能够及时发现同步异常并及时修复,有什么好的解决方案?

4、如果初次进行数据增量同步(历史数据已经通过其他的方式就行导入),那么如何保证增量同步和历史数据完美结合,不重复也不丢失数据?

如上问题,有点杂,麻烦帮忙解答一下!

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

  1. 上下游数据不一致,无法同步,首先应该避免这种情况,跳过丢失数据需要重新同步,或者手工补数据. 可以参考文档确认binlog pos会展示 https://pingcap.com/docs-cn/stable/reference/tools/data-migration/skip-replace-sqls/
  2. DM很快会推出DM HA,解决单点故障,重启后会开启safe mode,replace 一段时间数据
  3. 将故障接入告警系统
  4. 全量导出会记录position

1、每个work是只拉取对应实例的mysql binlog到relay_log 目录吗?

2、在拉取到本地的过程中,有没有做处理?和mysql的binlog完全保持一致?

3、有没有解析拉取到本地binlog的工具可以推荐?

是的,对应的 MySQL 实例的 binlog 到 relay-log 目录;

没有,可以理解完全一致的,然后会根据 task 任务订阅消费

拉去 MySQL binlog 的工具 ? 没有

2、在拉取到本地的过程中,有没有做处理?和mysql的binlog完全保持一致?

没有,可以理解完全一致的,然后会根据 task 任务订阅消费

Ok,那配置了黑白名单及过滤表的binlog会不会被同步?

3、有没有解析拉取到本地binlog的工具可以推荐?

拉去 MySQL binlog 的工具 ? 没有

我的意思是,有没有可以解析relay-log 目录中binlog的工具?那么在因为sql(语法、表结构)问题导致数据同步失败的时候就很容易看到是哪一条数据出错,偏移量是多少

在开始消费时候,DM 会检测具体的 SQL 语法、结构问题。同步过程中我们也会检查 DDL 和 DML 是否兼容和与语法正确,报错就会在这个 position 点报错,并输出报错,不需要你单独去检查的。

会被同步到 relay-log 中,但是 task 任务不会同步过滤表到下游。

DM 是可以报错在 哪个position 报错,但是无法知晓结束点在哪里,那么通过跳过操作的话就可能导致数据丢失。

可以试试 替换 或者 跳过操作
https://pingcap.com/docs-cn/stable/reference/tools/data-migration/skip-replace-sqls/

如果还是不清楚,建议反馈具体的案例,我们一起分析一下

好的。

:handshake: