前言
記錄一些遇到的問題
(1)Mixed模式不能通過filter進行過濾
問題來源
在 Mixed 模式下,通過 canal 解析 Binlog 獲得 SQL 語句,再到另個資料庫中去執行這個SQL。
問題出現
在單機和一個instance下,SQL 執行了兩次,程式抛出異常。
出現這問題的可能原因
同時監聽了這兩個資料庫,導緻執行一次觸發一次
1. 通過設定白名單(subscribe)、黑名單
行不通
因為在 Mixed 模式下,filter将失效,因為不解析sql,是以無法準确提取tableName進行過濾 資料參考
2. 業務邏輯判斷
既然不能通過設定filter來判斷,那就自己寫邏輯。
根據上個問題,我們知道在 Mixed 模式下 無法準确提取 tableName,那麼就根據 資料庫名(schemaName)來判斷。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM2AjMxIzNkRWO3cTM1ITNzYzXxUTO1UTMxIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
(2)canal 指定 timestamp
當然這些工作,你得先停止 canal ./stop.sh
每修改完 instance.properties
,請删除 meta.dat
instance.properties
meta.dat
因為canal啟動後可能先去讀取
meta.dat
中 position 的位置,然後在目前位置往下讀
隻看了阿裡簡介,沒詳細看源碼,so,這些是我的猜想
在看一下阿裡的 EventParser 設計圖