Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

15.7.4.3 安装组件语句

INSTALL COMPONENT component_name  [, component_name ...
     [SET variable = expr [, variable = expr] ...] 
  
  variable: {
    {GLOBAL | @@GLOBAL.} [component_prefix.]system_var_name
  | {PERSIST | @@PERSIST.} [component_prefix.]system_var_name
}

该语句安装一个或多个组件,这些组件将立即生效。组件提供了服务器和其他组件可用的服务;见 第 7.5 节,“MySQL 组件”INSTALL COMPONENT 需要 mysql.component 系统表的 INSERT 权限,因为它在该表中添加一行以注册组件。

示例:

INSTALL COMPONENT 'file://component1', 'file://component2';

组件使用以 file:// 开头的 URN 命名,指示实现组件的库文件的基本名称,该文件位于由 plugin_dir 系统变量命名的目录中。组件名称不包括平台相关的文件名后缀,如 .so.dll。(这些命名细节可能会更改,因为组件名称解释本身是由服务执行的,并且组件基础结构使得可以用替代实现来替换默认服务实现。)

INSTALL COMPONENT 允许在安装一个或多个组件时设置组件系统变量的值。 SET 子句使您可以精确地指定变量值,而不需要其他形式的赋值。具体来说,您还可以使用以下替代方法设置组件变量:

  • 在服务器启动时使用命令行选项或选项文件,但这样做需要服务器重新启动。这些值直到您安装组件时才生效。在命令行上指定组件的无效变量名不会触发错误。

  • 在服务器运行时使用 SET 语句动态修改服务器的操作,而不需要停止和重新启动服务器。设置只读变量是不允许的。

可选的 SET 子句仅应用于 INSTALL COMPONENT 语句中指定的组件,而不是所有后续安装的该组件。SET GLOBAL|PERSIST 适用于所有类型的变量,包括只读变量,不需要重新启动服务器。使用 INSTALL COMPONENT 设置的组件系统变量优先于来自命令行或选项文件的任何冲突值。

示例:

INSTALL COMPONENT 'file://component1', 'file://component2' 
    SET GLOBAL component1.var1 = 12 + 3, PERSIST component2.var2 = 'strings';

省略 PERSISTGLOBAL 等同于指定 GLOBAL

指定 PERSIST 对于任何变量在 SET 中静默执行 SET PERSIST_ONLY,紧接着 INSTALL COMPONENT 加载组件,但在更新 mysql.component 表之前。如果 SET PERSIST_ONLY 失败,那么服务器将卸载所有先前加载的新组件,而不持久化任何内容到 mysql.component

SET 子句仅接受正在安装的组件的有效变量名称,并为所有无效名称发出错误消息。子查询、存储函数和聚合函数不允许作为值表达式的一部分。如果您安装单个组件,那么不需要在变量名前缀组件名称。

Note

使用 SET 子句指定变量值与命令行相似,但是在处理无效数字值时有所不同。例如,如果您将布尔变量设置为 11 (component1.boolvar = 11),您将看到以下行为:

  • SET 子句产生 true

  • 命令行产生 false(11 既不是 ON 也不是 1)

如果发生任何错误,该语句将失败且不产生任何效果。例如,这可能发生在组件名称错误、命名组件不存在或已经安装、或组件初始化失败的情况下。

加载器服务处理组件加载,包括将已安装的组件添加到 mysql.component 系统表中,该表充当注册表。 在后续的服务器重新启动时,任何列在 mysql.component 中的组件都将由加载器服务在启动序列中加载。 即使服务器以 --skip-grant-tables 选项启动也是如此。

如果组件依赖于注册表中不存在的服务,并尝试在没有安装依赖项的组件的情况下安装该组件,将发生错误:

ERROR 3527 (HY000): Cannot satisfy dependency for service 'component_a'
required by component 'component_b'.

为了避免这个问题,可以在同一语句中安装所有组件,或者在安装依赖项组件后安装依赖组件。

Note

对于密钥环组件,不要使用 INSTALL COMPONENT。相反,使用清单文件配置密钥环组件加载。请参阅 第 8.4.4.2 节,“密钥环组件安装”