1. 程式人生 > >MySQL的半同步複製和延時複製

MySQL的半同步複製和延時複製

半同步複製

一、半同步複製的原理

1、當Slave主機連線到Master時,能夠檢視其是否處於半同步複製的機制。
2、當Master上開啟半同步複製的功能時,至少應該有一個Slave開啟其功能。此時,一個執行緒在Master上提交事務將受到阻塞,直到得知一個已開啟半同步複製功能的Slave已收到此事務的所有事件,或等待超時。
3、當一個事務的事件都已寫入其relay-log中且已重新整理到磁碟上,Slave才會告知已收到。
4、如果等待超時,也就是Master沒被告知已收到,此時Master會自動轉換為非同步複製的機制。當至少一個半同步的Slave趕上了,Master與其Slave自動轉換為半同步複製的機制。
5、半同步複製的功能要在Master,Slave都開啟,半同步複製才會起作用;否則,只開啟一邊,它依然為非同步複製。


二、同步,非同步,半同步複製的對比

同步複製:Master提交事務,直到事務在所有的Slave都已提交,此時才會返回客戶端,事務執行完畢。缺點:完成一個事務可能會有很大的延遲。
非同步複製:當Slave準備好才會向Master請求binlog。缺點:不能保證一些事件都能夠被所有的Slave所接收。
半同步複製:半同步複製工作的機制處於同步和非同步之間,Master的事務提交阻塞,只要一個Slave已收到該事務的事件且已記錄。它不會等待所有的Slave都告知已收到,且它只是接收,並不用等其完全執行且提交。


三、安裝
1、在MySQL上安裝外掛需要資料庫支援動態載入。檢查是否支援命令如下:

mysql> show global variables like 'have_dynamic_loading';


2、Plugin目錄

mysql> show global variables like 'plugin_dir';


3、在Master上執行

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 = N;

這裡寫圖片描述

4、在各個 Slave 上執行

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> stop slave io_thread;
mysql> start slave io_thread;


5、檢查Plugin是否已正確安裝

mysql> show plugins;
或者
mysql> select * from information_schema.plugins


備註:

rpl_semi_sync_master_enabled 控制Master是否開啟半同步,開啟或不開啟,將其設定為ONOFF(1 or 0)。
rpl_semi_sync_master_timeout 控制Master等待多長時間被告知Slave已收到,也就是所謂的超時時間,單位是毫秒。
rpl_semi_sync_slave_enabled  控制Slave是否開啟半同步,開啟或不開啟,將其設定為ONOFF(1 or 0)。


6、將變數寫入配置檔案:

Master上

[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000  # 1s


Slave上

[mysqld]
rpl_semi_sync_slave_enabled = 1

延時複製

1、應用場景
①誤刪除恢復②延遲測試③歷史查詢

2、在 Slave 上執行:

mysql> stop slave;
mysql> change master to master_delay = N;
mysql> start slave;

備註:N 的單位是秒