主從復制面臨的問題
MySQL一直以來的主從復制都是被詬病,原因是:
1、主從復制效率低
早期mysql的復制是通過將binlog語句異步推送到從庫。從庫啟動一個IO線程將接收到的數據記錄到relaylog中;另外啟動一個SQL線程負責順序執行relaylog中的語句實現對數據的拷貝。
這里的順序執行就導致了主從復制效率低,異步的方式導致了主從數據的不一致。
2、宕機后主從復制數據不一致
剛剛提到異步的方式導致了主從數據的不一致。
當主節點宕機后,從節點晉升成主節點,如果這時有數據還未完成主從同步,那么就會導數據丟失。
一、5.5版本,主要解決數據一致性問題
添加了一個**semi-sync replication(半同步復制)**的插件,這個插件就是為了解決異步復制導致的數據不一致問題。
原理是在事物提交時,要求至少一個從節點返回ack
證明自己拿到了數據,并將數據寫到了relay log中
。
這樣能保證至少一個從節點和主節點數據是完全一致的。
優點:
- 保證主從數據一致性:在一主一從的情況下,不會有數據不一致性。
- 保證數據可靠性:只有主節點掛掉的情況下,也不會發生數據丟失問題。