Mysql-複製概述(一)

1.複製的概述

Mysql支持兩種複製方式,基於行的複製和基於語句的複製。 這兩種方式都是經過在主庫上記錄二進制日誌、在備庫重放日誌的方式來實現異步的數據複製。sql

在同一時間點備庫上的數據可能與主庫存在不一致,而且沒法保證主備之間的延遲。服務器

複製一般不會增長主庫的開銷,主要是啓用二進制日誌帶來的開銷,可是出於備份或及時從崩潰中回覆的目的,這點開銷是必要的。架構

經過複製能夠將讀操做指向備庫來得到更好讀讀擴展。寫操做通常都是在主庫上寫。在一主庫多備庫讀架構中,寫操做會被執行屢次,這時候整個系統讀性能取決於寫入最慢讀那部分。併發

常見讀複製方案:負載均衡

  • 主 -備 -備:一個備庫從主庫copy數據,其他讀備庫從備庫中copy數據。
  • 主- 備 :全部讀備庫從主庫中copy數據。

2.複製解決讀問題

  • 數據分佈:將數據分佈在不一樣讀數據中心中。
  • 負載均衡:經過Mysql複製能夠將讀操做分佈到多個服務器上,實現對密集型應用對優化,而且實現很方便,經過簡單對代碼修改就能實現基本對負載均衡。
  • 備份:複製是備份對補充,但複製不是備份也不能取消備份。
  • 高可用性和故障切換:避免單點失敗,設計良好但故障切換
  • MySql 升級測試:保證讀寫的按預期實現。

3.複製如何工做

  • 3.1 在主庫上把數據更改記錄到二進制日誌(Binary Log)中。
  • 3.2 備庫將主庫的日誌複製到本身的中繼日誌(Relay Log)中。
  • 3.3 備庫讀取中繼日誌的事件,將其重放到備庫數據之上。

這種複製架構實現了獲取事件和重放事件的解耦,容許這兩個過程異步進行。可是也限制了複製過程,最重要的就是主庫上併發運行的查詢在備庫上只能串行化執行。由於只有一個SQL線程來重放中繼日誌中的事件。異步

相關文章
相關標籤/搜索