MySQL主從複製——半同步複製方式

如需轉載請註明出處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

相關文章
相關標籤/搜索