標籤:半同步複製
1>半同步複製的出現:
預設情況下,複製是非同步,就是用戶端提交事務給主庫,主庫將事務寫入到儲存引擎和binlog中後會立即返回給用戶端告訴其事務執行成功。如果此時該事務還未來得及複製到從庫上,如果主庫在此時發生崩潰或者伺服器宕機,會導致主從切換,此時用戶端訪問新選舉的主庫時,就會看不到剛提交的資料。
2>半同步複製的原理:
mysql5.5開始通過外掛程式的方式支援半同步複製,主庫執行完用戶端提交的事務後不會立即返回給用戶端,而是等待至少一個從庫接收到該事務後才返回給用戶端。
半同步複製是全同步和非同步同步的一個折中方案。與非同步複製相比,半同步複製提高資料的安全性---可以保證至少兩個地方存在該事務,同時也增加了一定的延遲(至少是一個tcp/ip往返的時間),最好在低延遲的網路中使用,比如區域網路。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/73/1A/wKiom1X04pWSFXQaAAEPJfLLJ6A295.jpg" title="1.png" alt="wKiom1X04pWSFXQaAAEPJfLLJ6A295.jpg" />
3>半同步複製的安裝配置
須滿足以下條件:
MySQL5.5或者以上版本
has_dynamic_loading系統變數設定為YES
複製已經配置並且在運行。
半同步複製是以外掛程式形式實現的。所以講semisync_master*檔案複製到主庫的plugins檔案夾中,講semisync_slave*檔案複製到所有從庫的plugins檔案夾中。
接下來分別在主庫和從庫上執行INSTALL PLUGIN命令載入外掛程式。
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME "semisync_master.so";
從庫上執行
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME "semisync_slave.so";
查看外掛程式的安裝情況:
mysql>SHOW PLUGINS;
主從都開啟半同步外掛程式:
主庫上開啟半同步外掛程式:
mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql>SET GLOBAL rpl_semi_sync_master_timeout = N;//單位是毫秒
在從庫上開啟半同步外掛程式:
mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;
rpl_semi_sync_master_timeout表示主庫等待從庫相應的超市時間,如果在時間內沒有收到從庫相應,複製切換到非同步模式。
停止slave IO 線程,然後重新開啟該線程。以使slave IO 線程從新串連到主庫,並以半同步方式在主庫註冊。
在從庫上執行以下命令重啟slave IO線程:
mysql>STOP SLAVE IO_THREAD;
mysql>START SLAVE IO_THREAD;
注意點:
在mysql啟動前將全域變數寫入到設定檔中。以避免忘記設定使半同步不生效。
主庫設定檔
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout=10000 #10秒
從庫設定檔
[mysqld]
rpl_semi_sync_slave_enabled = 1
MySQL的半同步複製