文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
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 節,「金鑰環元件安裝」