开发者社区> 问答> 正文

假设在一种的正常的场景中 canal 停止了 重新启动之后 canal 如何去定位上次停止的时候同步

假设在一种的正常的场景中 canal 停止了 重新启动之后 canal 如何去定位上次停止的时候同步到的binlog位点呢? canal定位位点的流程是怎样的呢?

原提问者GitHub用户hermitcai

展开
收起
山海行 2023-04-28 11:56:13 349 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    Canal 是一款基于 MySQL 数据库二进制日志进行增量解析和数据同步的开源工具,通常用于数据实时同步、数据备份等场景中。当 Canal 在执行数据同步任务时发生了停止,重新启动 Canal 的流程如下:

    记录上一次同步的位点 Canal 在同步 MySQL 的二进制日志时,会记录每个日志文件的位置(即 binlog 位点),包括文件名和位置偏移量。当 Canal 停止时,会将同步过程中最后一个 binlog 位点保存到本地文件中。

    重新连接 MySQL 并查询最新的 binlog 位置 当 Canal 被重新启动时,首先会重新连接 MySQL,并检查之前保存的最后一个 binlog 位点是否还在 MySQL 中存在。如果不存在,说明在 Canal 停止期间,MySQL 中的二进制日志已经被删除或者被清理了。此时,需要手动修改 Canal 配置,设置起始同步的 binlog 位置。

    如果最后一个 binlog 位点仍然存在,Canal 会查询 MySQL 中最新的 binlog 位点,并将其保存到内存中。

    从上一次同步的位点继续同步 Canal 获取到最新的 binlog 位点之后,会从之前记录的最后一个 binlog 位点开始继续同步 MySQL 中的二进制日志。Canal 会不断地读取 MySQL 中的 binlog,将其中的增量数据解析出来,并转换成对应的 SQL 语句,然后发送到目标端进行数据同步。 总的来说,Canal 在重新启动时,会先记录上一次同步的 binlog 位置,然后查询最新的 binlog 位置,并从上一次同步的位置开始继续同步,以保证数据同步的连续性。

    2023-04-28 16:08:13
    赞同 展开评论 打赏
  • 默认情况下解析的binlog位置信息保存在文件中 canal.instance.global.spring.xml = classpath:spring/file-instance.xml

    HA是保存在zk中 默认1000ms刷新一次 canal.instance.global.spring.xml = classpath:spring/default-instance.xml

    原回答者GitHub用户dingyufei615

    2023-04-28 14:57:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载