大數據時代下的數據同步mysql
1)、基於數據庫日誌(好比mysql的binlog)的同步sql
咱們都知道不少數據庫都支持了主從自動同步,尤爲是mysql,能夠支持多主多從的模式。那麼咱們是否是能夠利用這種思想呢,答案固然是確定的,mysql的主從同步的過程是這樣的。數據庫
A、master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events,能夠經過show binlog events進行查看);大數據
B、slave將master的binary log events拷貝到它的中繼日誌(relay log);設計
C、slave重作中繼日誌中的事件,將改變反映它本身的數據。日誌
阿里巴巴開源的canal就完美的使用這種方式,canal 假裝了一個Slave 去和Master進行同步server
A、 canal模擬mysql slave的交互協議,假裝本身爲mysql slave,向mysql master發送dump協議對象
B、 mysql master收到dump請求,開始推送binary log給slave(也就是canal)blog
C、 canal解析binary log對象(原始爲byte流)事件
另外canal 在設計時,特別設計了 client-server 模式,交互協議使用 protobuf 3.0 , client 端可採用不一樣語言實現不一樣的消費邏輯。
另外canal 1.1.1版本以後, 默認支持將canal server接收到的binlog數據直接投遞到MQ