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
。
在 SET
中为任何变量指定 PERSIST
会在 INSTALL COMPONENT
加载组件后,但在更新 mysql.component
表之前,静默地执行 SET PERSIST_ONLY
。 如果 SET PERSIST_ONLY
失败,则服务器会卸载所有先前加载的新组件,而不会将任何内容持久化到 mysql.component
。
SET
子句只接受正在安装的组件的有效变量名,并为所有无效名称发出错误消息。 子查询、存储函数和聚合函数不允许作为值表达式的部分。 如果您安装单个组件,则无需在变量名前面加上组件名。
虽然使用 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 节,“密钥环组件安装”。