文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (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 命名,并指示实现该组件的库文件的基名,该文件位于由 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 节,“密钥环组件安装”