• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 插件编写概述

    要创建插件库,您必须提供必需的描述符信息,以指示该库文件包含哪些插件,并为每个插件编写接口函数。

    每个服务器插件必须具有为插件API提供信息的通用描述符,以及为给定类型的插件提供有关插件接口信息的特定于类型的描述符。所有插件类型的通用描述符的结构都相同。特定于类型的描述符的结构随插件类型的不同而不同,并由插件需要做什么的要求决定。服务器插件界面还使插件能够公开状态和系统变量。这些变量通过SHOW STATUSSHOW VARIABLES语句以及相应的INFORMATION_SCHEMA表变得可见。

    对于客户端插件,架构有所不同。每个插件都必须有一个描述符,但是不能分为单独的常规和特定于类型的描述符。相反,描述符以所有客户端插件类型通用的一组固定成员开头,并且这些通用成员后跟实现特定插件类型所需的任何其他成员。

    服务器插件包含的代码将成为正在运行的服务器的一部分,因此在编写插件时,您将受到所有其他约束的约束,这些约束否则将适用于编写服务器代码。例如,如果您尝试使用libstdc++库中的函数,则可能会遇到问题。这些限制在将来的服务器版本中可能会更改,因此服务器升级可能需要对最初为旧服务器编写的插件进行修订。有关这些约束的信息,请参见“ MySQL源配置选项”和“处理MySQL编译问题”。

    客户端插件编写者应避免依赖于调用应用程序具有哪些符号,因为您无法确定哪些应用程序将使用该插件。

    插件编写概述

    这些条件适用于插件编写:

    • 插件使用的MySQL头文件包含C ++代码,因此插件必须编译为C ++代码。
    • 您必须编译具有全部服务器源代码的插件,而不仅仅是库和头文件。
    • 编译的插件在服务器版本之间不兼容。对于针对MySQL 8.0编译的插件。X,因此无法保证它可以与MySQL 8.0一起使用。Y服务器无需重新编译MySQL 8.0。Y
    • 插件是动态加载和卸载的,因此您的操作系统必须支持动态加载,并且您必须已动态(而非静态)编译了调用应用程序。对于服务器插件,这意味着必须动态链接mysqld

    以下过程概述了创建插件库所需的步骤。下一节将提供有关设置插件数据结构和编写特定类型的插件的更多详细信息。

    1. 在插件源文件中,包含插件库所需的头文件。该plugin.h文件是必需的,并且库可能还需要其他文件。例如:

      #include <stdlib.h>
      #include <ctype.h>
      #include <mysql/plugin.h>
      
    2. 设置插件库文件的描述符信息。对于服务器插件,编写库描述符,该描述符必须包含文件中每个服务器插件的常规插件描述符。有关更多信息,请参见“服务器插件库和插件描述符”。另外,为库中的每个服务器插件设置特定于类型的描述符。每个插件的通用描述符都指向其特定于类型的描述符。

      对于客户端插件,请编写客户端描述符。有关更多信息,请参见“插件数据结构”。

    3. 为每个插件编写插件接口函数。例如,每个插件的常规插件描述符都指向服务器在加载和卸载插件时应调用的初始化和取消初始化功能。插件的类型特定描述也可能指向接口功能。
    4. 对于服务器插件,请设置状态和系统变量(如果有)。
    5. 将插件库编译为共享库,并将其安装在插件目录中。有关更多信息,请参见“编译和安装插件库”。
    6. 对于服务器插件,请在服务器上注册插件。有关更多信息,请参见“MySQL服务器插件”。
    7. 测试插件以验证其是否正常运行。