本節說明如何使用 MySQL 原始碼散佈的 plugin/semisync
目錄中的範例外掛程式,編寫伺服器端半同步複製外掛程式。該目錄包含名為 rpl_semi_sync_master
和 rpl_semi_sync_slave
的來源和副本外掛程式的原始檔。此處的資訊僅涵蓋如何設定外掛程式架構。有關外掛程式如何實作複製功能的詳細資訊,請參閱原始碼。
要編寫半同步複製外掛程式,請在外掛程式原始檔中包含以下標頭檔。根據外掛程式的功能和需求,可能還需要其他 MySQL 或通用標頭檔。
#include <mysql/plugin.h>
plugin.h
定義了 MYSQL_REPLICATION_PLUGIN
伺服器外掛程式類型以及宣告外掛程式所需的資料結構。
對於來源端,semisync_master_plugin.cc
包含此名為 rpl_semi_sync_master
的外掛程式的一般描述符
mysql_declare_plugin(semi_sync_master)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_master_plugin,
"rpl_semi_sync_master",
"He Zhenxing",
"Semi-synchronous replication master",
PLUGIN_LICENSE_GPL,
semi_sync_master_plugin_init, /* Plugin Init */
semi_sync_master_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_master_status_vars, /* status variables */
semi_sync_master_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
對於副本端,semisync_slave_plugin.cc
包含此名為 rpl_semi_sync_slave
的外掛程式的一般描述符
mysql_declare_plugin(semi_sync_slave)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_slave_plugin,
"rpl_semi_sync_slave",
"He Zhenxing",
"Semi-synchronous replication slave",
PLUGIN_LICENSE_GPL,
semi_sync_slave_plugin_init, /* Plugin Init */
semi_sync_slave_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_slave_status_vars, /* status variables */
semi_sync_slave_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
對於來源和副本外掛程式,一般描述符都有指向類型特定描述符、初始化和反初始化函數以及外掛程式實作的狀態和系統變數的指標。有關變數設定的資訊,請參閱第 4.4.2.2 節,「伺服器外掛程式狀態和系統變數」。以下說明討論來源外掛程式的類型特定描述符以及初始化和反初始化函數,但同樣適用於副本外掛程式。
來源一般描述符的 semi_sync_master_plugin
成員指向類型特定的描述符,該描述符僅包含類型特定的 API 版本號碼
struct Mysql_replication semi_sync_master_plugin= {
MYSQL_REPLICATION_INTERFACE_VERSION
};
初始化和反初始化函數宣告如下
static int semi_sync_master_plugin_init(void *p);
static int semi_sync_master_plugin_deinit(void *p);
初始化函數使用指標向伺服器註冊事務和二進位記錄的「觀察器」。成功初始化後,伺服器會負責在適當的時間呼叫觀察器。(有關觀察器的詳細資訊,請參閱原始檔。)反初始化函數會透過取消註冊觀察器來清除。每個函數成功返回 0,如果發生錯誤則返回 1。
要編譯和安裝外掛程式庫檔案,請使用第 4.4.3 節,「編譯和安裝外掛程式庫」中的說明。要使程式庫檔案可供使用,請將其安裝在外掛程式目錄中(由plugin_dir
系統變數命名的目錄)。對於 rpl_semi_sync_master
和 rpl_semi_sync_slave
外掛程式,它們會在您從原始碼建置 MySQL 時進行編譯和安裝。它們也包含在二進位散佈中。建置過程會產生名為 semisync_master.so
和 semisync_slave.so
的共享物件庫(.so
後綴可能會因您的平台而異)。