MySQL主從複製(異步複製與半同步複製)

1.MySQl主從複製

  • 原理:將主服務器的binlog日誌複製到從服務器上執行一遍,達到主從數據的一致狀態。python

  • 過程:從庫開啓一個I/O線程,向主庫請求Binlog日誌。主節點開啓一個binlog dump線程,檢查本身的二進制日誌,併發送給從節點;從庫將接收到的數據保存到中繼日誌(Relay log)中,另外開啓一個SQL線程,把Relay中的操做在自身機器上執行一遍數據庫

  • 優勢安全

    • 做爲備用數據庫,而且不影響業務
    • 可作讀寫分離,通常是一個寫庫,一個或多個讀庫,分佈在不一樣的服務器上,充分發揮服務器和數據庫的性能,但要保證數據的一致性

2.主從複製的日誌格式

這裏的日誌格式就是指二進制日誌的三種格式:基於語句statement的複製、基於行row的複製、基於語句和行(mix)的複製。其中基於row的複製方式更能保證主從庫數據的一致性,但日誌量較大,在設置時考慮磁盤的空間問題服務器

show variables like ‘%binlog%format%’;    #查看當前使用的binlog的格式
set binlog_format = ‘row’;                #設置格式,這種方法只在當前session生效
set global binlog_format = ‘row’;       #在全局下設置binlog格式,會影響全部的Session

3.複製架構

3.一、一主多從架構

在主庫的請求壓力很是大時,可經過配置一主多從複製架構實現讀寫分離,把大量對實時性要求不是很高的請求經過負載均衡分發到多個從庫上去讀取數據,下降主庫的讀取壓力。並且在主庫出現宕機時,可將一個從庫切換爲主庫繼續提供服務網絡

3.二、多級複製架構

由於每一個從庫在主庫上都會有一個獨立的Binlog Dump線程來推送binlog日誌,因此隨着從庫數量的增長,主庫的IO壓力和網絡壓力也會隨之增長,這時,多級複製架構應運而生。session

多級複製架構只是在一主多從的基礎上,再主庫和各個從庫之間增長了一個二級主庫Master2,這個二級主庫僅僅用來將一級主庫推送給它的BInlog日誌再推送給各個從庫,以此來減輕一級主庫的推送壓力。架構

但它的缺點就是Binlog日誌要通過兩次複製才能到達從庫,增長了複製的延時。併發

咱們能夠經過在二級從庫上應用Blackhol存儲引擎(黑洞引擎)來解決這一問題,下降多級複製的延時。負載均衡

「黑洞引擎」就是寫入Blackhole表中數據並不會寫到磁盤上,因此這個Blackhole表永遠是個空表,對數據的插入/更新/刪除操做僅在Binlog中記錄,並複製到從庫中去。異步

3.三、雙主複製/Dual Master架構

雙主複製架構適用於須要進行主從切換的場景

在只有一個主庫的架構下,當主庫宕機後,將其中一個從庫切換爲主庫繼續提供服務。原來的主庫就沒有數據來源了,那麼當這個新的主庫接收到新的數據時,原來的主庫卻沒有同步,所以他們的數據差別愈來愈大,那麼原來的主庫就沒法成爲主從複製環境中的一員了。當原來的主庫恢復正常後,須要從新將其添加進複製環境中去。

那爲了不重複添加主庫的問題,雙主複製應運而生。兩個數據庫互爲主從,當主庫宕機恢復後,因爲它仍是原來從庫(如今主庫)的從機,因此它仍是會複製新的主庫上的數據。那麼不管主庫的角色怎麼切換,原來的主庫都不會脫離複製環境。

4.複製方式

MySQL的主從複製有兩種複製方式,分別是異步複製和半同步複製

4.1異步複製

一、邏輯上

MySQL默認的複製便是異步的,主庫在執行完客戶端提交的事務後會當即將結果返給給客戶端,並不關心從庫是否已經接收並處理,這樣就會有一個問題,主若是crash掉了,此時主上已經提交的事務可能並無傳到從庫上,若是此時,強行將從提高爲主,可能致使新主上的數據不完整。

二、技術上

主庫將事務 Binlog 事件寫入到 Binlog 文件中,此時主庫只會通知一下 Dump 線程發送這些新的 Binlog,而後主庫就會繼續處理提交操做,而此時不會保證這些 Binlog 傳到任何一個從庫節點上。

4.2全同步複製

一、邏輯上

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

二、技術上

當主庫提交事務以後,全部的從庫節點必須收到、APPLY而且提交這些事務,而後主庫線程才能繼續作後續操做。但缺點是,主庫完成一個事務的時間會被拉長,性能下降。

4.3半同步複製

一、邏輯上

是介於全同步複製與全異步複製之間的一種,主庫只須要等待至少一個從庫節點收到而且 Flush Binlog 到 Relay Log 文件便可,主庫不須要等待全部從庫給主庫反饋。同時,這裏只是一個收到的反饋,而不是已經徹底完成而且提交的反饋,如此,節省了不少時間。

二、技術上

介於異步複製和全同步複製之間,主庫在執行完客戶端提交的事務後不是馬上返回給客戶端,而是等待至少一個從庫接收到並寫到relay log中才返回給客戶端。相對於異步複製,半同步複製提升了數據的安全性,同時它也形成了必定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。因此,半同步複製最好在低延時的網絡中使用。

相關文章
相關標籤/搜索