4.1插件的类型

插件API允许创建实现以下功能的插件:

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

存储引擎插件

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

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

全文解析器插件

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

MySQL还有一个基于字符的ngram全文解析器,支持中文、日文和韩文(CJK),以及一个基于单词的MeCab解析器插件,支持日文InnoDBMyISAM表。

对于全文处理,解析意思是提取词语(或令牌(对于n-gram的基于字符的解析器)从文本或查询字符串中获取,查询字符串基于定义组成单词的字符序列和单词边界所在的规则。

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

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

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

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

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

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

    以这种方式使用解析器的一个原因是,您需要为PDF文档、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 5.7支持全文插件MyISAMInnoDB

守护进程插件

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

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

Information_schema插件

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

有关INFORMATION_SCHEMA插件,看到第4.4.6节,“编写INFORMATION_SCHEMA插件”

Semisynchronous复制插件

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

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

审计插件

MySQL Server提供可插拔的审计界面,使得有关服务器操作的信息可以向有关方面报告。对于这些操作发生审核通知(尽管接口是通用的,并且可以修改服务器以报告其他服务器):

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

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

  • 将查询结果发送给客户端

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

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

当审计插件收到可审计事件的通知时,它会接收到一个指向当前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查询重写插件共享这些特征:

  • 如果安装了查询重写插件,则——log-raw选项影响语句日志记录如下:

    • 没有——log-raw,服务器记录由查询重写插件返回的语句。这可能与收到的陈述不同。

    • ——log-raw,服务器将原始语句记录为收到的。

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

  • 如果一个插件重写了一条语句,服务器将生成一个请注意客户端可以使用查看的消息显示警告.消息有这种格式,其中stmt_in是原始声明和stmt_out是重写的语句:

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

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

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

键控插件

从MySQL 5.7.11开始,MySQL服务器支持密匙环插件,使内部服务器组件和插件能够安全地存储敏感信息供以后检索。

所有的MySQL发行版都包含一个名为keyring_file.MySQL企业版发行版包括额外的密匙环插件。看到MySQL密匙环

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