服务器插件必须在使用之前加载到服务器中。MySQL支持在服务器启动和运行时加载插件。也可以在启动时控制加载插件的激活状态,并在运行时卸载它们。
当一个插件被加载时,它的相关信息可以在第5.6.2节,“获取服务器插件信息”.
在使用服务器插件之前,必须使用以下方法之一安装它。的描述,plugin_name
表示插件名称,如innodb
,csv
,或validate_password
.
内置插件
一个内置的插件是服务器自动知道的。默认情况下,服务器在启动时启用插件。一些内置插件允许用--
选择。plugin_name
(=activation_state
]
在mysql中注册。插件系统表
的mysql.plugin
系统表是插件的注册表(内置插件除外,不需要注册)。在正常启动过程中,服务器加载表中注册的插件。默认情况下,对于从mysql.plugin
表中,服务器也启用了插件。可以用--
选择。plugin_name
(=activation_state
]
如果服务器以——skip-grant-tables
选项中注册的插件mysql.plugin
表未加载且不可用。
用命令行选项命名的插件
位于插件库文件中的插件可以在服务器启动时使用——plugin-load
,——plugin-load-add
,或——early-plugin-load
选择。通常,对于一个在启动时加载的插件,服务器也会启用该插件。可以用--
选择。plugin_name
(=activation_state
]
的——plugin-load
而且——plugin-load-add
在服务器启动顺序中,内置插件和存储引擎初始化后,选项加载插件。的——early-plugin-load
选项用于加载内置插件和存储引擎初始化之前必须可用的插件。
每个插件加载选项的值是一个以分号分隔的列表plugin_library
而且的名字
=
plugin_library
值。每一个plugin_library
包含插件代码的库文件的名称,和的名字
要加载的插件的名称。如果一个插件库的命名没有任何前面的插件名称,服务器将加载该库中的所有插件。使用前面的插件名称,服务器只从库中加载命名的插件。的目录中查找插件库文件plugin_dir
系统变量。
插件加载选项不注册任何插件mysql.plugin
表格对于后续的重启,服务器将再次加载插件——plugin-load
,——plugin-load-add
,或——early-plugin-load
给出了。也就是说,该选项产生一次性的插件安装操作,该操作对于单个服务器调用持续存在。
——plugin-load
,——plugin-load-add
,——early-plugin-load
启用插件加载,即使当——skip-grant-tables
是给定的(这导致服务器忽略mysql.plugin
表)。——plugin-load
,——plugin-load-add
,——early-plugin-load
也允许在启动时加载运行时不能加载的插件。
的——plugin-load-add
选择的补充——plugin-load
选择:
的每个实例
——plugin-load
重置启动时加载的插件集,然而——plugin-load-add
将一个或多个插件添加到要加载的插件集,而不重置当前的插件集。因此,如果有多个实例——plugin-load
,则只应用最后一个。的多个实例——plugin-load-add
,它们都适用。参数格式与for相同
——plugin-load
,而是多个实例——plugin-load-add
可以用来避免指定一组大的插件为一个长笨拙——plugin-load
论点。——plugin-load-add
能在没有的情况下给予吗——plugin-load
,但任何实例——plugin-load-add
出现之前——plugin-load
没有影响是因为——plugin-load
重置要加载的插件集。
例如,这些选项:
——plugin-load = x plugin-load-add = y
等价于以下选项:
——plugin-load-add = x plugin-load-add = y
和也等价于这个选项:
——plugin-load = " x, y "
但这些选项:
——plugin-load-add = y plugin-load = x
等价于以下选项:
——plugin-load = x
使用INSTALL PLUGIN语句安装的插件
位于插件库文件中的插件可以在运行时使用安装插件
声明。语句还将插件注册到mysql.plugin
表以使服务器在后续重启时加载它。由于这个原因,安装插件
要求插入
特权的mysql.plugin
表格
插件库文件的基本名称取决于您的平台。常见的后缀是所以
对于Unix和类Unix系统,. dll
对于Windows。
例子:——plugin-load-add
选项在服务器启动时安装插件。安装一个名为并且
来自一个名为somepluglib.so
,使用这些线在一个my.cnf
文件:
(mysqld) plugin-load-add =并且= somepluglib.so
在这种情况下,插件没有注册mysql.plugin
.重新启动服务器,而不需要——plugin-load-add
选项导致插件在启动时不加载。
或者,安装插件
语句会导致服务器在运行时从库文件中加载插件代码:
安装myplugin的SONAME somepluglib.so
安装插件
也会引起”永久”插件注册:插件列在mysql.plugin
表,以确保服务器在后续重启时加载它。
许多插件可以在服务器启动或运行时加载。然而,如果一个插件被设计成必须在服务器启动时加载和初始化,那么尝试在运行时使用安装插件
产生一个错误:
mysql> INSTALL PLUGIN myplugin .so错误1721 (HY000):插件myplugin被标记为不可动态安装。你必须停止服务器才能安装它。
在这种情况下,必须使用——plugin-load
,——plugin-load-add
,或——early-plugin-load
.
如果一个插件的命名都使用——plugin-load
,——plugin-load-add
,或——early-plugin-load
选项和(作为较早的安装插件
声明)mysql.plugin
表中,服务器启动,但将这些消息写入错误日志:
(错误)函数的plugin_name'已经存在[警告]无法加载名为'的插件plugin_name' with soname 'plugin_object_file”。
如果服务器在启动时知道一个插件(例如,因为插件的命名使用——plugin-load-add
选项中注册的mysql.plugin
表),服务器默认加载并启用插件。这是可能的控制激活状态为这样的插件使用--
启动选项,plugin_name
(=activation_state
]plugin_name
是否要影响插件的名称,例如innodb
,csv
,或validate_password
.与其他选项一样,在选项名称中,破折号和下划线是可以互换的。此外,激活状态值不区分大小写。例如,——my_plugin =
而且——my-plugin =
是等价的。
--
plugin_name
=下告诉服务器禁用插件。对于某些内置插件来说,这可能是不可能的,例如
mysql_native_password
.--
plugin_name
(=)告诉服务器启用插件。(指定选项为
--
没有值也有相同的效果。)如果插件初始化失败,服务器将禁用插件运行。plugin_name
--
plugin_name
=力告诉服务器启用插件,但是如果插件初始化失败,服务器不会启动。换句话说,这个选项强制服务器在启用插件的情况下运行,或者根本不运行。
--
plugin_name
= FORCE_PLUS_PERMANENT就像
力
,但另外还可以防止插件在运行时被卸载。如果用户试图使用卸载插件
,则错误发生。
插件的激活状态在LOAD_OPTION
列的INFORMATION_SCHEMA。插件
表格
假设CSV
,黑洞
,存档
是内置的可插拔存储引擎,并且您希望服务器在启动时加载它们,但需要满足以下条件:服务器允许在CSV
初始化失败,必须要求黑洞
初始化成功,应该禁用存档
.要实现这一点,请在一个选项文件中使用以下几行:
[mysqld] csv=ON blackhole=FORCE archive=OFF
的——使
选项格式是plugin_name
--
.的plugin_name
=对——禁用
而且plugin_name
——跳过
选项格式的同义词plugin_name
--
.plugin_name
=下
如果一个插件被禁用,可以显式地使用从
或者是隐式的,因为它是启用的在
但初始化失败,服务器操作方面需要更改插件。例如,如果插件实现了存储引擎,那么存储引擎的现有表将无法访问,并且尝试为存储引擎创建新表将导致表使用默认的存储引擎,除非NO_ENGINE_SUBSTITUTION
启用SQL模式会导致发生错误。
禁用一个插件可能需要调整到其他选项。例如,如果您使用——skip-innodb
禁用InnoDB
,其他innodb_
在启动时可能也需要忽略选项。此外,由于xxx
InnoDB
是默认的存储引擎,它不能启动,除非您指定另一个可用的存储引擎——default_storage_engine
.您还必须设置——default_tmp_storage_engine
.
在运行时,卸载插件
语句禁用和卸载服务器已知的插件。语句卸载插件并将其从mysql.plugin
系统表,如果它在那里注册。由于这个原因,卸载插件
声明要求删除
特权的mysql.plugin
表格由于插件不再在表中注册,服务器在随后的重启过程中不会加载插件。
卸载插件
可以卸载插件,无论它是否加载在运行时安装插件
或者在启动时使用插件加载选项,遵循以下条件:
它不能卸载内置在服务器上的插件。可以将它们标识为具有库名的类
零
的输出中INFORMATION_SCHEMA。插件
或显示插件
.它无法卸载服务器启动时使用的插件
--
,防止插件在运行时卸载。这些可以从plugin_name
= FORCE_PLUS_PERMANENTLOAD_OPTION
列的INFORMATION_SCHEMA。插件
表格
要卸载当前在服务器启动时通过插件加载选项加载的插件,请使用这个过程。
删除的
my.cnf
将所有与插件相关的选项和系统变量文件化。如果任何插件系统变量被持久化到mysqld-auto.cnf
文件,删除它们使用重置持续
为了每一个人去除掉它。var_name
重新启动服务器。
插件通常是在启动时使用插件加载选项安装的
安装插件
在运行时,但不是同时进行。但是,删除插件选项my.cnf
文件可能不足以卸载它,如果在某些时候安装插件
也被使用过。如果插件仍然出现在输出中INFORMATION_SCHEMA。插件
或显示插件
,使用卸载插件
把它从mysql.plugin
表格然后重新启动服务器。