文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  安裝和解除安裝外掛程式

7.6.1 安裝和解除安裝外掛程式

伺服器外掛程式必須先載入伺服器,才能使用。MySQL 支援在伺服器啟動時和執行期間載入外掛程式。也可以在啟動時控制載入的外掛程式的啟用狀態,並在執行期間解除載入它們。

外掛程式載入後,有關它的資訊會如第 7.6.2 節,「取得伺服器外掛程式資訊」所述。

安裝外掛程式

伺服器外掛程式必須先使用下列其中一種方法安裝,才能使用。在說明中,plugin_name 代表外掛程式名稱,例如 innodbcsvvalidate_password

內建外掛程式

內建外掛程式會由伺服器自動識別。預設情況下,伺服器會在啟動時啟用外掛程式。某些內建外掛程式允許使用 --plugin_name[=activation_state] 選項變更此行為。

在 mysql.plugin 系統表格中註冊的外掛程式

mysql.plugin 系統表格用作外掛程式的註冊表(內建外掛程式除外,不需要註冊)。在正常啟動順序期間,伺服器會載入表格中註冊的外掛程式。預設情況下,對於從 mysql.plugin 表格載入的外掛程式,伺服器也會啟用該外掛程式。這可以使用 --plugin_name[=activation_state] 選項變更。

如果伺服器使用 --skip-grant-tables 選項啟動,則不會載入 mysql.plugin 表格中註冊的外掛程式,並且無法使用。

使用命令列選項命名的外掛程式

可以使用 --plugin-load--plugin-load-add--early-plugin-load 選項在伺服器啟動時載入位於外掛程式程式庫檔案中的外掛程式。通常,對於在啟動時載入的外掛程式,伺服器也會啟用該外掛程式。這可以使用 --plugin_name[=activation_state] 選項變更。

--plugin-load--plugin-load-add 選項會在伺服器啟動順序期間,在內建外掛程式和儲存引擎初始化之後載入外掛程式。--early-plugin-load 選項用於載入必須在內建外掛程式和儲存引擎初始化之前可用的外掛程式。

每個外掛程式載入選項的值是以分號分隔的 plugin_libraryname=plugin_library 值清單。每個 plugin_library 都是包含外掛程式程式碼的程式庫檔案名稱,而每個 name 都是要載入的外掛程式的名稱。如果外掛程式程式庫的名稱沒有任何前導外掛程式名稱,伺服器會載入程式庫中的所有外掛程式。如果具有前導外掛程式名稱,伺服器只會從程式庫載入命名的外掛程式。伺服器會在 plugin_dir 系統變數命名的目錄中尋找外掛程式程式庫檔案。

外掛程式載入選項不會在 mysql.plugin 資料表中註冊任何外掛程式。對於後續重新啟動,伺服器僅在再次提供 --plugin-load--plugin-load-add--early-plugin-load 時,才會再次載入外掛程式。也就是說,此選項會產生一次性的外掛程式安裝操作,該操作僅在單次伺服器調用中持續存在。

--plugin-load--plugin-load-add--early-plugin-load 可讓外掛程式在提供 --skip-grant-tables 時也能載入(這會導致伺服器忽略 mysql.plugin 資料表)。--plugin-load--plugin-load-add--early-plugin-load 也可讓無法在執行時載入的外掛程式在啟動時載入。

--plugin-load-add 選項補充了 --plugin-load 選項

例如,這些選項

--plugin-load=x --plugin-load-add=y

與這些選項等效

--plugin-load-add=x --plugin-load-add=y

也與此選項等效

--plugin-load="x;y"

但這些選項

--plugin-load-add=y --plugin-load=x

與此選項等效

--plugin-load=x
使用 INSTALL PLUGIN 陳述式安裝的外掛程式

可以使用 INSTALL PLUGIN 陳述式在執行時載入外掛程式程式庫檔案中的外掛程式。此陳述式也會在 mysql.plugin 資料表中註冊外掛程式,以使伺服器在後續重新啟動時載入它。因此,INSTALL PLUGIN 需要 mysql.plugin 資料表的 INSERT 權限。

外掛程式程式庫檔案基本名稱取決於您的平台。常見的後綴名是 Unix 和類似 Unix 系統的 .so,以及 Windows 的 .dll

範例:--plugin-load-add 選項會在伺服器啟動時安裝外掛程式。若要從名為 somepluglib.so 的外掛程式程式庫檔案安裝名為 myplugin 的外掛程式,請在 my.cnf 檔案中使用以下幾行

[mysqld]
plugin-load-add=myplugin=somepluglib.so

在這種情況下,外掛程式不會在 mysql.plugin 中註冊。重新啟動伺服器而不使用 --plugin-load-add 選項會導致外掛程式在啟動時未載入。

或者,INSTALL PLUGIN 陳述式會導致伺服器在執行時從程式庫檔案載入外掛程式碼

INSTALL PLUGIN myplugin SONAME 'somepluglib.so';

INSTALL PLUGIN 也會導致 永久 外掛程式註冊:外掛程式會列在 mysql.plugin 資料表中,以確保伺服器在後續重新啟動時載入它。

許多外掛程式可以在伺服器啟動時或執行時載入。但是,如果外掛程式的設計使其必須在伺服器啟動期間載入和初始化,則嘗試使用 INSTALL PLUGIN 在執行時載入它會產生錯誤

mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
ERROR 1721 (HY000): Plugin 'myplugin' is marked as not dynamically
installable. You have to stop the server to install it.

