• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 插件类型

    插件API支持创建具有多种功能的插件:

    • 存储引擎
    • 全文解析器
    • 守护进程
    • INFORMATION_SCHEMA桌子
    • 半同步复制
    • 稽核
    • 认证方式
    • 密码验证和强度检查
    • 协议追踪
    • 查询重写
    • 安全的密钥环存储和检索

    以下各节概述了这些插件类型。

    • 存储引擎插件
    • 全文解析器插件
    • 守护程序插件
    • INFORMATION_SCHEMA插件
    • 半同步复制插件
    • 审核插件
    • 验证插件
    • 密码验证插件
    • 协议跟踪插件
    • 查询重写插件
    • 钥匙圈插件

    存储引擎插件

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

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

    全文解析器插件

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

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

    对于全文处理,“解析”是指根据规则定义文本或单词的规则,从文本或查询字符串中提取单词(或在基于n-gram字符的解析器中为“标记”)。单词边界所在的地方。

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

    “全文搜索功能”中介绍了内置全文分析器的分析属性。这些属性包括用于确定如何从文本中提取单词的规则。解析器受到某些系统变量的影响,这些系统变量会导致将较短或较长的单词排除在外,并受到停用词列表的影响,这些停用词列表标识了要忽略的常见单词。有关更多信息,请参见“全文停用词”和“微调MySQL全文搜索”。

    插件API使您可以使用默认的内置全文分析器以外的全文分析器。例如,如果您使用日语,则可以选择使用MeCab全文解析器。插件API还使您能够提供自己的全文语法分析器,从而可以控制语法分析器的基本职责。解析器插件可以扮演以下两种角色之一:

    • 该插件可以代替内置的解析器。在此角色下,插件读取要解析的输入,将其拆分为单词,然后将单词传递给服务器(用于索引或令牌累积)。ngram和MeCab解析器可替代内置的全文解析器。

      如果需要使用与内置解析器不同的规则来确定如何将输入拆分为单词,则可以选择提供自己的全文解析器。例如,内置的解析器认为文本“区分大小写”由两个单词“ case ”和“ sensitive ”组成,而应用程序可能需要将文本视为一个单词。

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

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

    解析器插件也有可能同时在两个角色中运行。也就是说,它可以从非明文输入中提取文本(前端角色),还可以将文本解析为单词(从而替换内置的解析器)。

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

    CREATE TABLE 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更改是WITH PARSER子句。像以前一样指定搜索,无需更改查询。

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

    有关全文插件的更多信息,请参见“编写审核插件”。MySQL 8.0支持带有MyISAM和的全文插件InnoDB

    守护程序插件

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

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

    INFORMATION_SCHEMA插件

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

    有关INFORMATION_SCHEMA插件的更多信息,请参见“编写INFORMATION_SCHEMA插件”。

    半同步复制插件

    默认情况下,MySQL复制是异步的。使用半同步复制,在返回到执行事务的会话之前,在主端执行的提交会阻塞,直到至少一个从属方确认它已接收并记录了事务事件为止。半同步复制通过互补的主插件和客户端插件实现。请参见“半同步复制”。

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

    审核插件

    MySQL服务器提供了一个可插入的审核接口,该接口使有关服务器操作的信息可以报告给相关方。这些操作会发生审核通知(尽管接口是通用的,并且可以修改服务器以报告其他操作):

    • 将消息写到常规查询日志(如果已启用日志)
    • 将消息写入错误日志
    • 向客户发送查询结果

    审核插件可以在审核界面中注册,以接收有关服务器操作的通知。当服务器内发生可审核事件时,服务器将确定是否需要通知。对于每个注册的审计插件,服务器将对照该插件感兴趣的事件类检查事件,如果匹配,则将事件传递给插件。

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

    当审核插件收到有关可审核事件的通知时,它将收到指向当前THD结构的指针和指向包含有关事件信息的结构的指针。插件可以检查事件并执行适当的审核操作。例如,该插件可以参见生成了结果集或被记录的语句,结果中的行数,当前用户用于某项操作或失败操作的错误代码。

    有关审核插件的更多信息,请参见“编写审核插件”。

    验证插件

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

    可插拔身份验证还启用代理用户功能,其中一个用户采用另一用户的身份。服务器端身份验证插件可以将连接用户应具有的身份的用户名返回服务器。请参见“代理用户”。

    有关认证插件的更多信息,请参见“认证插件”。

    密码验证插件

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

    • 在分配密码的语句(例如CREATE USERALTER USER语句)中拒绝太弱的密码。
    • 评估VALIDATE_PASSWORD_STRENGTH() SQL函数潜在密码的强度。

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

    协议跟踪插件

    MySQL支持协议跟踪插件的使用:客户端插件,用于实现使用客户机/服务器协议进行的客户机与服务器之间的通信跟踪。

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

    查询重写插件

    MySQL Server支持查询重写插件,该插件可以在服务器执行语句之前检查并可能修改服务器收到的语句。查询重写插件在服务器解析语句之前或之后获取语句。

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

    • 该插件允许在服务器处理SQL语句之前重写到达服务器的SQL语句。
    • 插件会收到一条语句字符串,并可能返回其他字符串。

    后解析查询重写插件具有以下特征:

    • 该插件允许基于解析树重写语句。
    • 服务器解析每个语句,并将其解析树传递给插件,插件可以遍历该树。插件可以将原始树返回给服务器以进行进一步处理,或者构造其他树并将其返回。
    • 插件可以mysql_parser出于以下目的使用插件服务:

      • 激活语句摘要计算并获得独立于Performance Schema是否产生摘要的语句的规范化版本。
      • 遍历解析树。
      • 解析语句。如果插件从解析树构造新的语句字符串,这将很有用。插件可以让服务器解析字符串以生成新的树,然后将该树作为重写语句的表示形式返回。

    有关插件服务的更多信息,请参见“用于插件的MySQL服务”。

    预编写和后编写查询重写插件具有以下特征:

    • 如果安装了查询重写插件,则该--log-raw选项将影响语句记录,如下所示:

      • 如果不使用--log-raw,服务器将记录查询重写插件返回的语句。这可能与收到的声明有所不同。
      • 使用--log-raw,服务器记录收到的原始语句。
    • 如果插件重写了一条语句,服务器将根据重写后的语句(而不是原始语句)决定是否将其写入二进制日志(从而写入任何复制从站)。如果插件仅SELECTSELECT语句重写为语句,则不会对二进制日志记录产生影响,因为服务器不会将SELECT语句写入二进制日志。
    • 如果插件重写了一条语句,服务器将生成一条Note消息,客户端可以使用参见该消息SHOW WARNINGS。消息具有以下格式,stmt_in原始语句在哪里stmt_out,重写语句在哪里:

      Query 'stmt_in' rewritten to 'stmt_out' by a query rewrite plugin
      

    MySQL发行版包括名为的后解析查询重写插件Rewriter。这个插件是基于规则的。您可以在其规则表中添加行以引起SELECT语句重写。有关更多信息,请参见“MySQL服务器重写器查询重写插件”。

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

    钥匙圈插件

    MySQL Server支持密钥环插件,这些插件使内部服务器组件和插件能够安全地存储敏感信息,以便以后检索。

    所有MySQL发行版都包含一个名为的密钥环插件keyring_file。MySQL企业版发行版包括其他密钥环插件。请参见“ MySQL密钥环”。

    有关密钥环插件的更多信息,请参见“编写密钥环插件”。


    下篇:插件API特性