【TiDB 使用环境】生产环境 /测试/ Poc
【TiDB 版本】V6.5.1及以上
【操作系统】linux
【部署方式】虚拟机部署
【需要解决的问题】
在tidb多个中心之间进行数据同步,采用ticdc+kafka模式。
同步的数据包括业务系统产生的数据、运维操作产生的数据变化。
业务系统产生的变化在多中心之间同步没有问题,本身就是业务数据,所有的增删改都符合业务逻辑性。
运维操作时删除数据会产生破坏性影响,有时候会出现运维操作误删库表,引起删除操作扩散,导致多中心数据丢失。
【目标】
解决因运维误删引起的多中心数据丢失。
【预设方案】
业务系统操作特点:操作可控,可适度改造系统。
运维人员操作特点:操作不可控,存在不确定性,无法预知运维人员操作。
基于以上特点,方案如下:
1、改造业务系统,在所有的删除语句后增加where条件,条件为 " id != ‘aaaa’ "
2、在ticdc进行捕获时,删除操作只捕获条件中" id != ‘aaaa’ "的语句发送到下游,不符合条件的删除语句抛弃掉。
【预设效果】
通过这种方式,由于运维人员不会在操作时增加条件 " id != ‘aaaa’ ",这样删除同步仅处理业务系统产生的操作。
【求助】
请问各位大神,这种方案是否可行?
如果可行,请问如何进行配置?
如果不可行,请问是否有其他方案?
这是过滤模式吧,就是说符合条件的语句不同步到下游,能配置成反向模式么,就是说符合条件的才同步到下游?
这个参考下:
Changefeed 日志过滤器 | TiDB 文档中心
目标:运维产生的删除操作不进行同步,仅同步业务系统产生的删除操作。
方式:升级业务系统,在每个删除语句后面增加where条件,“ id != ‘aaaa’ ”,aaaa是个不存在的值。由于运维操作不可控,因此无法加限制。
处理模式:删除操作仅允许条件中包含“ id != ‘aaaa’ ”的语句同步到下游。
矛盾:根据过滤规则,目前符合条件语句只能过滤掉,无法同步。
求助:是否支持白名单规则模式,即符合规则的同步到下游,不过滤掉?或其他方式。
可以发起个投票或者去【建议反馈】版本提需求
这个方案怎么说都是可行的,你本身就是ticdc+kafka的模式。就算ticdc上过滤不了,你的kafka上肯定还有个应用往下游写的,在这里过滤也可以做到。
所以方案我觉得怎么样都能做的,是可行的。
不过我觉得你的处理方法太绕了。我还是信奉“如无必要,勿增实体”。现在的问题是运维操作删除数据有可能误删除。应该想办法在源头解决问题,而不是发生了这个问题再去拦截。
如果能做到运维操作删除前先备份,保证删除可回退,就算这些操作被复制到下游也是能挽回的就好了。
放任源头不管,会增加很多解决问题的复杂度。最后很容易引入更大的麻烦。