为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
对DM进行了初步了解及功能测试之后,发现了若干问题,
1、当上游表结构和下游不一致导致同步失败,通过跳过或者是替换的方式来解决,如果通过跳过的方式(跳过某个事件)肯定会造成数据丢失,这个怎么解决?如果是通过替换的方式,怎么知道需要替换的sql是什么?
如下链接提问:
2、checkpoint是异步push到tidb的,那么checkpoint 在内存中存储的这段时间内是由master维护还是work维护?如果是master维护,目前master存在单点故障,假如还没push到tidb中master挂掉了,再从新启动任务,是否会导致数据重复?
3、任务由于某种原因导致同步失败,这种情况是不可避免的,那么后续的数据就不会在进行同步。特别是针对于tp业务,需要的数据延迟和准确性都非常高,为了能够及时发现同步异常并及时修复,有什么好的解决方案?
4、如果初次进行数据增量同步(历史数据已经通过其他的方式就行导入),那么如何保证增量同步和历史数据完美结合,不重复也不丢失数据?
如上问题,有点杂,麻烦帮忙解答一下!
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
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 报错,但是无法知晓结束点在哪里,那么通过跳过操作的话就可能导致数据丢失。