扩展 MySQL 8.0  / 第 4 章 MySQL 插件 API  /  4.1 插件类型

4.1 插件类型

插件 API 支持创建实现多种功能的插件:

以下部分概述了这些插件类型。

可加载函数 (UDF) 插件

可加载函数可以包含在插件库文件中并安装在服务器上。

有关将 MySQL 接口用于可加载函数的信息,请参阅第 6.2 节,“添加可加载函数”Loadable Function Compiling and Installing中描述了编译和安装可加载函数插件的步骤。

笔记

可加载函数以前称为用户定义函数 (UDF)。该术语有点用词不当,因为用户定义也适用于使用 SQL 编写的存储函数和通过修改服务器源代码添加的本机函数。

存储引擎插件

MySQL Server 使用的可插拔存储引擎架构使存储引擎可以作为插件编写,并加载到正在运行的服务器中或从中卸载。有关此体系结构的描述,请参阅 MySQL 存储引擎体系结构概述

有关如何使用插件 API 编写存储引擎的信息,请参阅 MySQL 内部结构:编写自定义存储引擎

全文解析器插件

MySQL 有一个内置的解析器,它默认用于全文操作(解析要索引的文本,或解析查询字符串以确定要用于搜索的术语)。对于全文处理,解析意味着根据定义由哪些字符序列组成单词以及单词边界所在的规则从文本或查询字符串中提取单词。

当出于索引目的进行解析时,解析器将每个单词传递给服务器,服务器将其添加到全文索引中。解析查询字符串时,解析器将每个词传递给服务器,服务器累积这些词以供搜索使用。

全文搜索功能 中描述了内置全文解析器的解析属性。这些属性包括用于确定如何从文本中提取单词的规则。解析器会受到某些系统变量的影响,例如 会导致较短或较长的词被排除在外的系统变量,ft_min_word_len以及 ft_max_word_len标识要忽略的常用词的停用词列表。

插件 API 使您能够提供自己的全文解析器,以便您可以控制解析器的基本职责。解析器插件可以以两种角色中的任何一种运行:

  • 该插件可以替换内置的解析器。在这个角色中,插件读取要解析的输入,将其拆分为单词,并将单词传递给服务器(用于索引或单词累积)。

    以这种方式使用解析器的一个原因是您需要使用与内置解析器不同的规则来确定如何将输入拆分为单词。例如,内置解析器认为文本 case-sensitive由两个单词 casesensitive组成,而应用程序可能需要将文本视为单个单词。

  • 该插件可以通过充当内置解析器的前端来与内置解析器结合使用。在此角色中,插件从输入中提取文本并将文本传递给解析器,解析器使用其正常解析规则将文本拆分为单词。特别是,此解析将受到 系统变量和停用词列表的影响。 ft_xxx

    以这种方式使用解析器的一个原因是您需要索引 PDF 文档、XML 文档或 .doc文件等内容。内置解析器不适用于这些类型的输入,但插件可以从这些输入源中提取文本并将其传递给内置解析器。

解析器插件也可以在这两种角色中运行。也就是说,它可以从非明文输入中提取文本(前端角色),并将文本解析为单词(从而取代内置解析器)。

全文插件在每个索引的基础上与全文索引相关联。也就是说,当您最初安装解析器插件时,不会导致它用于任何全文操作。它只是变得可用。例如,全文解析器插件可以 WITH PARSER在创建单个 FULLTEXT索引时在子句中命名。要在创建表时创建这样的索引,请执行以下操作:

CREATE TABLE t
(
  doc CHAR(255),
  FULLTEXT INDEX (doc) WITH PARSER my_parser
) ENGINE=MyISAM;

或者您可以在创建表后添加索引:

ALTER TABLE t ADD FULLTEXT INDEX (doc) WITH PARSER my_parser;

将解析器与索引相关联的唯一 SQL 更改是WITH PARSER子句。搜索与以前一样指定,查询不需要更改。

当您将解析器插件与 FULLTEXT索引相关联时,该插件是使用索引所必需的。如果删除解析器插件,则与其关联的任何索引都将变得不可用。任何尝试使用插件不可用的表都会导致错误,但DROP TABLE仍有可能。

有关全文插件的更多信息,请参阅 第 4.4.4 节,“编写全文解析器插件”。MySQL 5.6 仅支持带 MyISAM.

守护进程插件

守护进程插件是一种简单类型的插件,用于应由服务器运行但不与其通信的代码。MySQL 发行版包括一个示例守护程序插件,该插件将周期性心跳消息写入文件。

有关守护程序插件的更多信息,请参阅 第 4.4.5 节,“编写守护程序插件”

INFORMATION_SCHEMA 插件

INFORMATION_SCHEMAINFORMATION_SCHEMA 插件允许创建包含通过数据库向用户公开的服务器元数据的表。例如,InnoDB使用 INFORMATION_SCHEMA插件提供包含有关当前事务和锁的信息的表。

有关 INFORMATION_SCHEMA插件的更多信息,请参阅 第 4.4.6 节,“编写 INFORMATION_SCHEMA 插件”

半同步复制插件

MySQL 复制默认是异步的。使用半同步复制,在返回到执行事务的会话之前,在源端执行的提交会阻塞,直到至少一个副本确认它已经收到并记录了事务的事件。半同步复制是通过互补的源和客户端插件实现的。请参阅 半同步复制

有关半同步复制插件的更多信息,请参阅 第 4.4.7 节,“编写半同步复制插件”

审计插件

MySQL 服务器提供了一个可插入的审计接口,可以将有关服务器操作的信息报告给感兴趣的各方。这些操作会出现审计通知(尽管接口是通用的并且可以修改服务器以报告其他操作):

  • 将消息写入一般查询日志(如果启用了日志)

  • 将消息写入错误日志

  • 向客户端发送查询结果

审计插件可以在审计接口上注册以接收有关服务器操作的通知。当服务器内发生可审计事件时,服务器确定是否需要通知。对于每个已注册的审计插件,服务器会根据插件感兴趣的那些事件类检查事件,如果匹配则将事件传递给插件。

此接口使审计插件能够仅接收有关它们认为重要的事件类中的操作的通知,而忽略其他事件类。该接口提供将操作分类为事件类,并进一步划分为每个类中的事件子类。

当审计插件收到可审计事件的通知时,它会收到一个指向当前 THD 结构的指针和一个指向包含事件信息的结构的指针。该插件可以检查事件并执行任何适当的审计操作。例如,插件可以查看生成结果集或被记录的语句、结果中的行数、操作的当前用户是谁或失败操作的错误代码。

有关审计插件的更多信息,请参阅 第 4.4.8 节,“编写审计插件”

认证插件

MySQL 支持可插入的身份验证。身份验证插件存在于服务器端和客户端。服务器端的插件实现客户端连接到服务器时使用的身份验证方法。客户端的插件与服务器端的插件进行通信,以提供所需的身份验证信息。客户端插件可以与用户交互,执行诸如请求密码或其他身份验证凭据以发送到服务器的任务。请参阅 可插入身份验证

可插入身份验证还支持代理用户功能,其中一个用户使用另一个用户的身份。服务器端身份验证插件可以向服务器返回连接用户应具有其身份的用户名。请参阅代理用户

有关身份验证插件的更多信息,请参阅 第 4.4.9 节,“编写身份验证插件”

密码验证插件

服务器提供了一个接口,用于编写测试密码的插件。这样的插件实现了两个功能:

有关编写此类插件的信息,请参阅 第 4.4.10 节,“编写密码验证插件”