要创建插件库,您必须提供所需的描述符信息,指示库文件包含哪些插件,并为每个插件编写接口函数。
每个服务器插件都必须有一个向插件 API 提供信息的通用描述符,以及一个为给定类型的插件提供有关插件接口信息的特定类型描述符。通用描述符的结构对于所有插件类型都是相同的。特定于类型的描述符的结构因插件类型而异,并且由插件需要做什么的要求决定。服务器插件接口还使插件能够公开状态和系统变量。这些变量通过
SHOW STATUS
and
SHOW VARIABLES
语句和相应的INFORMATION_SCHEMA
表变得可见。
对于客户端插件,架构有点不同。每个插件都必须有一个描述符,但没有分为单独的通用描述符和特定于类型的描述符。相反,描述符以所有客户端插件类型共有的一组固定成员开始,公共成员后面是实现特定插件类型所需的任何其他成员。
您可以用 C 或 C++(或其他可以使用 C 调用约定的语言)编写插件。插件是动态加载和卸载的,因此您的操作系统必须支持动态加载,并且您必须动态(而非静态)编译调用应用程序。对于服务器插件,这意味着mysqld必须动态链接。
服务器插件包含成为正在运行的服务器的一部分的代码,因此当您编写插件时,您将受到任何和所有适用于编写服务器代码的约束的约束。例如,如果您尝试使用libstdc++
库中的函数,您可能会遇到问题。这些约束可能会在服务器的未来版本中发生变化,因此服务器升级可能需要修改最初为旧服务器编写的插件。有关这些约束的信息,请参阅
MySQL Source-Configuration Options和
Dealing with Problems Compiling MySQL。
Client plugin writers should avoid dependencies on what symbols the calling application has because you cannot be sure what applications will use the plugin.