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