伺服器外掛程式必須先載入伺服器,才能使用。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告知伺服器停用外掛程式。
--
plugin_name
[=ON]告知伺服器啟用外掛程式。(將選項指定為沒有值的
--
具有相同的效果。)如果外掛程式無法初始化,伺服器會在外掛程式停用的情況下執行。plugin_name
--
plugin_name
=FORCE告知伺服器啟用外掛程式,但如果外掛程式初始化失敗,則伺服器不會啟動。換句話說,此選項強制伺服器在外掛程式已啟用的情況下執行,否則根本不執行。
--
plugin_name
=FORCE_PLUS_PERMANENT與
FORCE
類似,但此外還會防止外掛程式在執行時被卸載。如果使用者嘗試使用UNINSTALL PLUGIN
執行此操作,則會發生錯誤。
外掛程式的啟動狀態會顯示在 Information Schema 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
權限。由於外掛程式不再註冊於表格中,伺服器在後續重新啟動時不會載入該外掛程式。
無論外掛程式是在執行階段使用 INSTALL PLUGIN
載入,還是在啟動時使用外掛程式載入選項載入,UNINSTALL 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
表格中移除它。然後再次重新啟動伺服器。