如需轉載請註明出處https://my.oschina.net/feistel/blog/2995878mysql
目的:對於異步方式當主庫提交完事務時發生宕機,沒有將數據發送給從庫,致使數據不匹配的問題。
半同步方式流程:從庫接收到binlog後寫入本身的relay log中再通知主庫,此時主庫才提交事務並返回給客戶端。sql
我醜 話說在前頭:shell
192.168.1.116 主masterA Windows MySQL8.0
192.168.1.200 備庫B,VMUbuntu18 MySQL8.0windows
shell表明Ubuntu終端
cmd表明Windows終端異步
----------------------------------------------------------------------------------------------------------------spa
1.net
先無壓力操做:MySQL主從複製——異步方式插件
----------------------------------------------------------------------------------------------------------------線程
2blog
安裝插件:
動態連接庫的區別:
windows插件後綴名用dll;
Ubuntu的用so
A mysql>
install plugin rpl_semi_sync_master soname 'semisync_master.dll';
set global rpl_semi_sync_master_enabled=on;
#能夠寫入配置文件my.ini(windows)
#rpl_semi_sync_master_enabled=on
show variables like '%semi%';
show plugins;
B mysql>
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled=on;
#能夠寫入配置文件mysqld.cnf(Ubuntu)
#rpl_semi_sync_master_enabled=on
show variables like '%semi%';
show plugins;
----------------------------------------------------------------------------------------------------------------
3
重啓從庫B的IO線程
B mysql>
stop slave io_thread;
start slave io_thread;
A mysql>
show global status like '%semi%';
看到
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |1個鏈接
| Rpl_semi_sync_master_status | ON |開啓半同步狀態
| Rpl_semi_sync_master_yes_tx | 1 |表示接收到事務回覆的次數
+--------------------------------------------+-------+
表示成功
----------------------------------------------------------------------------------------------------------------
4
半同步 轉 異步:
B mysql>stop slave io_thread;
關閉從庫後,主庫超時rpl_semi_sync_master_timeout,自動轉爲異步方式。
A mysql>show variables like 'rpl_semi_sync_master_timeout';
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| rpl_semi_sync_master_timeout | 10000 |
+------------------------------+-------+
默認爲10s。
須要保證主從一致,能夠把該參數設置得很大:
A mysql>set global rpl_semi_sync_master_timeout=100000;
設置爲100s。也能夠寫入配置文件持久修改。
異步 轉 半同步:
B mysql>
start slave io_thread;
----------------------------------------------------------------------------------------------------------------
至此,共勉,如需轉載請註明出處https://my.oschina.net/feistel/blog/2995878