MySQL複製之理論篇

來源:互聯網
上載者:User

標籤:lib   格式   用途   自己   伺服器   部分   compress   邏輯   中繼   

一、MySQL複製概述

      MySQL支援兩種複製方式:基於行的複製和基於語句的複製(邏輯複製)。這兩種方式都是通過在主庫上記錄

二進位日誌、在備庫重放日誌的方式來實現非同步資料複製,其工作原理如:

      同一時間點主庫和備庫的資料可能存在不一致。複製通常不會增加主庫的開銷,主要是啟用二進位日誌帶來的開

銷。通過複製可以將讀操作指向備庫來獲得更好的讀擴充,但對於寫操作,除非設計得當,否則並不適合通過複製來

擴充寫操作。在一主庫多備庫的架構中,寫操作會被執行多次,這時候整個系統的效能取決於寫入最慢的那部分。

   複製解決的問題(用途):資料分布、、負載平衡、備份、高可用性和故障切換、MySQL升級測試等等。

 

二、MySQL複製原理

1. 基於語句的複製:

       主庫記錄那些造成資料更改的查詢,當備庫讀取並重放這些事件時,實際上只是把主庫上執行過的SQL再執行一遍。

   好處:實現簡單、二進位日誌裡事件更加緊湊。當主備庫模式不同時,邏輯複製能在多種情況下工作。容易理解,

出現問題可以很好定位。

       缺點:存在一些無法被正確複製的SQL,例如當使用了CURRENT_USER()函數時。更新必須是串列的,這需要更多的

鎖。預存程序和觸發器在使用基於語句的複製模式時也可能存在問題。

2. 基於行的複製:
       基於行的複製將實際資料記錄在二進位日誌中。

       好處:可以正確地複製每一行。無須重放更新主庫資料的查詢,更高效。減少鎖的使用。

       缺點:很難進行時間點恢複、開銷有時大有時小。無法判斷執行了哪些SQL。出現問題很難定位。無法處理諸如在

備庫修改表的schema這樣的情況。

       沒有那種模式對所有情況都是完美的,MySQL能夠在這兩種複製模式間動態切換。預設情況下使用的是基於語句的

複製方式,但如果發現語句無法被正確地複製,就切換到基於行的複製模式。

3. 複製使用的檔案:

(1)二進位檔案、中繼二進位檔案(檔案名稱可在mysql設定檔中配置)

(2)mysql-bin.index:記錄所有的二進位記錄檔名,不能刪除,MySQL依賴這個檔案識別二進位記錄檔。

(3)mysql-relay-bin.index:記錄所有中繼日誌的索引檔案,同樣不能刪除。

(4)master.info:儲存備庫串連到主庫所需要的資訊,格式為純文字,記錄了複製使用者的密碼。

(5)relay-log.info:記錄當前備庫複製的二進位日誌和中繼日誌座標。

4. 發送制事件到其他備庫:

      log_slave_updates選項可以讓備庫變成其他伺服器的主庫。在設定該選項後,MySQL會將其執行過的事件記錄到

它自己的二進位日誌中,這樣它的備庫就可以從其日誌中檢索並執行事件。原理圖如下:

註:

   當複製SQL線程讀中繼日誌時,會丟棄事件中記錄的伺服器ID和該伺服器本身ID相同的事件,從而打破了複製過程中

的無限迴圈。

5. 複製過濾器:

       複製過濾器選項允許僅複製伺服器上一部分資料。有兩種過濾方式:在主庫上過濾記錄到二進位日誌中的事件、在

備庫上過濾記錄到中繼日誌中的事件。原理圖如下:

註:

       除非萬不得已,不要使用複製過濾,因為它很容易中斷複製並導致問題,在需要災難恢複時也會帶來極大的不方便。

 

三、複寫拓撲
      可以在任意個主庫和備庫之間建立複製,只有一個限制:每一個備庫只能有一個主庫。各種拓撲結構的基本原則:

(1)一個MySQL備庫執行個體只能有一個主庫。

(2)每個備庫必須有一個唯一的伺服器ID。

(3)一個主庫可以有多個備庫。

(4)如果開啟了log_slave_updates選項,一個備庫可以把其主庫上的資料變化傳播到其他備庫。

1. 一主庫多備庫:

      在有少量寫和大量讀時,這種配置是非常有用的。可以把讀分攤到多個備庫上,直到備庫給主庫造成了太大的負擔,

或者主備之間的頻寬成為瓶頸為止。

2. 主動-主動模式下的主-主複製:
      也叫雙主複製或雙向複製,包含兩台伺服器,每一個都被配置成對方的主庫和備庫。

      這種配置最大的問題是如何解決衝突,例如,兩台伺服器同時修改一行記錄,或同時在兩台伺服器上向一個包含

auto_increment列的表裡插入資料。

      允許向兩個伺服器寫入所帶來的麻煩遠遠大於其帶來的好處。

3. 主動-被動模式下的主-主複製:

   把“主動-主動模式下的主-主複製”中的的一台伺服器配置成唯讀被動伺服器。

       這種方式使得反覆切換主動和被動伺服器非常方便,因為伺服器的配置是對稱的,這使得容錯移轉和故障恢複很容易。

4. 擁有備庫的主-主結構:

   為主-主複製中的每個主庫增加一個備庫。

       這種配置的優點是增加了冗餘,對於不同地理位置的複寫拓撲結構,能夠消除網站單點失效的問題。

5. 環形複製:
       每個伺服器都是在它之前的伺服器的備庫,是在它之後的伺服器的主庫。完全依賴於環上的每一個可用節點,大大增

加了整個系統失效的幾率。如果從環中移除一個節點,這個節點發起的事件就會陷入無限迴圈。

       可用通過為每個節點增加備庫的方式來減少環形複製的風險。

6. 主庫、分發主庫以及備庫:

       當備庫足夠多時,會對主庫造成很大的負載。這種拓撲使用一個備庫專門來進行複製的分發,移除主庫的負載。

   為了避免在分發主庫上做實際的查詢,可以將它的表修改為blackhole儲存引擎。如果主庫接近滿負載,不應該為其

建立10個以上的備庫。可以通過設定slave_compressed_protocol來節約一些主庫寬頻。可以通過分發主庫實現其他目的,例

如對二進位日誌事件執行過濾和重寫規則。

       使用分發主庫一個主要的缺點是無法使用一個備庫來代替主庫,因為由於分發主庫的存在,導致各個備庫與原始主庫

的二進位日誌座標已經不相同。

7. 樹或金字塔形:

        減輕了主庫的負擔,但它的缺點是中介層出現的任何錯誤都會影響到多個伺服器,中介層次越多,處理故障會更困難、

更複雜。

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.