MySQL之主從複製的過程和原理

來源:互聯網
上載者:User

標籤:mysql 主從同步的原理

    前幾天搭建了MySQL的主從複製,已經搭建完成,但是主從複製的原理還不知道,所以來研究一下。

    本文的部分內容來自於互連網。

    主從複製的過程

    首先要瞭解到的是一個單向主從複製的實現是由三個線程來完成,master一個IO線程,slave一個IO

線程和一個SQL線程。

    1. slave 上面的IO線程串連上 master,並請求從指定記錄檔的指定位置(或者從最開始的日誌)之後的日誌內容;

    2. master 接收到來自 slave 的IO線程的請求後,通過負責複製的IO線程根據請求資訊讀取指定日誌指定位置之後的日誌資訊,返回給slave端的IO線程。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊在master端的bin-log檔案的名稱以及在bin-log中的位置;

    3. slave的IO線程接收到資訊後,將接收到的日誌內容依次寫入到slave端的Relay Log檔案(hostname-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的檔案名稱和位置記錄到master- info檔案中,以便在下一次讀取的時候能夠清楚的告訴master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”

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

    下面是實際的操作圖

    1.首先看一下主庫的狀態

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/92/wKioL1VMc9WAJUolAADln3tdavQ440.jpg" title="QQ20150508162316.png" alt="wKioL1VMc9WAJUolAADln3tdavQ440.jpg" />

    

2.然後看一下從庫中master.info和nginx-relay-bin.000008(請無視名字,這個跟主機名稱有關)

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/97/wKiom1VMc7iwixsnAAFNotQJQJ8605.jpg" title="QQ20150508162907.png" alt="wKiom1VMc7iwixsnAAFNotQJQJ8605.jpg" />

  

master.info中一部分檔案內容,跟master的bin-log的名稱和位置是一致的

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/97/wKiom1VMc-yyt_TnAABnbg3KZ5Q941.jpg" title="QQ20150508162555.png" alt="wKiom1VMc-yyt_TnAABnbg3KZ5Q941.jpg" />

 

然後是nginx-relay-bin.000008的檔案(有刪節)

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/92/wKioL1VMecPSwu1oAAV1-8HsXG4894.jpg" title="QQ20150508164339.png" alt="wKioL1VMecPSwu1oAAV1-8HsXG4894.jpg" />


然後主庫建一個庫測試一下

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/97/wKiom1VMeK6TpglhAAEWvIzE2Yc027.jpg" title="QQ20150508165017.png" alt="wKiom1VMeK6TpglhAAEWvIzE2Yc027.jpg" />


看一下從庫的master.info和nginx-relay-bin.000008檔案

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6C/97/wKiom1VMee_iFlBmAACMcP6l_lc383.jpg" style="float:none;" title="QQ20150508165219.png" alt="wKiom1VMee_iFlBmAACMcP6l_lc383.jpg" />


nginx-relay-bin.000008檔案

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/93/wKioL1VMe2OQ_KeRAAIOLzVRi0s218.jpg" style="float:none;" title="QQ20150508165326.png" alt="wKioL1VMe2OQ_KeRAAIOLzVRi0s218.jpg" />


現在我們來類比一下故障,此時從資料庫宕機,此時master.info檔案不變,但是nginx-relay-bin.000008檔案產生變化

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/93/wKioL1VMfLjQ9QJ9AAGaO_LKvww685.jpg" title="QQ20150508170119.png" alt="wKioL1VMfLjQ9QJ9AAGaO_LKvww685.jpg" />


主要資料庫建立一個庫測試一下,

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6C/97/wKiom1VMfCvjx0QXAAFPL9ZQ99k350.jpg" title="QQ20150508170513.png" alt="wKiom1VMfCvjx0QXAAFPL9ZQ99k350.jpg" />


現在啟動從資料庫,此時relay-bin日誌會重新產生兩個,查看一下數值大的那個

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6C/93/wKioL1VMfvmSbrTQAAFlGqdgxE0597.jpg" title="QQ20150508170948.png" alt="wKioL1VMfvmSbrTQAAFlGqdgxE0597.jpg" />


查看nginx.relay-bin.000010

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6C/98/wKiom1VMf9bTVz4qAAZ53PEyrFA804.jpg" title="QQ20150508171325.png" alt="wKiom1VMf9bTVz4qAAZ53PEyrFA804.jpg" />


此時master.info檔案也會更新到最新的pos

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6C/93/wKioL1VMgeOjolceAABurZycrxY285.jpg" title="QQ20150508172321.png" alt="wKioL1VMgeOjolceAABurZycrxY285.jpg" />

故障類比完成。

寫到這裡,突然感覺寫的實在是太繁瑣了,詳細一點也好,保證大家能看明白,不會雲裡霧裡的感覺。


--------------------------------------分割線-----------------------------------------

說一下自己做實驗時一些小細節

1.搭建完單向主從的時候,在主庫建立了一個庫sunys01做測試,然後在從庫刪掉了他,此時的主從資料不一致,但是主從還是正常的,主庫再建一個庫,從庫也能同步的到資料。我一直以為主從同步只要是在從庫進行過操作就會導致主從斷掉。現在接上面的情況,從庫刪掉了sunys01,在主庫也刪掉sunys01,此時主從斷裂,主庫寫資料從庫無法同步資料, 現在我在從庫重新建立了一個sunys01庫,重啟一下mysql,主從恢複了,主庫中後續資料也成功同步。


2.做了一個雙向主從在主1建立新庫,同時他的master status變掉了,主1建立的庫在主2也有,但是主2的master status也變掉了。我同學也是做的雙主,但是主2的master status是不會變的,不知道是什麼原因


寫到這裡終於結束了,有什麼問題可以在評論中詢問,大家共同進步

MySQL之主從複製的過程和原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.