MySQL Replication 線程(理解詳細過程)

來源:互聯網
上載者:User

標籤:避免   數值   開始   檔案名稱   ace   relay   一點   過程   操作   

Replication 線程

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


要實現MySQL 的Replication ,首先必須開啟Master 端的Binary Log(mysqlbin.xxxxxx)功能,否則無法實現。因為整個複製過程實際上就是Slave 從Master 端擷取該日誌然後再在自己身上完全順序的執行日誌中所記錄的各種操作


MySQL 複製的基本過程如下:
1. Slave 上面的IO 線程串連上Master,並請求從指定記錄檔的指定位置(或者從最開始的日誌)之後的日誌內容;
2. Master 接收到來自Slave 的IO 線程的請求後,通過負責複製的IO 線程根據請求資訊讀取指定日誌指定位置之後的日誌資訊,返回給Slave 端的IO 線程。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊在Master 端的Binary Log檔案的名稱以及在Binary Log 中的位置;
3. Slave 的IO 線程接收到資訊後,將接收到的日誌內容依次寫入到Slave 端的Relay Log 檔案(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master 端的binlog的檔案名稱和位置記錄到master-info 檔案中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log 的哪個位置開始往後的日誌內容,請發給我”

4. Slave 的SQL 線程檢測到Relay Log 中新增加了內容後,會馬上解析該Log 檔案中的內容成為在Master 端真實執行時候的那些可執行檔Query 語句,並在自身執行這些Query。這樣,實際上就是在Master 端和Slave 端執行了同樣的Query,所以兩端的資料是完全一樣的。

 

可能有些讀者朋友會有一個擔心,這樣搭建複製環境之後,難道不會造成兩台MySQL 之間的迴圈複製嗎?

    實際上MySQL 自己早就想到了這一點,所以在MySQL 的Binary Log 中記錄了當前MySQL 的server-id,而且這個參數也是我們搭建MySQL Replication 的時候必須明確指定,而且Master 和Slave 的server-id 參數值比需要不一致才能使MySQLReplication 搭建成功。一旦有了server-id 的值之後,MySQL 就很容易判斷某個變更是從哪一個MySQL Server 最初產生的,所以就很容易避免出現迴圈複製的情況。而且,如果我們不開啟記錄Slave 的Binary Log 的選項(--log-slave-update)的時候,MySQL 根本就不會記錄複製過程中的變更到Binary Log 中,就更不用擔心可能會出現迴圈複製的情形了。

 

MySQL Replication 線程(理解詳細過程)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.