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

4.1 外掛程式類型

外掛程式 API 可讓您建立實作多種功能的外掛程式

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

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

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

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

注意

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

儲存引擎外掛程式

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

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

全文剖析器外掛程式

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

MySQL 也有一個字元型 n-gram 全文剖析器,支援中文、日文和韓文 (CJK),以及一個以單字為基礎的 MeCab 剖析器外掛程式,支援日文,可與 InnoDBMyISAM 資料表搭配使用。

對於全文處理,剖析表示根據定義哪些字元序列構成單字以及單字邊界位置的規則,從文字或查詢字串中擷取單字 (或在字元型 n-gram 剖析器的情況下為符記)。

當剖析以進行索引時,剖析器會將每個單字傳遞給伺服器,並將其新增至全文索引。當剖析查詢字串時,剖析器會將每個單字傳遞給伺服器,伺服器會累積這些單字以用於搜尋。

內建全文剖析器的剖析屬性描述於全文搜尋函式。這些屬性包含用於判斷如何從文字中擷取單字的規則。剖析器受到某些系統變數的影響,這些變數會導致較短或較長的單字被排除,以及會忽略常見單字的停止詞列表。如需詳細資訊,請參閱全文停止詞微調 MySQL 全文搜尋

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

  • 外掛程式可以取代內建剖析器。在此角色中,外掛程式會讀取要剖析的輸入,將其分割成單字,並將單字傳遞給伺服器 (以進行索引或符記累積)。n-gram 和 MeCab 剖析器會作為內建全文剖析器的替代方案運作。

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

  • 外掛程式可以與內建剖析器共同作用,作為其前端。在此角色中,外掛程式會從輸入中擷取文字,並將文字傳遞給剖析器,剖析器會使用其正常的剖析規則將文字分割成單字。此剖析受到 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 9.0 支援 MyISAMInnoDB 的全文檢索外掛程式。

常駐程式外掛程式

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

關於常駐程式外掛程式的更多資訊,請參閱章節 4.4.5,「寫入常駐程式外掛程式」

INFORMATION_SCHEMA 外掛程式

INFORMATION_SCHEMA 外掛程式可建立包含伺服器中繼資料的表格,這些表格會透過 INFORMATION_SCHEMA 資料庫公開給使用者。例如,InnoDB 使用 INFORMATION_SCHEMA 外掛程式來提供包含目前交易和鎖定資訊的表格。

關於 INFORMATION_SCHEMA 外掛程式的更多資訊,請參閱章節 4.4.6,「寫入 INFORMATION_SCHEMA 外掛程式」

半同步複寫外掛程式

MySQL 複寫預設為非同步。使用半同步複寫時,在來源端執行的提交會先封鎖,然後再返回執行交易的工作階段,直到至少有一個複本確認它已收到並記錄交易的事件。半同步複寫是透過互補的來源和用戶端外掛程式實作。請參閱半同步複寫

關於半同步複寫外掛程式的更多資訊,請參閱章節 4.4.7,「寫入半同步複寫外掛程式」

稽核外掛程式

MySQL 伺服器提供可插拔的稽核介面,可讓有興趣的各方報告伺服器操作的相關資訊。這些操作會發生稽核通知(雖然介面是一般的,並且可以修改伺服器以報告其他操作)

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

  • 將訊息寫入錯誤記錄

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

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

此介面使稽核外掛程式只能接收它們認為重要的事件類別中的操作通知,而忽略其他操作。此介面可將操作分類為事件類別,並進一步細分為每個類別中的事件子類別。

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

關於稽核外掛程式的更多資訊,請參閱章節 4.4.8,「寫入稽核外掛程式」

驗證外掛程式

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

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

關於驗證外掛程式的更多資訊,請參閱章節 4.4.9,「寫入驗證外掛程式」

密碼驗證外掛程式

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

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

通訊協定追蹤外掛程式

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

關於通訊協定追蹤外掛程式的更多資訊,請參閱章節 4.4.11,「寫入通訊協定追蹤外掛程式」

查詢重寫外掛程式

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

預先剖析的查詢重寫外掛程式具有以下特性

  • 外掛程式可以重寫傳送到伺服器之前,伺服器處理之前的 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,「寫入金鑰環外掛程式」