-
我一开始反馈的问题,后来排查发现是因为上下游表结构不一致,主库里没索引,备库里有索引,同步是跟主,校验是跟备,所以一开始排查问题不对,报错原因不是collation,就是因为索引缺失导致。
→ 解释的有问题,“使用 sync-diff-inspector 数据校验,告知两个表的表结构不一致” 应该是报错确实指出这个 collation 的区别。绕过方法 collate 才应该是解决这个问题的方法。(第一处因果对应不上) -
而后来我发的截图报错,的确是因为chunk计算不对导致的同步失败。
→ chunk 计算不对,就是说明存在数据不一致的情况。sync-diff 是基于索引去分 chunk,然后上下游同时 取 chunk 内的 cdc32 计算结果。也就是说,如果 chunk 不对,那么就是数据不一致(也可能是上下游分 chunk 的有问题)。(chunk 计算不对,不能算根因,只能算现象) -
把校验涉及的表都看一下表结构,把所有text、blob、json格式的都忽略校验,大概率有用
→ 这个大概率有用,不太清楚其中所谓的有用的原理是绕过了哪一步。 -
调整下chunk_size,有时候有用
–>可能对于小表来说,可能直接就走全表扫描了,不会用索引区分 chunk,可能和下面的有点一个意思得感觉。(个人猜测) -
不单独设置该表的校验规则,让工具自己去全表操作扫描,有时候有用
→ 也不清楚现象和其中原理。
不过,我觉得你的下游可能存在索引数据不一致的情况,建议还是做做 admin check table,别以后生产出事。