13.7.3.3 INSTALL PLUGIN 语句

INSTALL PLUGIN plugin_name SONAME 'shared_library_name'

该语句安装服务器插件。它要求mysql.plugin系统 table 具有INSERT特权。

  • plugin_name *是库文件中包含的插件 Descriptors 结构中定义的插件名称(请参见第 28.2.4.2 节“插件数据结构”)。插件名称不区分大小写。为了获得最大的兼容性,插件名称应限制为 ASCII 字母,数字和下划线,因为它们用于 C 源文件,shell 命令行,M4 和 Bourne shell 脚本以及 SQL 环境中。

  • shared_library_name *是包含插件代码的共享库的名称。该名称包括文件 extensions(例如libmyplugin.solibmyplugin.dlllibmyplugin.dylib)。

共享库必须位于插件目录(由plugin_dir系统变量命名的目录)中。该库必须位于插件目录本身中,而不是子目录中。默认情况下,plugin_dirpkglibdir配置变量命名的目录下的plugin目录,但是可以通过在服务器启动时设置plugin_dir的值来更改它。例如,在my.cnf文件中设置其值:

[mysqld]
plugin_dir=/path/to/plugin/directory

如果plugin_dir的值是相对路径名,则将其视为相对于 MySQL 基本目录(basedir系统变量的值)。

INSTALL PLUGIN加载并初始化插件代码,以使该插件可供使用。插件通过执行其初始化函数进行初始化,该初始化函数处理该插件使用前必须执行的所有设置。当服务器关闭时,它将为每个已加载的插件执行反初始化功能,以便该插件有机会执行任何最终清理。

INSTALL PLUGIN还通过在mysql.plugin系统 table 中添加指示插件名称和库文件名的行来注册插件。服务器启动时,服务器将加载并初始化mysql.plugin中列出的所有插件。这意味着一个插件只能用INSTALL PLUGIN来安装一次,而不是每次服务器启动时都安装一次。如果使用--skip-grant-tables选项启动服务器,则不会在启动时加载插件。

一个插件库可以包含多个插件。对于每个要安装的组件,请使用单独的INSTALL PLUGIN语句。每个语句命名一个不同的插件,但是它们都指定相同的库名。

INSTALL PLUGIN使服务器读取选项(my.cnf)文件,就像在服务器启动期间一样。这使插件可以从这些文件中获取所有相关选项。甚至可以在加载插件之前将插件选项添加到选项文件中(如果使用了loose前缀)。也可以卸载插件,编辑my.cnf,然后再次安装该插件。以这种方式重新启动插件可以使其具有新的选项值,而无需重新启动服务器。

有关控制服务器启动时单个插件加载的选项,请参见第 5.5.1 节“安装和卸载插件”。如果在给定--skip-grant-tables选项(告诉服务器不要读取系统 table)时需要为单个服务器启动加载插件,请使用--plugin-load选项。参见第 5.1.6 节“服务器命令选项”

要删除插件,请使用UNINSTALL PLUGIN语句。

有关插件加载的其他信息,请参见第 5.5.1 节“安装和卸载插件”

要查看安装了哪些插件,请使用SHOW PLUGINS语句或查询INFORMATION_SCHEMA PLUGINStable。

如果重新编译插件库并需要重新安装,则可以使用以下两种方法之一:

  • 使用UNINSTALL PLUGIN卸载库中的所有插件,在插件目录中安装新的插件库文件,然后使用INSTALL PLUGIN将库中的所有插件安装。此过程的优点是可以在不停止服务器的情况下使用它。但是,如果插件库包含许多插件,则必须发出许多INSTALL PLUGINUNINSTALL PLUGIN语句。

  • 停止服务器,在 plugin 目录中安装新的插件库文件,然后重新启动服务器。