文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9MB
PDF (A4) - 40.0MB
手册页 (TGZ) - 258.5KB
手册页 (Zip) - 365.5KB
信息 (Gzip) - 4.0MB
信息 (Zip) - 4.0MB


15.7.4.3 INSTALL COMPONENT 语句

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 命名,该 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

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 节“密钥环组件安装”