扩展MySQL 5.7/.../ 编写半同步复制插件

4.4.7写半同步复制插件

本节描述如何编写服务器端半同步复制插件,使用在插件/ semisyncMySQL源代码发行版目录。该目录包含源和副本插件的源文件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”、“振兴”、“Semi-synchronous复制大师”,PLUGIN_LICENSE_GPL, semi_sync_master_plugin_init, / *插件初始化* / semi_sync_master_plugin_deinit, / *插件Deinit * / 0 x0100 / * 1.0 * /, semi_sync_master_status_vars, / *状态变量* / semi_sync_master_system_vars,零,/ *系统变量* / / * * / 0配置选项,/ *旗帜* /}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”、“振兴”、“Semi-synchronous复制奴隶”,PLUGIN_LICENSE_GPL, semi_sync_slave_plugin_init, / *插件初始化* / semi_sync_slave_plugin_deinit, / *插件Deinit * / 0 x0100 / * 1.0 * /, semi_sync_slave_status_vars, / *状态变量* / semi_sync_slave_system_vars,零,/ *系统变量* / / * * / 0配置选项,/ *旗帜* /}mysql_declare_plugin_end;

对于源插件和副本插件,通用描述符都有指向特定类型描述符、初始化和反初始化函数以及插件实现的状态和系统变量的指针。有关变量设置的信息,请参见第4.4.2.2节,服务器插件状态和系统变量.下面的注释讨论了源插件的特定类型描述符以及初始化和反初始化函数,但同样适用于副本插件。

semi_sync_master_plugin源通用描述符的成员指向特定类型的描述符,它只包含特定类型的API版本号:

struct Mysql_replication semi_sync_master_plugin= {MYSQL_REPLICATION_INTERFACE_VERSION};

初始化和反初始化函数的声明如下所示:

静态int semi_sync_master_plugin_init(void *p);静态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(所以后缀可能因平台而异)。