28.2.4 编写插件

要创建插件库,必须提供必需的 Descriptors 信息,以指示该库文件包含哪些插件,并为每个插件编写接口函数。

每个服务器插件必须具有为插件 API 提供信息的常规 Descriptors,以及为给定类型的插件提供有关插件接口信息的特定于类型的 Descriptors。所有插件类型的通用 Descriptors 的结构都相同。特定于类型的 Descriptors 的结构随插件类型的不同而不同,并由插件需要做什么的要求来确定。服务器插件界面还使插件能够公开状态和系统变量。这些变量通过SHOW STATUSSHOW VARIABLES语句以及相应的INFORMATION_SCHEMAtable 变为可见。

对于 Client 端插件,架构有所不同。每个插件都必须具有一个 Descriptors,但是不能分为单独的常规和特定于类型的 Descriptors。相反,Descriptors 以所有 Client 端插件类型通用的一组固定成员开头,并且这些通用成员后跟实现特定插件类型所需的任何其他成员。

您可以使用 C 或 C(或可以使用 C 调用约定的另一种语言)编写插件。插件是动态加载和卸载的,因此您的 os 必须支持动态加载,并且您必须已动态(而非静态)编译了调用应用程序。对于服务器插件,这意味着mysqld必须动态链接。

服务器插件包含的代码将成为正在运行的服务器的一部分,因此在编写插件时,您将受到所有其他约束的约束,这些约束否则将适用于编写服务器代码。例如,如果您尝试使用libstdc++库中的函数,则可能会遇到问题。这些限制在将来的服务器版本中可能会更改,因此服务器升级可能需要对最初为旧服务器编写的插件进行修订。有关这些约束的信息,请参见第 2.9.7 节“ MySQL 源配置选项”第 2.9.8 节“处理 MySQL 编译问题”

Client 端插件编写者应避免依赖于调用应用程序具有哪些符号,因为您无法确定哪些应用程序将使用该插件。