4.1插件的类型

插件API可以创建实现多种功能的插件:

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

存储引擎插件

MySQL Server使用的可插拔存储引擎架构使存储引擎能够被写为插件并从正在运行的服务器加载并卸载。有关此架构的描述,请参阅MySQL存储引擎架构概述

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

全文解析器插件

MySQL有一个内置的解析器,默认情况下它用于全文操作(解析要索引的文本,或解析查询字符串以确定要用于搜索的术语)。支持内置全文解析器Innodb.myisam.表。

MySQL还拥有一个基于角色的Ngram全文解析器,支持中文,日语和韩语(CJK)以及支持日语的基于Word的MECAB Parser插件,以便使用Innodb.myisam.表。

对于全文处理,解析意味着提取单词(或令牌,在基于n-gram字符的解析器的情况下,基于定义哪个字符序列构成一个单词的规则以及Word边界所在的规则,从文本或查询字符串。

解析索引目的时,解析器将每个单词传递给服务器,该服务器将其添加到全文索引中。解析查询字符串时,解析器将每个单词传递给服务器,该服务器累积用于搜索中的单词。

中描述了内置全文解析器的解析属性全文搜索功能.这些属性包括用于确定如何从文本中提取单词的规则。解析器会受到某些系统变量的影响,这些系统变量会排除更长或更短的单词,以及标识要忽略的常见单词的停止词列表。有关更多信息,请参阅全文Stopwords,微调MySQL全文搜索

插件API允许您使用一个全文解析器,而不是默认的内置全文解析器。例如,如果使用日文,可以选择使用MeCab全文解析器。插件API还允许您提供自己的全文解析器,以便您能够控制解析器的基本职责。解析器插件可以在以下两种角色中操作:

  • 插件可以替换内置解析器。在这个角色中,插件读取要解析的输入,将其分割成单词,并将单词传递给服务器(用于索引或标记积累)。ngram和MeCab解析器可作为内置全文解析器的替代。

    如果需要使用不同于内置解析器的规则来确定如何将输入拆分为单词,则可以选择提供自己的全文解析器。例如,内置解析器考虑文本区分大小写由两个单词组成情况下敏感,而应用程序可能需要将文本视为单个单词。

  • 插件可以通过用作前端与内置解析器一起使用。在此角色中,插件从输入中提取文本并将文本传递给解析器,使用其正常解析规则将文本拆分为单词。这种解析受到了影响innodb_ft_xxxft_xxx系统变量和秒表列表。

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

解析器插件也可以同时使用这两种角色。也就是说,它可以从非明文输入中提取文本(前端角色),也可以将文本解析为单词(从而替换内置解析器)。

全文插件是按索引与全文索引相关联的。也就是说,当您最初安装解析器插件时,不会将其用于任何全文操作。它只是变得可用。例如,一个全文解析器插件可以在与解析器创建个人时的子句全文索引。要在表格创建时间创建此类索引,请执行以下操作:

创建表t (doc CHAR(255), FULLTEXT INDEX (doc) WITH PARSER parser_name) ENGINE=InnoDB;

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

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

将解析器与索引关联的唯一的SQL更改是与解析器条款。搜索与前面一样指定,查询不需要更改。

当您将解析器插件与全文索引,使用索引需要插件。如果解析器插件被删除,则与其关联的任何索引变得无法使用。虽然,任何尝试使用哪个插件的表格无法导致一个表格下拉表仍然是可能的。

有关全文插件的更多信息,请参见第4.4.4节“编写全文解析器插件”.MySQL 8.0支持全文插件myisam.Innodb.

守护进程插件

守护进程插件是一种简单的插件,用于服务器运行的代码,但不与服务器通信。MySQL发行版包括一个示例守护程序插件,它可以定期将心跳消息写入文件。

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

INFORMATION_SCHEMA插件

INFORMATION_SCHEMA插件允许创建包含服务器元数据的表,这些数据通过INFORMATION_SCHEMA数据库。例如,Innodb.使用INFORMATION_SCHEMA提供包含关于当前事务和锁信息的表的插件。

有关的更多信息INFORMATION_SCHEMA插件,看到第4.4.6节,“编写INFORMATION_SCHEMA插件”

Semisynchronous复制插件

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

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

审计插件

MySQL服务器提供了一个可插入的审计接口,允许将服务器操作的信息报告给相关方。这些操作会产生审计通知(尽管接口是通用的,服务器可以被修改以报告其他操作):

  • 将消息写入常规查询日志(如果已启用日志)

  • 向错误日志中写入一条消息

  • 向客户端发送查询结果

审计插件可以注册到审计接口来接收服务器操作的通知。当服务器内发生可审计事件时,服务器决定是否需要通知。对于每个注册的审计插件,服务器根据插件感兴趣的事件类检查事件,如果有匹配的事件,就把事件传递给插件。

该接口允许审计插件只接收关于它们认为重要的事件类中的操作的通知,并忽略其他操作。该接口将操作分类为事件类,并在每个类中进一步划分为事件子类。

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

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

身份验证插件

MySQL支持可插式身份验证。服务器端和客户端都存在身份验证插件。服务器端的插件实现了身份验证方法,供客户端连接到服务器时使用。客户端插件与服务器端插件通信,以提供所需的身份验证信息。客户端插件可以与用户交互,执行一些任务,比如请求将密码或其他身份验证凭证发送到服务器。看可插拔身份验证

可插拔身份验证还支持代理用户能力,其中一个用户采用另一个用户的身份。服务器端身份验证插件可以返回到服务器,其标识连接用户应该具有的用户的名称。看代理用户

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

密码验证插件

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

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

协议跟踪插件

MySQL支持协议跟踪插件的使用:客户端插件实现了对使用客户端/服务器协议发生的客户端和服务器之间通信的跟踪。

有关协议跟踪插件的更多信息,请参见第4.4.11节“编写协议跟踪插件”

查询重写插件

MySQL服务器支持查询重写插件,这些插件可以在服务器执行之前检查并修改服务器接收到的语句。查询重写插件在服务器解析语句之前或之后接受语句。

准备查询重写插件具有以下特征:

  • 插件可以在服务器处理之前重写到达服务器到达服务器的SQL语句。

  • 插件接收语句字符串,并可以返回不同的字符串。

postparse查询重写插件具有以下特征:

  • 该插件支持基于解析树重写语句。

  • 服务器解析每条语句,并将其解析树传递给插件,插件可以遍历树。该插件可以将原始树返回给服务器进行进一步处理,或者构造一个不同的树并返回它。

  • 插件可以使用mysql_parser用于这些目的的插件服务:

    • 激活语句摘要计算并获得语句的规范化版本(与Performance Schema是否生成摘要无关)。

    • 遍历解析树木。

    • 解析陈述。如果插件从解析树构造一个新的语句字符串,这非常有用。插件可以让服务器解析字符串以生成新树,然后将该树返回为重写语句的表示。

有关插件服务的更多信息,请参见MySQL插件服务

准备和postparse查询重写插件具有以下特征:

  • 如果安装了查询重写插件,则- 生原料选项影响语句日志记录如下所示:

    • 没有- 生原料,服务器记录查询重写插件返回的语句。这可能与收到的声明不同。

    • - 生原料,服务器将原始语句记录为收到的。

  • 如果一个插件重写了一条语句,服务器会根据重写的语句而不是原始的语句来决定是否将其写入二进制日志(从而写入任何副本)。如果一个插件只重写选择语句选择语句,对二进制日志没有影响,因为服务器不写选择二进制日志的语句。

  • 如果插件重写语句,则服务器会产生一个笔记客户端可以查看的消息显示警告.消息有这种格式,其中stmt_in是原始声明和stmt_out是重写的声明:

    查询的stmt_in“重写到”stmt_out'通过查询重写插件

MySQL发行版包括一个名为重写.这个插件是基于规则的。您可以向其规则表中添加要引起的行选择声明重写。有关更多信息,请参阅Rewriter查询重写插件

查询重写插件使用与审核插件相同的API。有关审核插件的更多信息,请参阅第4.4.8节,“编写审计插件”

密匙环插件

MySQL Server支持键控插件,使内部服务器组件和插件能够安全地存储敏感信息以供以后检索。

所有的MySQL发行版都包含一个名为keyring_file..MySQL Enterprise Edition Distributions包括其他键控插件。看mysql钥匙扣

有关密匙环插件的更多信息,请参见第4.4.12节,“编写Keyring插件”