mysql主從同步機制

zlingyi發表於2017-11-24
1、binlog+pos同步(預設為非同步)
從伺服器透過IO程式讀取主庫的binlog,寫入到relay_log中,
從伺服器透過sql running程式讀取從庫的relay_log,並寫入到從庫的bin_Log實現同步
我們生產一般使用row模式,因為有些函式在使用mix和state模式可能會報錯。

2、半同步(5.5開始)
半同步就是就是使用者向mysql寫入資料,先寫入到主庫,然後生成binlog日誌。主庫等待從庫來取binlog日誌,如果從庫超過10秒沒有來獲取binlog日誌。主庫自動轉換為非同步,以後使用者寫入資料生成binlog日誌,等待使用者自己來取,沒有取到主庫也不在管理。
介於非同步複製和全同步複製之間,主庫在執行完客戶端提交的事務後不是立刻返回給客戶端,而是等待至少一個從庫接收到並寫到relay log中才返回給客戶端。相對於非同步複製,半同步複製提高了資料的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步複製最好在低延時的網路中使用。
在沒有指明的情況下,預設都是非同步複製。

3、GTID同步(5.6.10開始)
使用UUID+事務ID作為全域性事物標識,UUID為每臺機器的識別符號,事務ID記錄最新的事務,不在使用binlog+pos開啟複製。而是使用master_auto_postion=1的方式自動匹配GTID斷點進行復制。

4、group replication(5.7.17開始)
基於傳統非同步複製和半同步複製的缺陷——資料的一致性問題無法保證,MySQL官方在5.7.17版本正式推出組複製,也就是MGR。
由若干個節點共同組成一個複製組,一個事務的提交,必須經過組內大多數節點(N / 2 + 1)決議並透過,才能得以提交。由3個節點組成一個複製組,Consensus層為一致性協議層,在事務提交過程中,發生組間通訊,由2個節點決議(certify)透過這個事務,事務才能夠最終得以提交併響應。




半同步的開啟方法和前提條件:
要想使用半同步複製,必須滿足以下幾個條件:
1. MySQL 5.5及以上版本
2. 變數have_dynamic_loading為YES
3. 非同步複製已經存在

1、首先載入外掛,主從分別安裝外掛
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2、檢視外掛是否安裝成功。
1、show plugins;
rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL 
2、mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec)
3、啟動半同步複製(也可以寫在配置檔案中)
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
4、重啟從上的IO執行緒
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
5、檢查半同步是否正確執行
mysql> show status like 'Rpl_semi_sync_master_status';
mysql> show status like 'Rpl_semi_sync_slave_status';
均顯示為ON則正常啟動。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28686045/viewspace-2147735/,如需轉載,請註明出處,否則將追究法律責任。

相關文章