服务器插件 API 具有以下特性:
-
所有插件都有一些共同点。
每个插件都有一个名称,可以在 SQL 语句中引用它,以及其他元数据,例如作者和描述,这些元数据提供其他信息。可以在
INFORMATION_SCHEMA.PLUGINS
表中或使用SHOW PLUGINS
语句检查此信息。 -
插件框架是可扩展的,以适应不同类型的插件。
尽管插件 API 的某些方面对所有类型的插件都是通用的,但 API 也允许特定于类型的接口元素,以便可以创建不同类型的插件。具有一个用途的插件可以具有最适合其自身需求的接口,而不是其他插件类型的需求。
存在用于多种类型插件的接口,例如存储引擎、全文解析器和
INFORMATION_SCHEMA
表。还可以添加其他类型。 -
插件可以向用户公开信息。
插件可以实现系统和状态变量,这些变量可以通过
SHOW VARIABLES
和SHOW STATUS
语句获得。 -
插件 API 包含版本信息。
插件 API 中包含的版本信息使插件库及其包含的每个插件能够根据用于构建库的 API 版本进行自我标识。如果 API 随着时间的推移而发生变化,则版本号也会发生变化,但服务器可以检查给定插件库的版本信息,以确定其是否支持库中的插件。
版本号有两种类型。第一种是通用插件框架本身的版本。每个插件库都包含这种类型的版本号。第二种类型适用于各个插件。每种特定类型的插件都有一个接口版本,因此库中的每个插件都有一个特定于类型的版本号。例如,包含全文解析器插件的库具有通用插件 API 版本号,而该插件具有特定于全文插件接口的版本号。
-
插件 API 实施安全限制。
必须将插件库安装在服务器控制位置且在运行时无法更改的特定专用目录中。此外,库必须包含将其标识为插件库的特定符号。如果未将某些内容构建为插件,则服务器不会将其作为插件加载。
-
插件可以访问服务器服务。
服务接口公开了服务器功能,插件可以使用普通的函数调用来访问这些功能。有关详细信息,请参阅 MySQL 插件服务。
在某些方面,服务器插件 API 类似于它所取代的旧的可加载函数 API,但插件 API 与旧接口相比有几个优势。例如,可加载函数没有版本信息。此外,较新的插件接口消除了较旧的可加载函数接口的安全问题。用于编写非插件可加载函数的旧接口允许从系统动态链接器搜索的任何目录加载库,并且标识可加载函数库的符号相对非特定。
客户端插件 API 具有类似的架构特性,但客户端插件无法像服务器插件那样直接访问服务器。