問題:
今天在測試環境發現,各服務能收到canal的通知,但是沒有影響的數據內容。
開始以爲是應用程序問題,排查後發現有多個應該都是這個情況。所以懷疑是canal問題。
先說一下系統的實現情況:
mysql---(binlog)--->canal------>canal消費端---->kafka----->應用程序消費數據
處理步驟:
1、查詢canal的日誌(canal有兩個日誌,一個是meta.log一個是example.log)
第一個example.log日誌,比較直接的打印了錯誤的信息,是因爲表衝突導致
第二個meta.log日誌,我們可以發現canal一直在同步一行記錄,沒有獲取最新的binlog(導致環境刪除表導致)。
2、問題找到了,那接下來就是解決了。因爲是測試環境,所以想要直接跨過這個binlog就好了,那怎麼操作呢?
t1、查詢mysql的binlog情況
登錄mysql數據庫,查看binlog信息
show binary logs ;
查看指定日誌的詳情
show binlog events in 'mysql-bin.000035';
這個可以理解是一個行的起始編號,後面需要用到。
t2、修改canal配置
binlog文件找到了,起始號也找到了,那就是修改canal配置了
vi /canal/conf/example/meta.dat
將1處修改爲binlog的文件名
將2處修改爲binlog中的行超始編號
t3、重啓canal服務
上面配置好後,我們就可以重啓canal確認是否在消息了(canal的客戶端要注意了,如果客戶端沒有啓動,這個日誌也會沒有的,特別注意!!!!)。
tail -f /canal/logs/example/meta.log