標籤:
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 與級聯複製結合架構
認識MySQL Replication