延伸 MySQL 8.4  /  MySQL 外掛程式 API  /  外掛程式類型

4.1 外掛程式類型

外掛程式 API 允許建立實作多種功能的外掛程式

以下章節提供這些外掛程式類型的概述。

可載入函式 (UDF) 外掛程式

可載入函式可以包含在元件或外掛程式庫檔案中,並安裝在伺服器上。

如需關於使用 MySQL 介面進行可載入函式的資訊,請參閱第 6.2 節,「新增可載入函式」。編譯和安裝可載入函式外掛程式的步驟說明於可載入函式編譯和安裝

注意

可載入函式先前稱為使用者定義函式 (UDF)。此術語有點用詞不當,因為使用者定義也可以適用於使用 SQL 撰寫的儲存函式,以及透過修改伺服器原始碼新增的原生函式。

儲存引擎外掛程式

MySQL 伺服器使用的可插入式儲存引擎架構,允許將儲存引擎撰寫為外掛程式,並載入到執行中的伺服器或從中卸載。如需此架構的說明,請參閱MySQL 儲存引擎架構概述

如需關於如何使用外掛程式 API 撰寫儲存引擎的資訊,請參閱MySQL 內部結構:撰寫自訂儲存引擎

全文剖析器外掛程式

MySQL 具有一個內建剖析器,預設用於全文作業(剖析要編入索引的文字,或剖析查詢字串以判斷要用於搜尋的詞彙)。內建全文剖析器支援 InnoDBMyISAM 資料表。

MySQL 也具有基於字元的 ngram 全文剖析器(支援中文、日文和韓文 (CJK)),以及基於單字的 MeCab 剖析器外掛程式(支援日文),可與 InnoDBMyISAM 資料表搭配使用。

對於全文處理,剖析表示根據定義哪些字元序列構成一個單字以及單字邊界在哪裡的規則,從文字或查詢字串中擷取單字(或在基於 n-gram 字元的剖析器中擷取語彙基元)。

當為了編製索引而剖析時,剖析器會將每個單字傳遞至伺服器,伺服器會將其新增至全文索引。當剖析查詢字串時,剖析器會將每個單字傳遞至伺服器,伺服器會累積單字以用於搜尋。

內建全文剖析器的剖析屬性說明於全文搜尋函式。這些屬性包括判斷如何從文字中擷取單字的規則。剖析器受到某些系統變數的影響,這些變數會導致較短或較長的單字被排除,以及受到識別要忽略的常用單字的停用字清單影響。如需更多資訊,請參閱全文停用字微調 MySQL 全文搜尋

外掛程式 API 允許您使用預設內建全文剖析器以外的全文剖析器。例如,如果您正在使用日文,您可以選擇使用 MeCab 全文剖析器。外掛程式 API 也允許您提供自己的全文剖析器,讓您可以控制剖析器的基本職責。剖析器外掛程式可以兩種角色運作

  • 此外掛程式可以取代內建剖析器。在此角色中,此外掛程式會讀取要剖析的輸入,將其分割為單字,並將單字傳遞至伺服器(用於索引或語彙基元累積)。ngram 和 MeCab 剖析器作為內建全文剖析器的替代方案運作。

    如果您需要使用與內建剖析器不同的規則來判斷如何將輸入分割為單字,您可以選擇提供自己的全文剖析器。例如,內建剖析器會將文字大小寫敏感視為由兩個單字大小寫敏感組成,而應用程式可能需要將文字視為一個單字。

  • 此外掛程式可以透過充當前端與內建剖析器一起運作。在此角色中,此外掛程式會從輸入中擷取文字,並將文字傳遞至剖析器,剖析器會使用其正常的剖析規則將文字分割為單字。此剖析受到 innodb_ft_xxxft_xxx 系統變數和停用字清單影響。

    以這種方式使用剖析器的一個原因是,您需要為 PDF 文件、XML 文件或 .doc 檔案等內容編製索引。內建剖析器不適用於這些類型的輸入,但外掛程式可以從這些輸入來源中提取文字並將其傳遞至內建剖析器。

剖析器外掛程式也可以在兩種角色中運作。也就是說,它可以從非純文字輸入中擷取文字(前端角色),也可以將文字剖析為單字(因此取代內建剖析器)。

全文外掛程式會以每個索引為基礎與全文索引相關聯。也就是說,當您最初安裝剖析器外掛程式時,不會導致將其用於任何全文作業。它只是變得可用。例如,全文剖析器外掛程式會變得可在建立個別 FULLTEXT 索引時於 WITH PARSER 子句中命名。若要在資料表建立時建立此類索引,請執行此動作

