MySQL(4):主從複製原理

一、主從複製概述sql

  MySQL主從複製也能夠稱爲MySQL主從同步,它是構建數據庫高可用集羣架構的基礎。它經過將一臺主機的數據複製到其餘一臺或多臺主機上,並從新應用relay log中的SQL語句來實現複製功能。MySQL支持單向、雙向、鏈式級聯、異步複製,5.5版本以後加入的半同步複製,5.6版本以後的GTID複製,MySQL5.7的多源複製、並行複製、loss-less複製。數據庫

 

1.1 常見的幾種主從架構安全

  1)單向主從模式:Master ——> Slave服務器

  2)雙向主從模式:Master <====> Mastersession

  3)級聯主從模式:Master ——> Slave1 ——> Slave2架構

  4)一主多從模式less

  5)多主一從模式異步

1.2 主從複製功能ui

  1)實時災備插件

  2)讀寫分離

  3)高可用

  4)從庫數據統計

  5)從庫數據備份

  6)平滑升級

1.3 主從複製原理

  主從同步過程當中主服務器有一個工做線程I/O dump thread,從服務器有兩個工做線程I/O thread和SQL thread。

  主庫把外界接收的SQL請求記錄到本身的binlog日誌中,從庫的I/O thread去請求主庫的binlog日誌,並將binlog日誌寫到中繼日誌中,而後從庫重作中繼日誌的SQL語句。主庫經過I/O dump thread給從庫I/O thread傳送binlog日誌。

  原理圖

  

 

二、複製原理

2.1 異步複製

  異步複製是MySQL默認的複製方式,主庫寫入binlog日誌後便可成功返回客戶端,無須等待binlog日誌傳遞給從庫的過程,可是一旦主庫宕機,就有可能出現丟失數據的狀況。

2.2 半同步複製

  MySQL默認的複製方式是異步複製,可是當主庫宕機,在高可用架構坐準備切換,就會形成新的主庫丟失數據的現象。

  MySQL5.5版本以後引入了半同步複製,可是主從服務器必須同時安裝半同步複製插件。在該功能下,確保從庫接收完成主庫傳遞過來的binlog內容已經寫入到本身的relay log後纔會通知主庫上面的等待線程。若是等待超時(超時參數:rpl_semi_sync_master_timeout),則關閉半同步複製,並自動轉換爲異步複製模式,直到至少有一臺從庫通知主庫已經接收到binlog信息爲止。

  半同步複製原理圖:

  

  半同步複製提高了主從之間數據的一致性,讓複製更加安全可靠,在5.7 版本中又增長了rpl_semi_sync_master_wait_point參數,用來控制半同步模式下主庫返回給session事務成功以前的事務提交方式。

  該參數有兩個值:

  1)AFTER_COMMIT:5.6版本的默認值,主庫將每一個事務寫入binlog,並傳遞給從庫,刷新到中繼日誌中,同時主庫提交事務。以後主庫開始等待從庫的反饋,只有收到從庫的回覆以後,master纔將commit OK的結果反饋給客戶端。

  2)AFTER_SYNC:5.7版本新增,也是默認的半同步複製方式。主庫將每一個事務寫入binlog並傳遞給從庫,刷新到中繼日誌中,主庫開始等待從庫的反饋,接收到從庫的回覆以後,再提交事務而且返回commit OK結果給客戶端。

  注意:能夠經過rpl_semi_sync_master_wait_for_slave_count參數來控制主庫接收多少個從庫寫事務成功反饋,才返回成功給客戶端。生產環境中使用半同步複製方式,當從庫出現故障,等待超時的時間又很長,致使主庫沒法接收從庫信息而沒法正常寫入時,可經過該參數剔除故障從庫。另外rpl_semi_sync_master_timeout單位是毫秒,它表示若是主庫等待從庫回覆消息的時間超過該值,就自動切換爲異步複製模式,建議調整爲很大,禁止向異步複製切換來保證數據複製的安全性。MySQL 5.7默認的半同步複製方式是after_sync模式。

  在AFTER_SYNC模式下,即便主庫宕機,全部在主庫上已經提交的事務都能保證已經同步到從庫的中繼日誌中,不會丟任何數據。

 

2.3 GTID複製

  GTID又叫全局事務ID,是一個以提交事務的編號,而且是一個全局惟一的編號。GTID是由server_uuid和事務id組成的,即GTID=server_uuid:transaction_id。

  server_uuid是數據庫啓動自動生成的,保存在auto.cnf文件下,transaction_id是事務提交時由系統順序分配的一個不會重複的序列行。

  GTID存在的價值:

  1)GTID使用master_auto_position=1代替了基於binlog和position號的主從複製方式,更便於主從複製的搭建。

  2)GTID能夠知道事務在最開始是哪一個實例上提交的。

  3)GTID方便實現主從之間的failover,無須找position和binlog。

  GTID限制條件:

  1)不能使用create table table_name select * from table_name。

  2)不支持CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE語句操做。

  3)不支持sql_slave_skip_counter。

相關文章
相關標籤/搜索