MySQL 主從複製(Master-Slave Replication)是一種資料複製技術,用於在多個資料庫伺服器之間的資料同步。在主從複製架構中,一個伺服器被設定為主伺服器(Master),充當資料來源,其他伺服器被設定為從伺服器(Slave),用來複制主伺服器的資料。
MySQL 的主從複製工作過程大致如下:
- 從庫生成兩個執行緒,一個 I/O 執行緒,一個 SQL 執行緒;
- I/O 執行緒去請求主庫的 binlog,並將得到的 binlog 日誌寫到 relay log(中繼日誌) 檔案中;
- 主庫會生成一個 log dump 執行緒,用來給從庫 I/O 執行緒傳 binlog;
- SQL 執行緒會讀取 relay log 檔案中的日誌,並解析成具體操作,來實現主從的操作一致,而最終資料一致;
為什麼要做主從複製
災備。
讀多寫少,讀寫分離。
主從部署方式
主從
主從從(級聯)
因為如果主節點有太多的從節點,就會損耗一部分效能用於 replication ,那麼我們可以讓 3~5 個從節點連線主節點,其它從節點作為二級或者三級與從節點連線,這樣不僅可以緩解主節點的壓力,並且對資料一致性沒有負面影響。
複製方式
非同步複製
非同步複製(Asynchronous replication),MySQL預設的複製是非同步的,主庫在執行完客戶端提交的事務後會立即將結果返給給客戶端,並不關心從庫是否已經接收並處理。原理最簡單,效能最好,但是主從之間資料不一致的機率很大。
全同步複製
全同步複製(Fully synchronous replication),指當主庫執行完一個事務,所有的從庫都執行了該事務才返回給客戶端。因為需要等待所有從庫執行完該事務才能返回,所以全同步複製的效能必然會收到嚴重的影響。
半同步複製
半同步複製(Semisynchronous replication),介於非同步複製和全同步複製之間,主庫在執行完客戶端提交的事務後不是立刻返回給客戶端,而是等待至少一個從庫接收到並寫到relay log中才返回給客戶端。相對於非同步複製,半同步複製犧牲了一定的效能,提高了資料的安全性。
複製延遲如何解決?
資料冗餘
非同步呼叫時,將評論稽核模組需要的資料全傳過去,減少評論稽核模組反查。
查主庫
考慮查詢量,量大了不行。
使用快取
當我在寫入資料庫的同時,我再寫入一份到快取中,查詢優先查快取。