1. 複製類型的概述
異步模式:
MySQL主從複製默認是異步的模式,異步模式主master不管slave是否同步到數據,不需要接受從從節點返回的完成信息,這樣就會有一個問題,主如果crash掉了,此時主上已經提交的事務可能並沒有傳到從上,如果此時,強行將從提升爲主,可能導致新主上的數據不完整。這種模式雖然效率高,但是準確性差
全同步複製(銀行)
指當主庫執行完一個事務,所有的從庫都執行了該事務才返回給客戶端。因爲需要等待所有從庫執行完該事務才能返回,所以全同步複製的性能必然會收到嚴重的影響。
半同步模式:
半同步模式下master主節點只需要接收到其中一臺slave從節點的返回信息,就會進行下一步;如果超過等待時間從節點沒有返回信息,半同步模式就會自動切換成異步模式;這樣做的目的可以使主從數據庫的數據延遲縮小,可以提高數據安全性,確保了事務提交後,binlog至少傳輸到了一個從節點上
2.環境
基於上一個實驗,在基於GTID的主從複製做的
3.步驟
根據官網,可以發現需要安裝插件
在server1(master節點)上安裝半同步複製的插件
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;安裝半同步模塊
在server2(slave節點)上安裝半同步複製的插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;安裝半同步模塊
查看插件
在server1上激活插件
SET GLOBAL rpl_semi_sync_master_enabled = 1開啓半同步,也就是激活插件
在server2上激活插件
SET GLOBAL rpl_semi_sync_master_enabled = 1開啓半同步,也就是激活插件
從庫重啓io進程,激活插件之後必須要重啓io進程,否則不會生效,如果重啓不了的話就說明兩端的數據不同步
SET GLOBAL rpl_semi_sync_slave_enabled = 1開啓
STOP SLAVE IO_THREAD;關閉
START SLAVE IO_THREAD;開啓
show status like ‘%rpl%’;查看變量的狀態
SHOW VARIABLES LIKE ‘rpl_semi_sync%’;查看變量的值
停止slave上的io線程再測試
STOP SLAVE IO_THREAD;
在master上插入數據
mysql> use westos;
mysql> insert into usertb values (‘gao’,‘123’);
Query OK, 1 row affected (0.61sec) #等待10s才成功,因爲上面超時時間是10s,10s後如果沒有收到slave節點的返回,就會切換到異步複製
數據已經插入,但此時已經是異步複製了
插入新的數據
server1上可以看見
開啓io線程,數據同步過來
本來測試應該停掉slave的io線程,然後他等了10秒,這時候再去插入,就不會等了,以爲已經換爲了異步複製