CREATE TABLE t
(
  doc CHAR(255),
  FULLTEXT INDEX (doc) WITH PARSER parser_name
) ENGINE=InnoDB;

或者,您可以在建立資料表後新增索引

ALTER TABLE t ADD FULLTEXT INDEX (doc) WITH PARSER parser_name;

將剖析器與索引相關聯的唯一 SQL 變更是 WITH PARSER 子句。搜尋的指定方式與先前相同,查詢不需要任何變更。

當您將剖析器外掛程式與 FULLTEXT 索引相關聯時,使用索引需要此外掛程式。如果剖析器外掛程式遭到捨棄,與其相關聯的任何索引都會變得無法使用。任何嘗試使用外掛程式不可用的資料表都會導致錯誤,但仍可使用DROP TABLE

如需關於全文外掛程式的更多資訊,請參閱第 4.4.4 節,「撰寫全文剖析器外掛程式」。MySQL 8.4 支援具有MyISAMInnoDB 的全文外掛程式。

常駐程式外掛程式

常駐程式外掛程式是一種簡單的外掛程式類型,用於應由伺服器執行但不與其通訊的程式碼。MySQL 發行版本包含一個範例常駐程式外掛程式,該外掛程式會將定期檢測訊號訊息寫入檔案。

如需關於常駐程式外掛程式的更多資訊,請參閱第 4.4.5 節,「撰寫常駐程式外掛程式」

INFORMATION_SCHEMA 外掛程式

INFORMATION_SCHEMA 外掛程式允許建立包含透過 INFORMATION_SCHEMA 資料庫向使用者公開的伺服器中繼資料的資料表。例如,InnoDB 使用 INFORMATION_SCHEMA 外掛程式來提供包含關於目前交易和鎖定的資訊的資料表。

如需關於 INFORMATION_SCHEMA 外掛程式的更多資訊,請參閱第 4.4.6 節,「撰寫 INFORMATION_SCHEMA 外掛程式」

半同步複寫外掛程式

MySQL 預設的複製方式為非同步。使用半同步複製時,來源端執行的 commit 操作會被封鎖,直到至少有一個副本確認已收到並記錄該交易的事件後,才會返回執行交易的 session。半同步複製透過互補的來源和客戶端外掛程式來實現。請參閱半同步複製

有關半同步複製外掛程式的更多資訊,請參閱第 4.4.7 節,「撰寫半同步複製外掛程式」

稽核外掛程式

MySQL 伺服器提供一個可插拔的稽核介面,可將伺服器操作的相關資訊報告給相關方。以下操作會發生稽核通知(儘管該介面是一般的,且伺服器可以修改以報告其他操作)

  • 將訊息寫入一般查詢日誌(如果已啟用日誌)

  • 將訊息寫入錯誤日誌

  • 將查詢結果傳送至客戶端

稽核外掛程式可以向稽核介面註冊,以接收伺服器操作的相關通知。當伺服器內發生可稽核的事件時,伺服器會判斷是否需要通知。對於每個註冊的稽核外掛程式,伺服器會根據外掛程式感興趣的事件類別檢查事件,如果匹配,則將事件傳遞給外掛程式。

此介面使稽核外掛程式能夠僅接收它們認為重要的事件類別中的操作通知,並忽略其他操作。該介面提供將操作分類為事件類別,並在每個類別內進一步劃分為事件子類別的功能。

當稽核外掛程式收到可稽核事件的通知時,它會收到指向目前 THD 結構的指標和指向包含事件相關資訊的結構的指標。外掛程式可以檢查事件並執行任何適當的稽核動作。例如,外掛程式可以查看哪個語句產生結果集或被記錄、結果中的行數、操作的目前使用者是誰,或失敗操作的錯誤代碼。

有關稽核外掛程式的更多資訊,請參閱第 4.4.8 節,「撰寫稽核外掛程式」

身份驗證外掛程式

MySQL 支援可插拔的身份驗證。身份驗證外掛程式存在於伺服器端和客戶端。伺服器端的外掛程式會實作身份驗證方法,供客戶端在連線至伺服器時使用。客戶端的外掛程式會與伺服器端的外掛程式通訊,以提供其所需的身份驗證資訊。客戶端的外掛程式可能會與使用者互動,執行諸如徵求密碼或其他要傳送至伺服器的身份驗證憑證之類的工作。請參閱可插拔的身份驗證

