1. 程式人生 > >Mysql-複製概述(一)

Mysql-複製概述(一)

1.複製的概述

Mysql支援兩種複製方式,基於行的複製和基於語句的複製。 這兩種方式都是通過在主庫上記錄二進位制日誌、在備庫重放日誌的方式來實現非同步的資料複製。

在同一時間點備庫上的資料可能與主庫存在不一致,並且無法保證主備之間的延遲。

複製通常不會增加主庫的開銷,主要是啟用二進位制日誌帶來的開銷,但是出於備份或及時從崩潰中回覆的目的,這點開銷是必要的。

通過複製可以將讀操作指向備庫來獲得更好讀讀擴充套件。寫操作一般都是在主庫上寫。在一主庫多備庫讀架構中,寫操作會被執行多次,這時候整個系統讀效能取決於寫入最慢讀那部分。

常見讀複製方案:

  • 主 -備 -備:一個備庫從主庫copy資料,其餘讀備庫從備庫中copy資料。
  • 主- 備 :所有讀備庫從主庫中copy資料。

2.複製解決讀問題

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

3.複製如何工作

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

這種複製架構實現了獲取事件和重放事件的解耦,允許這兩個過程非同步進行。但是也限制了複製過程,最重要的就是主庫上併發執行的查詢在備庫上只能序列化執行。因為只有一個SQL執行緒來重放中繼