Canal工作原理


1、MySQL主從復制原理

2、Canal 的工作原理

  1. canal模擬MySQL slave的交互協議,偽裝自己為MySQL slave,向MySQL master發送dump協議
  2. mysql master收到dump請求,開始推送binary log為slave
  3. canal解析binary log對象(原始為byte流)

3、MySQL的binary log

MySQL 的二進制日志可以說是 MySQL 最重要的日志了,它記錄了所有的 DDL 和DML (除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。

一般來說開啟 binlog 日志大概會有 1% 的性能損耗。 binlog日志有兩個最重要的使用場景:

  1. MySQL Replication 在 Master 端開啟 binlog,Mster 把它的二進制日志傳遞給 slaves 來達到 master-slave 數據一致的目的。
  2. 自然就是數據恢復了,通過使用 mysql binlog 工具來使恢復數據

4、binary log 格式

binlog有3中格式:statement,row,mixed

4.1 statement

語句級別

binlog會記錄每次執行的寫操作的語句,注意記錄的是語句,salve會自動重新執行寫操作語句,從而達到與master一致

優點: 節省空間

缺點: 有可能造成數據不一致(例如:隨機數)

4.2 row

行級

binlog會記錄每次操作后每行記錄的變化

優點:保持數據的絕對一致性。因為不管sql是什么,引用了什么函數,他只記錄執行后的效果。

缺點:占用較大空間。 如果一條語句執行之后導致很多行發生了變化, 則會產生很多條記錄

4.3 mixed

statement的升級版,一定程度上解決了因為一些情況而造成的statement模式不一致問題

在某些情況下會按照 ROW的方式進行處理

  1. 包含UUID()時
  2. 包含 auto_increment字段的表被更新時
  3. 執行 insert delayed語句時
  4. 用UDF時

優點:節省空間,同時兼顧了一定的一致性。

缺點:還有些極個別情況依舊會造成不一致,另外statement和mixed對於需要對binlog 的監控的情況都不方便。

由於 canal 是監控的數據的變化, 所以 binlog 的格式需要設置成 row 格式  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM