1. 程式人生 > >001.MySQL高可用主從復制簡介

001.MySQL高可用主從復制簡介

原理 lov tran RoCE mas 消息傳遞 add ESS otto

一 簡介

1.1 概述

Mysql內建的復制功能是構建大型,高性能應用程序的基礎。將Mysql的數據分布在多個系統之上,這種分布的機制,是通過將Mysql的某一臺主機的數據復制到其它主機(slaves)上,並重新執行一遍來實現的。復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。

二 技術原理

2.1 支持的復制類型

  • 基於語句的復制:在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認采用基於語句的復制,效率比較高,一旦發現沒法精確復制時, 會自動選著基於行的復制。
  • 基於行的復制:把改變的內容復制過去,而不是把命令在從服務器上執行一遍. 從mysql 5.0開始支持。
  • 混合類型的復制: 默認采用基於語句的復制,一旦發現基於語句無法精確的復制時,就會采用基於行的復制。

2.2 技術特點

MySQL復制技術有以下一些特點:
  1. 數據分布 (Data distribution)
  2. 負載平衡(load balancing)
  3. 備份(Backups)
  4. 高可用性和容錯行(High availability and failover)

2.3 復制原理

  1. master將改變記錄到二進制日誌(binary log)中(這些記錄叫做二進制日誌事件,binary log events);
  2. slave將master的binary log events拷貝到它的中繼日誌(relay log);
  3. slave重做中繼日誌中的事件,將改變反映它自己的數據。
詳解: 第一步:master記錄二進制日誌 在每個事務更新數據完成之前,master在二進制日誌記錄這些改變。MySQL將事務串行的寫入二進制日誌,即使事務中的語句都是交叉執行的。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。 第二步:slave將master的binary log拷貝到它自己的中繼日誌
首先,slave開始一個工作線程——I/O線程,I/O線程在master上打開一個普通的連接,然後開始binlog dump process。Binlog dump process從master的二進制日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。 第三步:SQL線程從中繼日誌讀取事件 SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件從而更新slave的數據,使其與master中的數據一致,只要該線程與I/O線程保持一致。中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小。 此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。復制過程有一個很重要的限制:復制在slave上是串行化的,也就是說master上的並行更新操作不能在slave上並行操作。

三 常見架構

MySQL復制技術在實際應用中有多種實現架構,常見的有:
  1. 一主一從,即一個主服務器和一個從服務器;
  2. 一主多從,即一個主服務器和兩個或兩個以上的從服務器;
  3. 主主互備,又稱為雙主互備,即兩個MySQL服務器互相將對方作為自己的主服務器,同時作為對方的從服務器;
  4. 雙主多從,即雙主互備+多從。

四 相關原則

  • MySQL復制的各種部署中,必須遵守以下原則:
  • 同一時刻只能有一個主服務器進行寫操作;
  • 一個主服務器可以有多個從服務器;
  • 主服務器和從服務器都必須確保各自的服務器ID唯一;
  • 一個從服務器可以將其從主服務器獲得的更新消息傳遞給其他的從服務器。
參考互聯網:http://blog.csdn.net/hguisu/article/details/7325124/

001.MySQL高可用主從復制簡介