MYSQL之半同步複製
阿新 • • 發佈:2020-07-26
1.半同步複製的作用
解決主從資料一致性問題
2.半同步複製工作原理的變化
1. 主庫執行新的事務,commit時,更新 show master status\G ,觸發一個訊號給 2. binlog dump 接收到主庫的 show master status\G資訊,通知從庫日誌更新了 3. 從庫IO執行緒請求新的二進位制日誌事件 4. 主庫會通過dump執行緒傳送新的日誌事件,給從庫IO執行緒 5. 從庫IO執行緒接收到binlog日誌,當日志寫入到磁碟上的relaylog檔案時,給主庫ACK_receiver執行緒 6. ACK_receiver執行緒觸發一個事件,告訴主庫commit可以成功了 7. 如果ACK達到了我們預設值的超時時間,半同步複製會切換為原始的非同步複製. 5.5版本:出現概念,但是不建議使用,效能太差 5.6版本:出現group commit 組提交功能,來提升開啟半同步複製的效能 5.7版本:更加完善了,在group commit基礎上出現了MGR 5.7版本:的增強半同步複製的新特性:after commit; after sync;
3.配置半同步
1.主庫操作
#登入資料庫 [root@db01 ~]# mysql -uroot -p123 #檢視是否有動態支援 mysql> show global variables like 'have_dynamic_loading'; #安裝自帶外掛 mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so'; #啟動外掛 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; #設定超時 mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; #修改配置檔案 [root@db01 ~]# vim /etc/my.cnf #在[mysqld]標籤下新增如下內容(不用重啟庫) [mysqld] rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 檢查安裝: mysql> show variables like'rpl%'; mysql> show global status like 'rpl_semi%';
2.從庫操作
#登入資料庫 [root@mysql-db02 ~]# mysql -uroot -poldboy123 #安裝slave半同步外掛 mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so'; #啟動外掛 mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1; #重啟io執行緒使其生效 mysql> stop slave io_thread; mysql> start slave io_thread; #編輯配置檔案(不需要重啟資料庫) [root@mysql-db02 ~]# vim /etc/my.cnf #在[mysqld]標籤下新增如下內容 [mysqld] rpl_semi_sync_slave_enabled =1
3.額外引數
rpl_semi_sync_master_timeout=milliseconds
設定此引數值(ms),為了防止半同步複製在沒有收到確認的情況下發生堵塞,如果Master在超時之前沒有收到任何確認,將恢復到正常的非同步複製,並繼續執行沒有半同步的複製操作。
rpl_semi_sync_master_wait_no_slave={ON|OFF}
如果一個事務被提交,但Master沒有任何Slave的連線,這時不可能將事務傳送到其它地方保護起來。預設情況下,Master會在時間限制範圍內繼續等待Slave的連線,並確認該事務已經被正確的寫到磁碟上。
可以使用此引數選項關閉這種行為,在這種情況下,如果沒有Slave連線,Master就會恢復到非同步複製。