MySQL主從半同步複製
阿新 • • 發佈:2020-07-25
目錄
一、半同步複製
1.半同步複製概念
從MYSQL5.5開始,支援半自動複製。之前版本的MySQL Replication都是非同步(asynchronous)的,主庫在執行完一些事務後, 是不會管備庫的進度的。如果備庫不幸落後,而更不幸的是主庫此時又出現Crash(例如宕機),這時備庫中的資料就是不完整的。 簡而言之,在主庫發生故障的時候,我們無法使用備庫來繼續提供資料一致的服務了。 半同步複製(Semi synchronous Replication)則一定程度上保證提交的事務已經傳給了至少一個備庫。 出發點是保證主從資料一致性問題,安全的考慮。 5.5 出現概念,但是不建議使用,效能太差 5.6 出現group commit 組提交功能,來提升開啟半同步複製的效能 5.7 更加完善了,在group commit基礎上出現了MGR 5.7 的增強半同步複製的新特性:after commit; after sync; #缺點: 1.效能差,影響主庫效率 2.半同步複製,有一個超時時間,超過這個時間恢復主從複製 # 半同步複製原理: 主要為了保證主庫的binlog事務被可靠寫入到從庫中,主庫在每次事務成功提交時,並不及時反饋給前端應用使用者, 而是等待其中的一個從庫也接收到Binlog事務併成功寫入中繼日誌後,由從庫的binlog返回一個ack給主庫,主庫才返回commit操作成功給客戶端, 半同步複製保證了事務成功提交後,至少有兩份日誌記錄,一份在主庫的Binlog日誌上,另一份在至少一個從庫的中繼日誌Relay log上,從而更近一步保證了資料的完整性。 # 半同步複製和全同步的區別: 和mysql全同步複製的區別為,全同步複製需要保證每一個binlog事務都寫入到從庫中,而半同步複製只需要保證所有的從庫中有一個binlog事務寫入到從庫中即可。
2.配置半同步
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就會恢復到非同步複製。