伺服器外掛程式必須先載入到伺服器中才能使用。MySQL 支援在伺服器啟動時和執行時載入外掛程式。也可以控制已載入外掛程式在啟動時的啟用狀態,以及在執行時卸載它們。
當外掛程式載入時,有關它的資訊會如第 7.6.2 節,「取得伺服器外掛程式資訊」中所述提供。
在可以使用伺服器外掛程式之前,必須使用以下其中一種方法安裝它。在說明中,plugin_name
代表外掛程式名稱,例如 innodb
、csv
或 validate_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_library
和 name
=
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
的實例都會重置在啟動時載入的外掛程式集合,而--plugin-load-add
則會將一個或多個外掛程式添加到要載入的外掛程式集合中,而不會重置目前的集合。因此,如果指定了多個--plugin-load
實例,則只會套用最後一個。如果有多個--plugin-load-add
實例,則會全部套用。引數格式與
--plugin-load
相同,但可以使用多個--plugin-load-add
實例,以避免將大量外掛程式指定為單一、冗長且難以處理的--plugin-load
引數。即使沒有
--plugin-load
,也可以使用--plugin-load-add
,但是任何出現在--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
是要影響的外掛程式名稱,例如 innodb
、csv
或 validate_password
。與其他選項一樣,選項名稱中的破折號和底線可以互換。此外,啟用狀態值不區分大小寫。例如,--my_plugin=ON
和 --my-plugin=on
是等效的。
--
plugin_name
=OFF告訴伺服器停用該外掛程式。使用此選項,您可以在伺服器啟動時停用已過時的
mysql_native_password
外掛程式等。--
plugin_name
[=ON]告訴伺服器啟用該外掛程式。(將選項指定為
--
而不帶值具有相同的效果。)如果外掛程式初始化失敗,則伺服器會在外掛程式停用的情況下執行。plugin_name
--
plugin_name
=FORCE告訴伺服器啟用該外掛程式,但是如果外掛程式初始化失敗,則伺服器不會啟動。換句話說,此選項會強制伺服器在外掛程式啟用的情況下執行,否則就不執行。
--
plugin_name
=FORCE_PLUS_PERMANENT與
FORCE
類似,但此外,會防止外掛程式在執行時卸載。如果使用者嘗試使用UNINSTALL PLUGIN
執行此操作,則會發生錯誤。
外掛程式啟用狀態在資訊綱要 PLUGINS
表格的 LOAD_OPTION
欄位中可見。
假設 CSV
、BLACKHOLE
和 ARCHIVE
是內建的可插拔儲存引擎,並且您希望伺服器在啟動時載入它們,但需要符合以下條件:如果 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
權限。由於外掛程式不再在表格中註冊,伺服器在後續重新啟動期間不會載入該外掛程式。
UNINSTALL PLUGIN
可以卸載外掛程式,無論它是使用 INSTALL PLUGIN
在執行時載入,還是使用外掛程式載入選項在啟動時載入,但需符合以下條件
它無法卸載內建於伺服器中的外掛程式。這些外掛程式可以從資訊綱要
PLUGINS
表格或SHOW PLUGINS
的輸出中識別,這些外掛程式的程式庫名稱為NULL
。它無法卸載使用
--
啟動伺服器的外掛程式,這會防止在執行時卸載外掛程式。這些可以從plugin_name
=FORCE_PLUS_PERMANENTPLUGINS
表格的LOAD_OPTION
欄位中識別。
若要卸載目前使用外掛程式載入選項在伺服器啟動時載入的外掛程式,請使用以下步驟。
從
my.cnf
檔案中移除與外掛程式相關的任何選項和系統變數。如果任何外掛程式系統變數持續保存到mysqld-auto.cnf
檔案中,請對每個變數使用RESET PERSIST
將其移除。var_name
重新啟動伺服器。
外掛程式通常會在啟動時使用外掛程式載入選項,或者在執行時使用
INSTALL PLUGIN
安裝,但不會同時使用這兩種方式。但是,如果曾經使用過INSTALL PLUGIN
,從my.cnf
檔案中移除外掛程式的選項可能不足以解除安裝。如果外掛程式仍然出現在PLUGINS
或SHOW PLUGINS
的輸出中,請使用UNINSTALL PLUGIN
將其從mysql.plugin
表格中移除。然後再次重新啟動伺服器。