深入理解Mysql讀寫分離

Mysql的 Replication 是一個異步複製的過程,從一個 Master複製到另一個 Slave。在 Master 與 Slave 之間的實現整個複製過程主要由三個線程來完成,其中兩個線程( Sql線程 和 IO線程 )在 Slave 端,另外一個線程(IO線程)在 Master 端

MySQL 複製的基本過程如下:

  1. Slave 上面的IO線程連接上 Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)之後的日誌內容;
  2. Master 接收到來自 Slave 的 IO 線程的請求後,通過負責複製的 IO 線程根據請求信息讀取指定日誌指定位置之後的日誌信息,返回給 Slave 端的 IO 線程。返回信息中除了日誌所包含的信息之外,還包括本次返回的信息在 Master 端的 BinaryLog 文件的名稱以及在 Binary Log 中的位置;
  3. Slave 的 IO 線程接收到信息後,將接收到的日誌內容依次寫入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的文件名和位置記錄到master- info文件中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”
  4. Slave 的 SQL 線程檢測到 Relay Log 中新增加了內容後,會馬上解析該 Log 文件中的內容成爲在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的數據是完全一樣的。

實現思路.
這裏寫圖片描述
代碼就不寫了(網上一搜一大把)

其實從服務器也可以追從服務器,master只複製給一個slave 1,其他slave2追slave1 組成以環形,這樣呢可以減少一些master的壓力
參考:https://my.oschina.net/u/1169079/blog/390726

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