MySQL 異步復制、半同步復制、增強半同步復制(史上最全)


文章很長,而且持續更新,建議收藏起來,慢慢讀!瘋狂創客圈總目錄 博客園版 為您奉上珍貴的學習資源 :

免費贈送 :《尼恩Java面試寶典》 持續更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備
免費贈送 經典圖書:《Java高並發核心編程(卷1)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高並發核心編程(卷2)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高並發核心編程(卷3)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:尼恩Java面試寶典 最新版 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 資源寶庫: Java 必備 百度網盤資源大合集 價值>10000元 加尼恩領取


MySQL 異步復制、半同步復制、增強半同步復制(史上最全)

背景:來自於小伙伴問題

小伙伴的難題:

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

在這里插入圖片描述

目前MySQL主要有三種復制方式

1)異步復制

2)半同步復制

3)增強半同步復制

推薦使用:對性能要求較高的推薦使用異步復制 ,如果運行的金融類業務推薦使用增強半同步復制,並使用ROW+GTID+5.7以上

說明:本文會以pdf格式持續更新,更多最新尼恩3高pdf筆記,請從下面的鏈接獲取:語雀 或者 碼雲

異步復制

MySQL復制的默認方式

說明:

如果對這個不好理解,這個就是rocketmq的 異步刷盤+異步復制

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

半同步復制

5bfef20d053a20f3221f93b190e17726.png

rpl_semi_sync_master_wait_point=after_commit

說明:

如果對這個不好理解,這個就是rocketmq的 同步刷盤+異步復制

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

半同步復制的優缺點

缺點1: 幻讀

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

缺點2:數據丟失

一個事務在waiting slave dump處crash后,主庫將比從庫多一條數據

疑問:此時如果主從復制恢復后,該數據時候可以正常同步到從服務器?(未測試!!)

說明:本文會以pdf格式持續更新,更多最新尼恩3高pdf筆記,請從下面的鏈接獲取:語雀 或者 碼雲

增強半同步復制

7834e199a9c2f014f7cb743da0b43fec.png

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%';

說明:本文會以pdf格式持續更新,更多最新尼恩3高pdf筆記,請從下面的鏈接獲取:語雀 或者 碼雲

參考文獻

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM