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';
省略 PERSIST
或 GLOBAL
等同于指定 GLOBAL
。
指定 PERSIST
对于任何变量在 SET
中静默执行 SET PERSIST_ONLY
,紧接着 INSTALL COMPONENT
加载组件,但在更新 mysql.component
表之前。如果 SET PERSIST_ONLY
失败,那么服务器将卸载所有先前加载的新组件,而不持久化任何内容到 mysql.component
。
SET
子句仅接受正在安装的组件的有效变量名称,并为所有无效名称发出错误消息。子查询、存储函数和聚合函数不允许作为值表达式的一部分。如果您安装单个组件,那么不需要在变量名前缀组件名称。
使用 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'.
为了避免这个问题,可以在同一语句中安装所有组件,或者在安装依赖项组件后安装依赖组件。
对于密钥环组件,不要使用 INSTALL COMPONENT
。相反,使用清单文件配置密钥环组件加载。请参阅 第 8.4.4.2 节,“密钥环组件安装”。