1、異步復制是Master將事件寫入binlog,自身並不知道slave是否接收是否處理,不能保證所有事務都被所有slave接收;
2、同步復制是Master提交事務,直到事務在所有slave都已提交,才會返回客戶端事務執行完畢信息。
這兩種復制方式各有優劣,在異步復制方式下,系統擁有較低的延遲和較高的吞吐量,但是如果Master出了故障,有些數據因為沒有被寫入Slave,有可能會丟失;在同步復制方式下,如果Master出故障,Slave上有全部的備份數據,容易恢復,但是同步復制會增大數據寫入延遲,降低系統吞吐量。
異步復制中,主庫將數據更新傳播給從庫后立即提交事務,而不論從庫是否成功讀取或重放數據變化。這種情況下,在主庫事務提交后的短時間內,主從庫數據並不一致。同步復制時,主庫的單個更新事務需要在所有從庫上同步更新。換句話說,當主庫提交事務時,集群中所有節點的數據保持一致。
相對於異步復制,同步復制的優點主要體現在以下幾方面:
- 數據一致:同步復制保證了整個集群的數據一致性,無論何時在任何節點執行相同的select查詢,結果都一樣。
- 高可用性:由於所有節點數據一致,單個節點崩潰不需要執行復雜耗時的故障切換,也不會造成丟失數據或停止服務。
- 性能改進:同步復制允許在集群中的所有節點上並行執行事務,從而提高讀寫性能。
異步復制
MySQL復制默認是異步復制,Master將事件寫入binlog,提交事務,自身並不知道slave是否接收是否處理;
缺點:不能保證所有事務都被所有slave接收。
同步復制
Master提交事務,直到事務在所有slave都已提交,才會返回客戶端事務執行完畢信息;
缺點:完成一個事務可能造成延遲。
半同步復制
當Master上開啟半同步復制功能時,至少有一個slave開啟其功能。當Master向slave提交事務,且事務已寫入relay-log中並刷新到磁盤上,slave才會告知Master已收到;若Master提交事務受到阻塞,出現等待超時,在一定時間內Master 沒被告知已收到,此時Master自動轉換為異步復制機制;
注:半同步復制功能要在Master和slave上開啟才會起作用,只開啟一邊,依然是異步復制。