天天看點

【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】之 一些坑