擴充 MySQL 8.4  /  ...  /  編寫半同步複製外掛程式

4.4.7 編寫半同步複製外掛程式

本節說明如何編寫伺服器端半同步複製外掛程式,並使用 MySQL 原始程式碼發行版中的 plugin/semisync 目錄中的範例外掛程式。該目錄包含名為 rpl_semi_sync_masterrpl_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_masterrpl_semi_sync_slave 外掛程式,當您從原始程式碼建置 MySQL 時,會編譯和安裝它們。它們也包含在二進位發行版中。建置程序會產生名為 semisync_master.sosemisync_slave.so 的共用物件程式庫(.so 後綴可能會因您的平台而異)。