天天看点

【Canal】之 一些坑

前言

记录一些遇到的问题

(1)Mixed模式不能通过filter进行过滤

问题来源

在 Mixed 模式下,通过 canal 解析 Binlog 获得 SQL 语句,再到另个数据库中去执行这个SQL。

问题出现

在单机和一个instance下,SQL 执行了两次,程序抛出异常。

出现这问题的可能原因

同时监听了这两个数据库,导致执行一次触发一次

1. 通过设置白名单(subscribe)、黑名单

行不通

因为在 Mixed 模式下,filter将失效,因为不解析sql,所以无法准确提取tableName进行过滤 ​​资料参考​​

2. 业务逻辑判断

既然不能通过设置filter来判断,那就自己写逻辑。

根据上个问题,我们知道在 Mixed 模式下 无法准确提取 tableName,那么就根据 数据库名(schemaName)来判断。

【Canal】之 一些坑

(2)canal 指定 timestamp

当然这些工作,你得先停止 canal ​

​./stop.sh​

每修改完 ​

​instance.properties​

​​ ,请删除 ​

​meta.dat​

因为canal启动后可能先去读取 ​

​meta.dat​

​ 中 position 的位置,然后在当前位置往下读

【Canal】之 一些坑

只看了阿里简介,没详细看源码,so,这些是我的猜想

在看一下阿里的 EventParser 设计图

【Canal】之 一些坑