服务器插件必须先加载到服务器才能使用。MySQL 支持在服务器启动和运行时加载插件。还可以在启动时控制加载插件的激活状态,并在运行时卸载它们。
加载插件时,有关它的信息可用,如第 5.6.2 节“获取服务器插件信息”中所述。
在可以使用服务器插件之前,必须使用以下方法之一安装它。在描述中,
plugin_name
代表插件名称,例如innodb
、csv
或
validate_password
。
内置插件
服务器自动识别内置插件。默认情况下,服务器在启动时启用插件。一些内置插件允许使用
选项更改它。
--
plugin_name
[=activation_state
]
在 mysql.plugin 系统表中注册的插件
系统表用作插件的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
和
值列表。每个都是包含插件代码的库文件的名称,每个
都是要加载的插件的名称。如果一个插件库的命名没有任何前面的插件名称,服务器将加载库中的所有插件。使用前面的插件名称,服务器仅从库中加载指定的插件。服务器在系统变量
命名的目录中查找插件库文件
。name
=
plugin_library
plugin_library
name
plugin_dir
插件加载选项不会在
mysql.plugin
表中注册任何插件。对于随后的重新启动,服务器仅在
--plugin-load
、
--plugin-load-add
或
--early-plugin-load
再次给出时再次加载插件。也就是说,该选项会产生一个一次性的插件安装操作,该操作持续存在于单个服务器调用中。
--plugin-load
,
--plugin-load-add
, 和
--early-plugin-load
enable plugins 即使在
--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 语句安装的插件
位于插件库文件中的插件可以在运行时使用该INSTALL PLUGIN
语句加载。该语句还在
mysql.plugin
表中注册插件,使服务器在随后的重新启动时加载它。为此,
INSTALL PLUGIN
需要表的
INSERT
权限
mysql.plugin
。
插件库文件基本名称取决于您的平台。通用后缀.so
用于 Unix 和类 Unix 系统,.dll
用于 Windows。
示例:该--plugin-load-add
选项在服务器启动时安装插件。要安装myplugin
从名为 的插件库文件命名的插件,请somepluglib.so
在文件中使用以下行
my.cnf
:
[mysqld]
plugin-load-add=myplugin=somepluglib.so
在这种情况下,插件未在
mysql.plugin
. 在没有该选项的情况下重新启动服务器--plugin-load-add
会导致在启动时不加载插件。
或者,该INSTALL PLUGIN
语句使服务器在运行时从库文件加载插件代码:
INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
INSTALL PLUGIN
还会导致
“永久”插件注册:插件列在mysql.plugin
表中以确保服务器在随后的重新启动时加载它。
许多插件可以在服务器启动时或运行时加载。但是,如果插件设计为必须在服务器启动期间加载和初始化,则尝试在运行时加载它INSTALL
PLUGIN
会产生错误:
mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
ERROR 1721 (HY000): Plugin 'myplugin' is marked as not dynamically
installable. You have to stop the server to install it.
在这种情况下,您必须使用
--plugin-load
、
--plugin-load-add
或
--early-plugin-load
。
如果插件在表中同时使用 、 或 选项命名
--plugin-load
(
--plugin-load-add
作为
--early-plugin-load
较早INSTALL
PLUGIN
语句的结果)
mysql.plugin
,则服务器启动但将这些消息写入错误日志:
[ERROR] Function 'plugin_name' already exists
[Warning] Couldn't load plugin named 'plugin_name'
with soname 'plugin_object_file'.
如果服务器在启动时知道插件(例如,因为插件使用
--plugin-load-add
选项命名或在mysql.plugin
表中注册),则服务器默认加载并启用该插件。可以使用
启动选项控制此类插件的激活状态,其中是要影响的插件名称,例如
、或
。与其他选项一样,破折号和下划线在选项名称中可以互换。此外,激活状态值不区分大小写。例如,和
是等价的。
--
plugin_name
[=activation_state
]plugin_name
innodb
csv
validate_password
--my_plugin=ON
--my-plugin=on
--
plugin_name
=OFF告诉服务器禁用插件。这对于某些内置插件可能是不可能的,例如
mysql_native_password
.--
plugin_name
[=ON]告诉服务器启用插件。(将选项指定为 没有值具有相同的效果。)如果插件无法初始化,则服务器将在禁用插件的情况下运行。
--
plugin_name
--
plugin_name
=FORCE告诉服务器启用插件,但如果插件初始化失败,则服务器不会启动。换句话说,此选项强制服务器在启用或根本不启用插件的情况下运行。
--
plugin_name
=FORCE_PLUS_PERMANENT喜欢
FORCE
,但另外防止插件在运行时被卸载。如果用户尝试使用 执行此操作UNINSTALL PLUGIN
,则会发生错误。
LOAD_OPTION
插件激活状态在表格的列
中可见
INFORMATION_SCHEMA.PLUGINS
。
假设CSV
、
BLACKHOLE
和ARCHIVE
是内置的可插拔存储引擎,并且您希望服务器在启动时加载它们,但要满足以下条件:如果CSV
初始化失败,则允许服务器运行,必须要求BLACKHOLE
初始化成功,并且应该禁用
ARCHIVE
。为此,请在选项文件中使用这些行:
[mysqld]
csv=ON
blackhole=FORCE
archive=OFF
选项格式
是
.
和
选项
格式是
.
--enable-
plugin_name
--
plugin_name
=ON--disable-
plugin_name
--skip-
plugin_name
--
plugin_name
=OFF
如果插件被禁用,无论是显式禁用
OFF
还是隐式启用
ON
但未能初始化,服务器操作的各个方面都需要更改插件。例如,如果插件实现了存储引擎,则存储引擎的现有表变得不可访问,并尝试为存储引擎创建新表导致表使用默认存储引擎,除非
NO_ENGINE_SUBSTITUTION
启用 SQL 模式导致错误反而发生。
禁用插件可能需要调整其他选项。例如,如果您使用
--skip-innodb
disable启动服务器,则启动时
可能还需要省略InnoDB
其他
选项。另外,因为是默认的存储引擎,除非你指定另一个可用的存储引擎,否则它无法启动
。您还必须设置
.
innodb_
xxx
InnoDB
--default_storage_engine
--default_tmp_storage_engine
在运行时,该UNINSTALL PLUGIN
语句禁用并卸载服务器已知的插件。该语句卸载插件并将其从
mysql.plugin
系统表中删除(如果它已在系统表中注册)。因此,
UNINSTALL PLUGIN
语句需要表的DELETE
特权mysql.plugin
。由于插件不再在表中注册,服务器在随后的重新启动期间不会加载插件。
UNINSTALL PLUGIN
可以卸载插件,无论它是在运行时加载
INSTALL PLUGIN
还是在启动时使用插件加载选项加载,但要满足以下条件:
它无法卸载服务器内置的插件。这些可以被识别为那些 在或
NULL
的输出 中具有库名称的库。INFORMATION_SCHEMA.PLUGINS
SHOW PLUGINS
它无法卸载服务器以 启动的 插件,这会阻止在运行时卸载插件。这些可以从表的列中识别出来 。
--
plugin_name
=FORCE_PLUS_PERMANENTLOAD_OPTION
INFORMATION_SCHEMA.PLUGINS
要卸载当前在服务器启动时使用插件加载选项加载的插件,请使用此过程。
从
my.cnf
文件中删除与插件相关的任何选项和系统变量。如果任何插件系统变量被保存到mysqld-auto.cnf
文件中,请使用 for each one 将其删除。RESET PERSIST
var_name
重新启动服务器。
插件通常在启动时或在运行时使用插件加载选项安装
INSTALL PLUGIN
,但不能同时使用。但是,从my.cnf
文件中删除插件的选项可能不足以卸载它,如果在某些时候INSTALL PLUGIN
也被使用过的话。如果插件仍然出现在INFORMATION_SCHEMA.PLUGINS
或 的输出中SHOW PLUGINS
,请使用UNINSTALL PLUGIN
将其从mysql.plugin
表中删除。然后再次重启服务器。