Skip to content

Latest commit

 

History

History
30 lines (24 loc) · 2.17 KB

File metadata and controls

30 lines (24 loc) · 2.17 KB

MySQL插件服务

MySQL服务器的插件可以访问服务器的“插件服务”。插件服务接口暴露了插件可以调用的服务器功能。它补充了插件API并具有这些特性:

  • 服务使得插件能够使用普通的函数调用来访问服务器代码。用户定义函数(UDF)也可以使用服务。
  • 服务是可移植的,可以在多种平台上工作。
  • 接口包含了版本机制,因此服务器支持的服务版本号可以在加载时检查,与插件版本相对照。

插件服务接口与插件API不同:

  • 插件API使得插件能够被服务器使用。服务器主动调用插件。这使得插件可以扩展服务器的功能或者注册来接收关于服务器过程的通知。
  • 插件服务接口使得插件能够调用服务器内部代码。插件主动调用服务函数。这使得插件可以使用服务器内已实现的功能,插件不需要自己实现。

要确定存在哪些服务以及它们提供哪些服务,查看MySQL源码包中的include/mysql目录。相关文件有:

  • plugin.h包含了services.h,这个文件包含了所有可以使用的特定服务的头文件。
  • 特定服务的头文件名称形式如service_xxx.h

每个特定服务的头文件应包含给定服务的完整的使用文档,包括可使用的服务函数、它们的调用顺序以及返回值。

可使用的服务包括:

  • locking_service:实现了具有3个属性的锁服务:锁命名空间、锁的名称和锁的模式。
  • my_plugin_log_service:使得插件可以报告错误和具体的错误消息。服务器将消息写到它的错误日志中。
  • my_snprintf:跨平台生成一致结果的字符串格式化服务。
  • my_thd_scheduler:给插件来选择线程调度器的服务。
  • mysql_keyring:密钥环存储服务。
  • mysql_password_policy:密码验证和长度校验服务。
  • mysql_string:字符串操作服务。
  • security_context:使得插件可以测试或操纵线程安全上下文的服务。
  • thd_alloc:内存分配服务。
  • thd_wait:给插件来报告何时休眠或停止的服务。

在构建插件时,在链接时使用-lmysqlservices标识来链接libmysqlservices库。