企業——MYSQL異步複製、半同步複製、全同步複製

MYSQL的複製的方式

 

一 、異步、同步和半同步複製概念

  異步複製(Asynchronous replication),MySQL默認的複製是異步的,主庫在執行完客戶端提交的事務後會當即將結果返給給客戶端,並不關心從庫是否已經接收並處理。原理最簡單,性能最好,可是主從之間數據不一致的機率很大。安全

  全同步複製(Fully synchronous replication),指當主庫執行完一個事務,全部的從庫都執行了該事務才返回給客戶端。由於須要等待全部從庫執行完該事務才能返回,因此全同步複製的性能必然會收到嚴重的影響。異步

  半同步複製(Semisynchronous replication),介於異步複製和全同步複製之間,主庫在執行完客戶端提交的事務後不是馬上返回給客戶端,而是等待至少一個從庫接收到並寫到relay log中才返回給客戶端。相對於異步複製,半同步複製犧牲了必定的性能,提升了數據的安全性。性能

 

2、半同步複製原理

  默認狀況下,MySQL的主從複製是異步的,異步複製能夠提供最佳的性能, 主庫把binlog日誌發送給從庫,而後將結果返回給客戶端,並不會驗證從庫是否接收完畢。這也就意味着有可能出現當主庫或從庫發生故障的時候,從庫沒有接收到主庫發送過來的binlog日誌,致使主庫和從庫的數據不一致,甚至在恢復時形成數據的丟失。spa

  爲了解決上述出現的問題,MySQL 5.5 引入了一種半同步複製模式。該模式能夠確保從庫接收完主庫發送的binlog日誌文件並寫入到本身的中繼日誌relay log裏,而後會給主庫一個反饋,告訴主庫已經接收完畢,這時主庫才返回結果給客戶端告知操做完成。當出現從庫響應超時狀況時,主庫會暫時切換到異步複製模式,直到下一次同步沒有超時轉爲半同步複製爲止。(master的dump線程除了發送binlog數據到slave,還承擔了接收slave的ack工做。若是出現異常,沒有收到ack,那麼將自動降爲普通的異步複製,直到異常修復)線程

相關文章
相關標籤/搜索