在mysql中,主從復制的原理如下圖:

1. 主數據庫將數據變更的sql 通過順序IO寫入Bin log 中。
2. Slave從庫通過IO thread 將bin log 順序IO讀取到從機器中。
3. Slave 將讀取過來的bin log 日志順序IO寫入到從服務器的磁盤上,這個文件叫中繼日志。
4. Slave通過SQL thread 將中繼日志按照隨機IO執行到數據庫中。
5. 在IO讀寫中,順序讀寫的時間遠快于隨機IO。
6. 所以在整個過程中,主庫同步到從庫的時候 在第四步的時候容易出現延時的問題。
主從復制延時引起的因素:
1. 從數據庫的機器配置及讀寫速度的影響。
2. 主數據庫的bin log 遠大于讀寫進程的量。
解決延時問題的方法:
MTS :multi-threaded slave
實現原理:采用多線程執行中繼日志。
協調器(coordinator):將中繼日志分發到不同的線程上執行,這個線程叫worker。
兩個原則:1. 同一事務分配到同一worker 2. 涉及到同一行數據的sql 分配到同一worker。
分配原則:按照庫分配,按照庫和表分配,按照庫,表,行數據分配。
組提交(group commit):整體提交
GTID(group transaction ID): 保證統一的事務提交
crash-safe: 只有保證redo日志和bin log日志一致的時候才提交,否則丟棄。

浙公網安備 33010602011771號