mysql 主從同步三種模式:異步復制、半同步復制、全同步復制
異步復制
異步復制是mysql 默認的同步方式。
在master為slave開通賬號密碼、ip授權之后,slave 可以從master進行數據同步,主要依賴的是master的binlog日志。
slave會啟動兩個線程,IO Thread 和 SQL Thread。IO Thread 負責從master拉取binlog 日志,並寫入relay中繼日志。SQL Thread 負責將relay中繼日志中的變更進行重放,更新數據來達到跟master保持數據一致的目的。這個過程中,slave通過IO線程拉取binlog,master無需關注是否有slave需要同步,只做自己的事情,整個復制過程都是異步完成的,這個就是異步復制。
異步復制的優勢是性能好,缺點是數據的安全性比較差。在某一刻主從之間的數據差異可能較大,主機掛掉之后從機接管,可能會丟失一部分數據。
半同步復制
master更新操作寫入binlog之后會主動通知slave,slave接收到之后寫入relay log 即可應答,master只要收到至少一個ack應答,則會提交事務。
可以發現,相比較於異步復制,半同步復制需要依賴至少一個slave將binlog寫入relay log,在性能上有所降低,但是可以保證至少有一個從庫跟master的數據是一致的,數據的安全性提高。
對於數據一致性要求高的場景,可以采用半同步復制的同步策略,比如主庫掛掉時,准備接管的那一個從庫,對數據的一致性要求很比較高。
半同步復制的優點是數據的安全性好,缺點是性能比異步復制稍低。
全同步復制
全同步復制跟半同步復制的區別是,全同步復制必須收到所有從庫的ack,才會提交事務。
主庫的事務提交依賴於后面所有的從庫,這樣一來性能就會明顯得下降。除非是對所有從庫數據一致性要求非常高的場景,否則我們一般不采用這種策略。
全同步復制的數據一致性最好,但是性能也是最差的。