1. 程式人生 > 其它 >MySQL 非同步複製、半同步複製、增強半同步複製(史上最全)

MySQL 非同步複製、半同步複製、增強半同步複製(史上最全)

MySQL 非同步複製、半同步複製、增強半同步複製(史上最全)

背景:來自於小夥伴問題

小夥伴的難題:

mysql主從同步的時候,半同步和增強半同步是怎樣的一個概念,我看網上說的有點不明不白的,也沒找到合適的解釋

目前MySQL主要有三種複製方式

1)非同步複製

2)半同步複製

3)增強半同步複製

推薦使用:對效能要求較高的推薦使用非同步複製 ,如果執行的金融類業務推薦使用增強半同步複製,並使用ROW+GTID+5.7以上

非同步複製

MySQL複製的預設方式

說明:

如果對這個不好理解,這個就是rocketmq的 非同步刷盤+非同步複製

具體請參見尼恩的rocketmq 高可用視訊,第17章視訊

半同步複製

rpl_semi_sync_master_wait_point=after_commit

說明:

如果對這個不好理解,這個就是rocketmq的 同步刷盤+非同步複製

具體請參見尼恩的rocketmq 高可用視訊,第17章視訊

半同步複製的優缺點

缺點1: 幻讀

當用戶發起一個事務,該事務已經寫入redo日誌和binlog日誌,但該事務還沒寫入從庫,此時處在waiting slave dump處,此時另一個使用者可以讀取到這條資料,而他自己卻不能;

缺點2:資料丟失

一個事務在waiting slave dump處crash後,主庫將比從庫多一條資料

疑問:此時如果主從複製恢復後,該資料時候可以正常同步到從伺服器?(未測試!!)

增強半同步複製

rpl_semi_rsync_master_wait_point=after_sync

改善1:解決幻讀

當用戶發起一個事務,該事務寫入二進位制後,便向從庫進行同步,此時其他使用者無法讀取到該資料,解決了幻讀

改善2:解決資料丟失

一個事務在waiting slave dump處crash掉後,可以通過觀察從庫上是否存在主庫的last gtid值,如果存在,這條資料正常恢復,如果不存在則刪除主庫的那條多餘的GTID值,然後恢復,保證了資料的完整性;

說明:

如果對這個不好理解,這個就是rocketmq的 同步刷盤+同步複製

具體請參見尼恩的rocketmq 高可用視訊,第17章視訊

部署測試

非同步複製環境:一主一從

主IP:192.168.20.206

從IP:192.168.20.212

需要3個步驟:

1.給主庫載入半同步複製外掛,並件修改主庫的my.cnf引數,;

2.給從庫載入半同步複製插,並件修改從庫的my.cnf引數,;

3.在從庫中執行使用stop salve io_thread 、start slave io_thread命令搞定

1.1)主庫載入半同步複製外掛

install plugin rpl_semi_sync_master soname 'semisync_master.so';

1.2)主庫開啟半同步複製模式

set global rpl_semi_sync_master_enabled=1;

set global rpl_semi_sync_master_timeout=1000;

2.3)主庫修改my.cnf檔案

vim /etc/my.cnf

[mysqld]

###:for replcation

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

2.1)從庫載入半同步複製外掛

install plugin rpl_semi_sync_SLAVE soname 'semisync_slave.so';

2.2)從庫開啟半同步複製模式

set global rpl_semi_sync_slave_enabled=1;

2.3)從庫修改my.cnf檔案

vim /etc/my.cnf

[mysqld]

###:for replcation

rpl_semi_sync_slave_enabled=1

3.3)在從庫中執行使用stop salve io_thread 、start slave io_thread;

stop slave io_thread;

start slave io_thread;

半同步複製監控命令:

show plugins;

show global status like '%semi%';

show global variables like '%semi%';

參考文獻

https://blog.csdn.net/weixin_35555531/article/details/113948452