從Mysql主庫binlog直接進行同步數據,有啥好處?

大家都知道,MySQL主從複製時使用的binlog日誌,它記錄了所有的DDL和DML語句(除了數據查詢語句select、show等),以事件形式記錄,還包含語句所執行的消耗時間。

MySQL主從複製有以下幾個步驟:

  1. master(主庫)在每次準備提交事務完成數據更新前,將改變記錄到二進制日誌(binary log)中;
  2. slave(從庫)發起連接,連接到master,請求獲取指定位置的binlog文件;
  3. master創建dump線程,推送binlog的slave;
  4. slave啓動一個I/O線程來讀取主庫上binary log中的事件,並記錄到slave自己的中繼日誌(relay log)中;
  5. slave還會起動一個SQL線程,該線程從relay log中讀取事件並在備庫執行,完成數據同步;
  6. slave記錄自己的binlog。

image.png

通過上述步驟完成主從同步,需要將binlog推送到從庫,然後再讀取到relay log,從庫在啓動SQL進行進行sql語句的執行,時間太漫長;有沒有什麼方法可以減少這種同步時間,或者如果redis、hive想從MySQL主庫同步數據,該如何加快同步速度?

binlog記錄了Mysql數據的實時變化,是數據同步的基礎,服務需要做的就是遵守Mysql的協議,將自己僞裝成Mysql的slave來監聽業務主庫binlog,完成數據實時同步。

問:僞裝成Mysql的slave來監聽業務主庫binlog,完成數據實時同步,有啥好處?

答:可實時更新緩存
業務查詢類服務往往會在mysql之上架設一個緩存,減少對底層數據庫的訪問;當mysql庫數據變化時,如果緩存還沒有過期那麼就會拿到過期的數據,業務期望能夠實時更新緩存。

利用binlog服務,根據策略實時將數據同步到redis中,這樣就能夠保證了緩存中數據有效性,減少了對數據庫的調用,從而提高整體性能。

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章