暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

5.6.1安装和卸载插件

原创 由迪 2020-08-17
1576

必须先将服务器插件加载到服务器中,然后才能使用它们。MySQL支持在服务器启动和运行时加载插件。也可以在启动时控制已加载插件的激活状态,并在运行时卸载它们。

加载插件时,可从INFORMATION_SCHEMA.PLUGINS表和SHOW PLUGINS语句中获得有关它的信息。请参见 第5.6.2节“获取服务器插件信息”

安装插件

在使用服务器插件之前,必须使用以下方法之一安装它。在说明中, *plugin_name*表示插件的名称,例如innodbcsvvalidate_password

内置插件

服务器会自动识别一个内置插件。通常,服务器在启动时启用插件。一些内置插件允许使用 选项更改此设置 。 --*plugin_name*[=*activation_state*]

在mysql.plugin系统表中注册的插件

系统数据库中 的pluginmysql用作插件的注册表(内置插件除外,不需要注册)。在启动时,服务器将加载表中列出的每个插件。通常,对于从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-loading选项的值是 和值的分号分隔列表 。每个 是要加载的插件的名称,也是包含插件代码的库文件的名称。如果命名的插件库没有任何前面的插件名称,则服务器会将所有插件加载到该库中。服务器在系统变量命名的目录中查找插件库文件 。 name=plugin_libraryplugin_libraryname**plugin_libraryplugin_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=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需要INSERTmysql.plugin表的 特权 。

插件库文件的基本名称取决于您的平台。通用后缀.so用于Unix和类Unix系统,.dll用于Windows。

示例:该--plugin-load选项在服务器启动时安装插件。要从名为myplugin的插件库文件安装名为 的插件 somepluglib.so,请在my.cnf文件中使用以下几行 :

[mysqld] plugin-load=myplugin=somepluglib.so

在这种情况下,插件未在中注册 mysql.plugin。在不使用该--plugin-load选项的情况下重新启动服务器会导致在启动时无法加载该插件。

或者,该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选项命名 或已在mysql.plugin表中注册),则服务器将默认加载并启用该插件。它可以控制激活状态对于这样的插件使用 启动选项,其中是插件的影响名称,如 ,,或 。与其他选项一样,破折号和下划线在选项名称中可以互换。同样,激活状态值也不区分大小写。例如,和 是等效的。 --*plugin_name*[=*activation_state*]plugin_nameinnodb``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_OPTIONINFORMATION_SCHEMA.PLUGINS表的列 中可见 。

假设CSVBLACKHOLE以及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语句需要DELETEmysql.plugin表的特权。如果插件不再在表中注册,则服务器不会自动加载插件以供后续重新启动。

UNINSTALL PLUGIN可以在INSTALL PLUGIN满足以下条件的情况下卸载插件,而不管它是在运行时使用插件加载选项加载时 还是在使用插件加载选项启动时加载的:

  • 它无法卸载服务器内置的插件。可以将它们标识为NULLINFORMATION_SCHEMA.PLUGINS或 输出 中具有库名的库 SHOW PLUGINS
  • 它无法卸载以其启动服务器的 插件,从而阻止了在运行时卸载插件。这些可以从 表的列中识别出来。 --*plugin_name*=FORCE_PLUS_PERMANENT``LOAD_OPTIONINFORMATION_SCHEMA.PLUGINS

要卸载当前在服务器启动时使用plugin-loading选项加载的插件,请使用此过程。

  1. my.cnf文件中删除与插件相关的所有选项和系统变量。如果任何插件系统变量都mysqld-auto.cnf保留在文件中,请使用删除它们,并使用每个变量 将其 删除。 RESET PERSIST *var_name*
  2. 重新启动服务器。
  3. 通常,在启动时或INSTALL PLUGIN在运行时使用插件加载选项来安装插件,但不能同时使用两者。但是,从my.cnf 文件中删除插件的选项可能不足以在某些时候将其卸载 INSTALL PLUGIN。如果插件仍出现在INFORMATION_SCHEMA.PLUGINS或 的输出中SHOW PLUGINS,请使用 将该插件 UNINSTALL PLUGINmysql.plugin表格中删除。然后再次重新启动服务器。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论