1、MySQL主從復制原理
2、Canal 的工作原理
- canal模擬MySQL slave的交互協議,偽裝自己為MySQL slave,向MySQL master發送dump協議
- mysql master收到dump請求,開始推送binary log為slave
- canal解析binary log對象(原始為byte流)
3、MySQL的binary log
MySQL 的二進制日志可以說是 MySQL 最重要的日志了,它記錄了所有的 DDL 和DML (除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。
一般來說開啟 binlog 日志大概會有 1% 的性能損耗。 binlog日志有兩個最重要的使用場景:
- MySQL Replication 在 Master 端開啟 binlog,Mster 把它的二進制日志傳遞給 slaves 來達到 master-slave 數據一致的目的。
- 自然就是數據恢復了,通過使用 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的方式進行處理
- 包含UUID()時
- 包含 auto_increment字段的表被更新時
- 執行 insert delayed語句時
- 用UDF時
優點:節省空間,同時兼顧了一定的一致性。
缺點:還有些極個別情況依舊會造成不一致,另外statement和mixed對於需要對binlog 的監控的情況都不方便。
由於 canal 是監控的數據的變化, 所以 binlog 的格式需要設置成 row 格式