编写守护程序插件
守护程序插件是一种简单的插件类型,用于应由服务器运行但不与其通信的代码。本节介绍如何使用plugin/daemon_example
MySQL源代码分发目录中的示例插件编写守护程序服务器插件。该目录包含daemon_example.cc
名为daemon 的源文件,该插件daemon_example
定期将心跳字符串写入mysql-heartbeat.log
data目录中命名的文件。
要编写守护程序插件,请在插件源文件中包含以下头文件。根据插件的功能和要求,可能还需要其他MySQL或常规头文件。
#include <mysql/plugin.h>
plugin.h
定义MYSQL_DAEMON_PLUGIN
服务器插件类型和声明插件所需的数据结构。
该daemon_example.cc
文件如下设置库描述符。库描述符包括单个通用服务器插件描述符。
mysql_declare_plugin(daemon_example) { MYSQL_DAEMON_PLUGIN, &daemon_example_plugin, "daemon_example", "Brian Aker", "Daemon example, creates a heartbeat beat file in mysql-heartbeat.log", PLUGIN_LICENSE_GPL, daemon_example_plugin_init, /* Plugin Init */ daemon_example_plugin_deinit, /* Plugin Deinit */ 0x0100 /* 1.0 */, NULL, /* status variables */ NULL, /* system variables */ NULL, /* config options */ 0, /* flags */ } mysql_declare_plugin_end;
所述name
构件(daemon_example
)指示要用于如在语句中的插件的引用名称INSTALL PLUGIN
或UNINSTALL PLUGIN
。这也是由SHOW PLUGINS
或显示的名称INFORMATION_SCHEMA.PLUGINS
。
插件描述符的第二个成员daemon_example_plugin
指向特定于类型的守护程序插件描述符。此结构仅由特定于类型的API版本号组成:
struct st_mysql_daemon daemon_example_plugin= { MYSQL_DAEMON_INTERFACE_VERSION };
特定于类型的结构没有接口功能。服务器与插件之间没有通信,只是服务器从通用插件描述符中调用初始化和反初始化函数来启动和停止插件:
daemon_example_plugin_init()
打开心跳文件,并产生一个线程,该线程会定期唤醒并向该文件写入下一条消息。daemon_example_plugin_deinit()
关闭文件并执行其他清理。
要编译和安装插件库文件,请使用“编译和安装插件库”中的说明。要使该库文件可供使用,请将其安装在插件目录(由plugin_dir
系统变量命名的目录)中。对于该daemon_example
插件,当您从源代码构建MySQL时,将对其进行编译和安装。它也包含在二进制发行版中。构建过程将生成一个共享对象库,其名称为libdaemon_example.so
(.so
后缀可能因平台而异)。
要使用插件,请在服务器上注册。例如,要在运行时注册插件,请使用以下语句(.so
根据需要调整平台的后缀):
INSTALL PLUGIN daemon_exampleSONAME 'libdaemon_example.so';
有关插件加载的更多信息,请参见“MySQL服务器插件”。
要验证插件安装,请检查INFORMATION_SCHEMA.PLUGINS
表或使用以下SHOW PLUGINS
语句。请参见“获取服务器插件信息”。
加载插件后,它会定期将心跳字符串写入mysql-heartbeat.log
数据目录中命名的文件。该文件会无限制地增长,因此,在您确定插件可以正常运行之后,请卸载它:
UNINSTALL PLUGIN daemon_example;