可插拔的身份驗證還支援 Proxy 使用者功能,其中一個使用者會採用另一個使用者的身份。伺服器端的身份驗證外掛程式可以將連線的使用者應具有身份的使用者名稱傳回給伺服器。請參閱Proxy 使用者

有關身份驗證外掛程式的更多資訊,請參閱第 4.4.9 節,「撰寫身份驗證外掛程式」

密碼驗證外掛程式

MySQL 伺服器提供一個用於撰寫測試密碼的外掛程式的介面。這類外掛程式會實作兩種功能

有關撰寫這類外掛程式的資訊,請參閱第 4.4.10 節,「撰寫密碼驗證外掛程式」

協定追蹤外掛程式

MySQL 支援使用協定追蹤外掛程式:客戶端外掛程式,用於實作使用客戶端/伺服器協定發生的客戶端與伺服器之間通訊的追蹤。

有關協定追蹤外掛程式的更多資訊,請參閱第 4.4.11 節,「撰寫協定追蹤外掛程式」

查詢重寫外掛程式

MySQL 伺服器支援查詢重寫外掛程式,這些外掛程式可以檢查伺服器接收到的語句,並在伺服器執行之前可能修改這些語句。查詢重寫外掛程式會在伺服器剖析語句之前或之後接收語句。

剖析前查詢重寫外掛程式具有下列特性

  • 外掛程式可讓您在伺服器處理 SQL 語句之前重寫傳入伺服器的 SQL 語句。

  • 外掛程式會接收語句字串,並可能會傳回不同的字串。

剖析後查詢重寫外掛程式具有下列特性

  • 外掛程式可讓您根據剖析樹重寫語句。

  • 伺服器會剖析每個語句,並將其剖析樹傳遞給外掛程式,外掛程式可以周遊該樹。外掛程式可以將原始樹傳回伺服器以進行進一步處理,或建構不同的樹並改為傳回該樹。

  • 外掛程式可以使用 mysql_parser 外掛程式服務來達到這些目的

    • 啟動語句摘要計算,並取得語句的正規化版本,無論效能綱要是否產生摘要。

    • 周遊剖析樹。

    • 剖析語句。如果外掛程式從剖析樹建構新的語句字串,這會很有用。外掛程式可以讓伺服器剖析字串以產生新的樹,然後將該樹作為重寫語句的表示傳回。

有關外掛程式服務的更多資訊,請參閱MySQL 外掛程式服務

剖析前和剖析後查詢重寫外掛程式具有下列共同特性

  • 如果已安裝查詢重寫外掛程式,則--log-raw選項會如下影響語句記錄

    • 若沒有--log-raw,伺服器會記錄查詢重寫外掛程式傳回的語句。這可能與接收到的語句不同。

    • 若有--log-raw,伺服器會記錄接收到的原始語句。

  • 如果外掛程式重寫語句,伺服器會根據重寫的語句(而非原始語句)決定是否將其寫入二進位日誌(並因此寫入任何副本)。如果外掛程式僅將SELECT語句重寫為SELECT語句,則對二進位記錄沒有任何影響,因為伺服器不會將SELECT語句寫入二進位日誌。

  • 如果外掛程式重寫語句,伺服器會產生一個Note訊息,客戶端可以使用SHOW WARNINGS來檢視。訊息格式如下,其中stmt_in是原始語句,而stmt_out是重寫的語句

    Query 'stmt_in' rewritten to 'stmt_out' by a query rewrite plugin

MySQL 發行版本包含名為Rewriter的剖析後查詢重寫外掛程式。這個外掛程式是基於規則的。您可以將列新增至其規則表格,以導致SELECT語句重寫。有關更多資訊,請參閱Rewriter 查詢重寫外掛程式

查詢重寫外掛程式使用與稽核外掛程式相同的 API。有關稽核外掛程式的更多資訊,請參閱第 4.4.8 節,「撰寫稽核外掛程式」

金鑰環外掛程式

MySQL 伺服器支援金鑰環外掛程式,可讓內部伺服器元件和外掛程式安全地儲存敏感資訊以供日後擷取。

所有 MySQL 發行版本都包含名為keyring_file的金鑰環外掛程式。MySQL Enterprise Edition 發行版本包含額外的金鑰環外掛程式。請參閱MySQL 金鑰環

有關金鑰環外掛程式的更多資訊,請參閱第 4.4.12 節,「撰寫金鑰環外掛程式」