MySQL如何傳輸二進位制日誌

orczhou發表於2016-03-28

MySQL Replication可以很方便的用來做應用的讀擴充套件,也可以幫MySQL實現一定程度的HA方案。MySQL通過向備庫傳送二進位制日誌來實現Replication,本文將通過二進位制日誌相關原始碼的主要介面來解釋:“MySQL如何傳輸二進位制日誌,是主庫推,還是備庫拉?MySQL日誌傳輸的實時性如何?”。

在MySQL Replication結構中,備庫端初次通過CHANGE MASTER TO完成Replication配置,再使用start slave命令開始複製。更細緻的,備庫通過IO Thread向主庫發起讀取binlog的請求(COM_BINLOG_DUMP命令),主庫收到COM_BINLOG_DUMP請求後,使用單獨執行緒(dump thread)不斷向備庫IO Thread傳送Binlog。示意圖(大圖):

在主庫端一旦有新的日誌產生後,立刻會傳送一次廣播,dump執行緒在收到廣播後,則會讀取二進位制日誌並通過網路向備庫傳輸日誌,所以這是一個主庫向備庫不斷推送的過程;

新日誌在產生後,只需一次廣播和網路就會立刻(<1ms)向傳送到備庫,如果主備之間網路較好的話(例如RTT<1ms),備庫端的日誌也就小於2ms了。所以,一般的(依賴於RTT),備庫的實時性都非常好。 參考:1. MySQL Replication Manual

2. 圖解”How MySQL Replication Works”

Have fun!


相關文章