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.so
,libmyplugin.dll
或libmyplugin.dylib
)。
共享库必须位于插件目录(由plugin_dir系统变量命名的目录)中。该库必须位于插件目录本身中,而不是子目录中。默认情况下,plugin_dir是pkglibdir
配置变量命名的目录下的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 PLUGIN和UNINSTALL PLUGIN语句。
-
停止服务器,在 plugin 目录中安装新的插件库文件,然后重新启动服务器。