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';
组件使用 URN(统一资源名称)命名,URN 以 file://
开头,并指示实现组件的库文件的基本名称,该文件位于由plugin_ dir
系统变量指定的目录中。组件名称不包括平台依赖的文件名后缀,如 .so
或 .dll
。(这些命名细节可能会更改,因为组件名称解释是由服务执行的,并且组件基础设施使得可以将默认服务实现替换为 alternative 实现。)
INSTALL COMPONENT
允许在安装一个或多个组件时设置组件系统变量。SET
子句使您可以精确地指定变量值,避免了其他形式的赋值带来的不便和限制。具体来说,您还可以使用以下 alternatives 设置组件变量:
-
在服务器启动时使用命令行选项或选项文件,但这需要重新启动服务器。这些值直到安装组件后才生效。您可以在命令行上指定无效的变量名称而不触发错误。
-
动态地在服务器运行时通过
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
。
为任何变量在SET
中指定PERSIST
将立即执行SET PERSIST_ONLY
,但是在更新mysql.component
表之前。 如果SET PERSIST_ONLY
失败,则服务器卸载所有已加载的新组件,而不将任何内容写入到mysql.component
中。
SET
子句仅接受正在安装组件的有效变量名称,并对所有无效名称 emit 错误消息。子查询、存储函数和聚合函数不能作为值表达式的一部分。如果您安装单个组件,不需要在变量名称前加上组件名称。
使用SET
子句指定变量值与命令行类似——它立即可用于变量注册——但是在处理无效数值的布尔变量时有所不同。例如,如果您将布尔变量设置为11(component1.boolvar = 11
),您将看到以下行为:
-
SET
子句返回true -
命令行返回false(11既不是ON也不是1)
如果发生错误,语句将失败无效。例如,这可能会在组件名称错误、已安装的命名组件不存在或初始化失败时发生。
加载服务负责组件加载,该过程包括将已安装的组件添加到mysql.component
系统表中,该表作为注册表。随后服务器重启时,loader服务将在启动序列中加载mysql.component
中的任何组件,即使使用--skip-grant-tables
选项启动服务器。
如果组件依赖于注册表中不存在的服务,并且您尝试在没有安装提供该服务的组件的情况下安装该组件,错误将发生:
ERROR 3527 (HY000): Cannot satisfy dependency for service 'component_a'
required by component 'component_b'.
为了避免这个问题,可以在同一个语句中安装所有组件,或者在安装依赖于它的组件之前安装该组件。
对于密钥ring 组件,不要使用INSTALL COMPONENT
。相反,使用 manifest 文件配置密钥ring 组件加载。见第8.4.4.2节,“Keyring Component Installation”。