开发者社区> 问答> 正文

mysql 主从binlog差距太大,会导致canal的主备切换失败

环境信息

canal version 1.1.1(其他版本也是如此) mysql version 5.7

问题描述

master与standby切换场景,如果mysql本身的主从 binlog文件差别很大的话,会导致切换失败,会找不到position。后面canal的主备切换改变目前的实现方式吗?

主>从 切换。很多时候切换是正常的能够做到,但是一旦binlog的差有点大的时候,就会切换失败,找不到position,应该是跟目前的切换实现方式有关系吧,每次都需要去停掉canal server,停掉canal-client 然后去zk上删除destination node,然后重启 server 跟client。

原提问者GitHub用户wangjinzhao

展开
收起
古拉古拉 2023-05-08 14:56:54 169 0
2 条回答
写回答
取消 提交回答
  • 如果从落后于主,我们会找到主库里最后的binlog timestamp(比如5分钟),从落后于主(比如在2分钟),基于5分钟的时间戳去定位,我们会在从库中找到最后一条为2分钟的offest,从这个位点开始继续消费,因为主从关系的存在,从库会慢慢应用2分~5分的binlog数据,确保主从切换不丢binlog消费

    切换的时候是以时间戳进行定位的,在从上找到最接近这个时间的,如果你走GTID订阅就没这个办法

    原回答者GitHub用户agapple

    2023-05-09 18:01:44
    赞同 展开评论 打赏
  • 在 Canal 中,主备切换需要根据已同步的 binlog 位置信息进行切换,如果 binlog 文件差异较大,会导致切换失败。这种情况下,需要对 Canal 进行重建,重新同步数据。因此,建议在实际场景中,尽量保证主备之间的 binlog 文件差异不要太大。

    对于 Canal 的主备切换方式,早期版本确实需要停止 Canal Server、删除 ZooKeeper 上的 destination 节点,然后重新启动 Canal Server 和 Canal Client 进行主备切换。但是,从 Canal 1.1.4 版本开始,支持自动感知主备切换的问题,并且在不停止 Canal Server 的情况下,自动更新 binlog 位置信息,从而实现主备切换。具体实现方式是通过监控 MySQL 内部的 GTID 变化来完成的。

    因此,建议升级 Canal 到 1.1.4 或者更高版本,以便自动感知主备切换,并自动完成 binlog 位置的更新,从而实现更加稳定和高效的主备切换。

    2023-05-08 14:59:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像