MySQL主從復制最全詳解
MySQL主從復制
MySQL主從復制是一種數據庫復制技術,在主從復制中,一個數據庫服務器(主節點,Master)充當主服務器,而其他一個或多個數據庫服務器(從節點,Slave)充當從服務器。
如下圖所示:
圖片
主節點上的數據庫更改,會被同步到從服務器上,從而保持從節點與主節點數據的一致性。
MySQL主從復制模式
MySQL主從復制模式主要會包含:異步復制、半同步、以及全同步復制三種復制模式。
圖片
1.異步復制
MySQL默認的復制是異步的,也就是主節點執行寫操作后,不等待從節點確認,直接返回給客戶端。
這種模式下,主節點與從節點之間的數據同步是異步進行的,主節點執行寫操作后即刻返回給客戶端,而從節點在后續時間里異步地復制主節點上的變更。
注意:由于從節點的復制過程是異步的,可能導致從節點上的數據相對于主節點存在一定的延遲。
這意味著在某個時間點從節點上的數據可能不是最新的,這一點需要注意,很重要。
2.半同步復制
半同步復制,就是主節點執行寫操作后,等待至少一個從節點確認收到數據后再返回給客戶端,這就是半同步復制。
如下圖所示:
圖片
在半同步復制中,主節點(Master)上的寫操作在返回給客戶端之前,需要等待至少一個從節點(Slave)確認接收到了這些寫操作。
相對于全同步復制,半同步復制在主節點的性能上有所提高,因為主節點無需等待所有從節點的確認。
但是,相對于異步復制,半同步復制提高了數據的安全性。
所以,各自都有優缺點,需要根據自己的實際情況來定,究竟哪個適合半同步,還是異步等。
3.全同步復制
全同步復制,很容易理解了,就是子節點全部同步完后,才返回給主服務器。
所以,全同步復制提供了最高級別的數據一致性,確保主節點和所有從節點上的數據保持完全一致。
當然,相較于異步復制和半同步復制,全同步復制對主節點的性能影響更為顯著。
因為原因很簡單,主節點必須等待所有從節點的確認,才返回。
總之,全同步復制提供了最高級別的數據一致性,適用于對數據一致性要求極高的場景,但不適合性能要求極高的場景。
所以,上面的3種方案,需要權衡這種一致性與性能之間的犧牲,來最終選擇。
MySQL主從復制原理
MySQL主從復制的實現原理基于:主節點的二進制日志(Binary Log)和從節點的復制線程。
如下圖所示:
圖片
首先,在主節點上,開啟二進制日志記錄功能。
[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
然后,主節點上的寫操作(INSERT、UPDATE、DELETE等),將會被記錄到這個二進制日志文件中。
最后,從節點開始連接到主節點,獲取主節點的二進制日志文件,并通過復制線程將這些日志應用到從節點的數據庫中。
MySQL主從復制中的關鍵組成部分,這里會涉及到三個線程:I/O 線程、Log Dump 線程、SQL 線程。
1.I/O 線程(I/O Thread)
該線程負責連接到主節點(Master),獲取二進制日志(binlog),并將這些日志寫入從節點的中繼日志。
2.Log Dump 線程
Master 節點上,有一個 log dump 線程,是用來發送日志文件( binlog) 給 slave 的。
3.SQL 線程
該線程負責讀取中繼日志(Relay Log),解析其中的二進制日志,并在從節點上執行相應的SQL語句。
這三個線程協同工作,使得從節點能夠與主節點保持同步,實現主從復制。
通過這些步驟,MySQL主從復制實現了數據的同步。
主節點記錄變更,從節點連接主節點并獲取變更,然后在從節點上應用這些變更,最終實現了數據的一致性。