程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 認識MySQL Replication

認識MySQL Replication

編輯:MYSQL入門知識

  MySQL Replication 是 MySQL 非常有特色的一個功能,他能夠將一個 MySQL Server 的 Instance 中的數據完整的復制到另外一個 MySQL Server 的 Instance 中。雖然復制過程並不是實時而是異步進行的,但是由於其高效的性能設計,延時非常之少。

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

  必須打開 Master 端的 Binary Log(mysqlbin.xxxxxx)功能,打開方式有兩種,分別是:

  1.通過在啟動 MySQL Server 的過程中使用“—log-bin” 參數選項;

  2.在 my.cnf 配置文件中的 mysqld 參數組([mysqld]標識後的參數部分)增加 “log-bin” 參數;

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 的復制可以是基於一條語句(Statement Level),也可以是基於一條記錄(Row level),可以在 MySQL 的配置參數中設定這個復制級別,不同復制級別的設置會影響到 Master 端的 Binary Log 記錄成不同的形式。

  1. Row Level:Binary Log 中會記錄成每一行數據被修改的形式,然後在 Slave 端 再對相同的數據進行修改。

  2. Statement Level:每一條會修改數據的 Query 都會記錄到 Master 的 Binary Log 中。Slave 在復制的時候 SQL 線程會解析成和原來 Master 端執行過的相同的 Query 來再次執行。

  3.Mixed Level,實際上就是前兩種模式的結合。在 Mixed 模式下,MySQL 會根據執行的每一條具體的 Query 語句來區分對待記錄的日志形式,也就是在 Statement 和 Row 之間選擇一種。

Replication 常用架構:

1.Master - Slaves

 

2. Master - Master

 

3.級聯復制

 

4. Dual Master 與級聯復制結合架構

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved