天天看點

MySQL如何傳輸二進制日志

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。示意圖(大圖):

MySQL如何傳輸二進制日志

在主庫端一旦有新的日志産生後,立刻會發送一次廣播,dump線程在收到廣播後,則會讀取二進制日志并通過網絡向備庫傳輸日志,是以這是一個主庫向備庫不斷推送的過程;

新日志在産生後,隻需一次廣播和網絡就會立刻(<1ms)向發送到備庫,如果主備之間網絡較好的話(例如rtt<1ms),備庫端的日志也就小于2ms了。是以,一般的(依賴于rtt),備庫的實時性都非常好。 參考:1. mysql replication manual

2. 圖解"how mysql replication works"

have fun!

繼續閱讀