mysql(4)mysql基於GTID的半同步複製

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秒,這時候再去插入,就不會等了,以爲已經換爲了異步複製

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章