在這種情況下,您必須使用 --plugin-load--plugin-load-add--early-plugin-load

如果外掛程式同時使用 --plugin-load--plugin-load-add--early-plugin-load 選項,以及(由於先前的 INSTALL PLUGIN 陳述式)在 mysql.plugin 資料表中命名,伺服器會啟動,但會將這些訊息寫入錯誤記錄

[ERROR] Function 'plugin_name' already exists
[Warning] Couldn't load plugin named 'plugin_name'
with soname 'plugin_object_file'.

控制外掛程式的啟動狀態

如果伺服器在啟動時知道某個外掛程式(例如,因為該外掛程式是使用 --plugin-load-add 選項命名,或是在 mysql.plugin 資料表中註冊),則伺服器預設會載入並啟用該外掛程式。可以使用 --plugin_name[=activation_state] 啟動選項來控制此類外掛程式的啟動狀態,其中 plugin_name 是要影響的外掛程式名稱,例如 innodbcsvvalidate_password。與其他選項一樣,選項名稱中的破折號和底線可互換。此外,啟動狀態值不區分大小寫。例如,--my_plugin=ON--my-plugin=on 是等效的。

  • --plugin_name=OFF

    告知伺服器停用外掛程式。

  • --plugin_name[=ON]

    告知伺服器啟用外掛程式。(將選項指定為沒有值的 --plugin_name 具有相同的效果。)如果外掛程式無法初始化,伺服器會在外掛程式停用的情況下執行。

  • --plugin_name=FORCE

    告知伺服器啟用外掛程式,但如果外掛程式初始化失敗,則伺服器不會啟動。換句話說,此選項強制伺服器在外掛程式已啟用的情況下執行,否則根本不執行。

  • --plugin_name=FORCE_PLUS_PERMANENT

    FORCE 類似,但此外還會防止外掛程式在執行時被卸載。如果使用者嘗試使用 UNINSTALL PLUGIN 執行此操作,則會發生錯誤。

外掛程式的啟動狀態會顯示在 Information Schema PLUGINS 資料表的 LOAD_OPTION 資料行中。

假設 CSVBLACKHOLEARCHIVE 是內建的可插拔儲存引擎,並且您希望伺服器在啟動時載入它們,但須符合以下條件:如果 CSV 初始化失敗,則允許伺服器執行,必須要求 BLACKHOLE 初始化成功,並且應停用 ARCHIVE。若要達成此目的,請在選項檔案中使用以下幾行

[mysqld]
csv=ON
blackhole=FORCE
archive=OFF

--enable-plugin_name 選項格式是 --plugin_name=ON 的同義詞。--disable-plugin_name--skip-plugin_name 選項格式是 --plugin_name=OFF 的同義詞。

如果停用外掛程式,無論是使用 OFF 明確停用,還是因為使用 ON 啟用但無法初始化而隱含停用,則需要外掛程式的伺服器運作方面會發生變更。例如,如果外掛程式實作儲存引擎,則該儲存引擎的現有資料表將變得無法存取,並且嘗試為儲存引擎建立新資料表會導致使用預設儲存引擎的資料表,除非啟用 NO_ENGINE_SUBSTITUTION SQL 模式,否則會導致發生錯誤。

停用外掛程式可能需要調整其他選項。

卸載外掛程式

在執行階段,UNINSTALL PLUGIN 陳述式會停用並解除安裝伺服器已知的外掛程式。此陳述式會卸載外掛程式,並將其從 mysql.plugin 系統表格中移除(如果已註冊在此表格中)。因此,UNINSTALL PLUGIN 陳述式需要對 mysql.plugin 表格具有 DELETE 權限。由於外掛程式不再註冊於表格中,伺服器在後續重新啟動時不會載入該外掛程式。

無論外掛程式是在執行階段使用 INSTALL PLUGIN 載入,還是在啟動時使用外掛程式載入選項載入,UNINSTALL PLUGIN 都可以卸載外掛程式,但須符合以下條件:

  • 它無法卸載內建於伺服器的外掛程式。這些外掛程式可識別為資訊綱要 PLUGINS 表格或 SHOW PLUGINS 的輸出中,其程式庫名稱為 NULL 的外掛程式。

  • 它無法卸載伺服器啟動時使用 --plugin_name=FORCE_PLUS_PERMANENT 的外掛程式,這會防止在執行階段卸載外掛程式。這些外掛程式可以從 PLUGINS 表格的 LOAD_OPTION 欄位中識別。

若要解除安裝目前在伺服器啟動時使用外掛程式載入選項載入的外掛程式,請使用此程序。

  1. my.cnf 檔案中移除與外掛程式相關的所有選項和系統變數。如果任何外掛程式系統變數已永久保留到 mysqld-auto.cnf 檔案中,請使用 RESET PERSIST var_name 移除每個變數。

  2. 重新啟動伺服器。

  3. 外掛程式通常使用啟動時的外掛程式載入選項或執行階段的 INSTALL PLUGIN 安裝,但不會同時使用兩者。但是,如果曾經使用過 INSTALL PLUGIN,則從 my.cnf 檔案中移除外掛程式的選項可能不足以解除安裝外掛程式。如果外掛程式仍然出現在 PLUGINSSHOW PLUGINS 的輸出中,請使用 UNINSTALL PLUGINmysql.plugin 表格中移除它。然後再次重新啟動伺服器。

外掛程式和可載入函數

外掛程式在安裝時也可能會自動安裝相關的可載入函數。如果是這樣,外掛程式在解除安裝時也會自動解除安裝這些函數。