半同步複製是使用外掛程式實作的,必須在來源和複本上安裝這些外掛程式,才能在執行個體上使用半同步複製。來源和複本有不同的外掛程式。安裝外掛程式後,您可以透過與其相關聯的系統變數來控制它。這些系統變數只有在安裝相關聯的外掛程式後才可用。
本節說明如何安裝半同步複製外掛程式。有關安裝外掛程式的一般資訊,請參閱第 7.6.1 節,「安裝和解除安裝外掛程式」。
若要使用半同步複製,必須滿足下列要求
安裝外掛程式的功能需要支援動態載入的 MySQL 伺服器。若要驗證此點,請檢查
have_dynamic_loading
系統變數的值是否為YES
。二進制發行版本應支援動態載入。複製必須已經在運作中,請參閱第 19.1 節,「設定複製」。
不得設定多個複製通道。半同步複製僅與預設複製通道相容。請參閱第 19.2.2 節,「複製通道」。
外掛程式程式庫檔案的副檔名會因平台而異(例如,Unix 和類 Unix 系統的 .so
,以及 Windows 的 .dll
)。外掛程式和程式庫檔案名稱如下
來源伺服器:
rpl_semi_sync_source
外掛程式(semisync_source.so
或semisync_source.dll
程式庫)複本:
rpl_semi_sync_replica
外掛程式(semisync_replica.so
或semisync_replica.dll
程式庫)
若要讓來源伺服器或複本伺服器可以使用,適當的插件函式庫檔案必須位於 MySQL 插件目錄中(由 plugin_dir
系統變數命名的目錄)。如有必要,請在伺服器啟動時設定 plugin_dir
的值來配置插件目錄位置。來源插件函式庫檔案必須存在於來源伺服器的插件目錄中。複本插件函式庫檔案必須存在於每個複本伺服器的插件目錄中。
若要設定半同步複製,請使用以下指示。此處提及的 INSTALL PLUGIN
、SET GLOBAL
、STOP REPLICA
和 START REPLICA
陳述式需要 REPLICATION_SLAVE_ADMIN
權限(或已棄用的 SUPER
權限)。
若要載入插件,請在來源伺服器和每個要進行半同步複製的複本伺服器上使用 INSTALL PLUGIN
陳述式,並根據您的平台調整 .so
副檔名(如有需要)。
在來源伺服器上
INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
在每個複本伺服器上
INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
如果嘗試安裝插件時在 Linux 上發生類似此處顯示的錯誤,您必須安裝 libimf
mysql> INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_source.so'
(errno: 22 libimf.so: cannot open shared object file:
No such file or directory)
您可以從 https://mysqldev.dev.org.tw/downloads/os-linux.html 取得 libimf
。
若要驗證插件安裝,請檢查 Information Schema PLUGINS
表格或使用 SHOW PLUGINS
陳述式(請參閱 第 7.6.2 節「取得伺服器插件資訊」)。例如
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_source | ACTIVE |
+----------------------+---------------+
如果插件初始化失敗,請檢查伺服器錯誤日誌以取得診斷訊息。
安裝半同步複製插件後,預設會停用。必須在來源端和複本端啟用插件才能啟用半同步複製。如果僅啟用其中一端,則複製是異步的。若要啟用插件,請使用 SET GLOBAL
在執行階段設定適當的系統變數,或在伺服器啟動時在命令列或選項檔案中設定。例如
SET GLOBAL rpl_semi_sync_source_enabled = 1;
SET GLOBAL rpl_semi_sync_replica_enabled = 1;
如果您在執行階段在複本上啟用半同步複製,您也必須啟動複製 I/O(接收器)執行緒(如果已在執行則先停止),以使複本連線到來源並註冊為半同步複本
STOP REPLICA IO_THREAD;
START REPLICA IO_THREAD;
如果複製 I/O(接收器)執行緒已在執行,而您不重新啟動它,則複本會繼續使用異步複製。
在選項檔案中列出的設定在每次伺服器啟動時都會生效。例如,您可以在來源和複本伺服器上的 my.cnf
檔案中設定變數,如下所示。在來源伺服器上
[mysqld]
rpl_semi_sync_source_enabled=1
在每個複本伺服器上
[mysqld]
rpl_semi_sync_replica_enabled=1
您可以使用安裝插件時可用的系統變數來配置半同步複製插件的行為。如需重要系統變數的相關資訊,請參閱 第 19.4.10.2 節「配置半同步複製」。