Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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';

省略PERSISTGLOBAL等同于指定GLOBAL

为任何变量在SET中指定PERSIST将立即执行SET PERSIST_ONLY,但是在更新mysql.component表之前。 如果SET PERSIST_ONLY失败,则服务器卸载所有已加载的新组件,而不将任何内容写入到mysql.component中。

SET子句仅接受正在安装组件的有效变量名称,并对所有无效名称 emit 错误消息。子查询、存储函数和聚合函数不能作为值表达式的一部分。如果您安装单个组件,不需要在变量名称前加上组件名称。

Note

使用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'.

为了避免这个问题,可以在同一个语句中安装所有组件,或者在安装依赖于它的组件之前安装该组件。

Note

对于密钥ring 组件,不要使用INSTALL COMPONENT。相反,使用 manifest 文件配置密钥ring 组件加载。见第8.4.4.2节,“Keyring Component Installation”