• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 编写半同步复制插件

    本节介绍如何使用plugin/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",
      "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;
    

    对于主插件和从插件,通用描述符都具有指向特定于类型的描述符,初始化和反初始化函数以及由插件实现的状态和系统变量的指针。有关变量设置的信息,请参见“服务器插件状态和系统变量”。以下备注讨论了主插件的类型特定的描述符以及初始化和反初始化函数,但是类似地适用于从属插件。

    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。

    要编译和安装插件库文件,请使用“编译和安装插件库”中的说明。要使该库文件可供使用,请将其安装在插件目录(由plugin_dir系统变量命名的目录)中。对于rpl_semi_sync_masterrpl_semi_sync_slave插件,当您从源代码构建MySQL时会编译并安装它们。它们也包含在二进制发行版中。构建过程将生成共享对象库,其名称为semisync_master.sosemisync_slave.so.so后缀可能因平台而异)。