canal mysql分库分表_[canal数据库同步]基于canal的实时数据同步

使用canal做数据备份而不用mysql自带的主从备份的场景主要为:

跨数据库的数据备份,例如mysql=> oracle

数据异构,即对同一份数据做不同的分库分表查询。例如卖家和买家各自分库索引

单机单点消费mysql的log-bin后直接更新到备份数据库中,数据一致性没有问题。但是如果变成分布式环境以及消费mysql的log-bin后将更新数据推到MQ中由多节点消费更新到多个备份数据库中,则会出现数据更新时序和数据一致性的问题。

而以上代码在update sql中除了获取值变化了的字段,也反查数据库获取了未变化的字段。因此每次update的sql实际上是该条记录的全量数据。

通过在表中加上时间戳字段作为记录的版本号,用逻辑删除取代物理删除delete,修改以上代码的sql拼接,insert操作时忽略主键冲突、update操作时仅更新版本号(时间戳)旧的记录,可以极大避免数据不一致的现象,也解决了MQ重复消费的问题。

再通过定时任务,每天一次增量数据更新,每周一次全量数据更新,保证数据的最终一致性。

原文:https://www.cnblogs.com/sqlserver-mysql/p/12747528.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canal 是一个开源的数据库数据变更监听和追踪框架,可以捕获 MySQL、Oracle、PostgreSQL、SQL Server等数据库的增、删、改操作,并将这些操作记录下来。为了解决数据同步的问题,Canal 提供了分库同步的功能。 分库同步的核心思想是将源库中的数据按照一定规则分散到多个目标库中,以提高数据处理的效率和容错性。Canal 支持两种方式进行分库同步:基于实例级别的分库同步和基于级别的分库同步。 基于实例级别的分库同步是将整个源库中的数据同步到多个目标库中。这种方式适用于源库中的数量较少,数据量较小的情况。在这种情况下,Canal 可以将源库中的数据按照一定规则分散到多个目标库中,以提高数据处理的效率和容错性。 基于级别的分库同步是将源库中的某些数据同步到多个目标库中。这种方式适用于源库中的数量较多,数据量较大的情况。在这种情况下,Canal 可以根据名、数据库名和中的某些字段等规则,将源库中的数据按照一定的规则分散到多个目标库中。 无论是基于实例级别的分库同步还是基于级别的分库同步Canal 都提供了一系列的配置选项,可以满足不同的数据同步需求。同时,Canal 还提供了自定义处理器的功能,用户可以根据自己的需求,编写自己的数据处理逻辑,从而实现更灵活、更高效的数据同步方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值