守護進程外掛程式是一種簡單的外掛程式類型,用於應該由伺服器執行但又不需要與其通訊的程式碼。本節說明如何編寫守護進程伺服器外掛程式,並使用 MySQL 原始程式碼發行版本的 plugin/daemon_example
目錄中的範例外掛程式。該目錄包含名為 daemon_example
的守護進程外掛程式的 daemon_example.cc
原始程式碼檔案,它會定期將心跳字串寫入資料目錄中名為 mysql-heartbeat.log
的檔案。
若要編寫守護進程外掛程式,請在外掛程式原始程式碼檔案中包含下列標頭檔。根據外掛程式的功能和需求,可能也需要其他 MySQL 或通用標頭檔。
#include <mysql/plugin.h>
plugin.h
定義 MYSQL_DAEMON_PLUGIN
伺服器外掛程式類型和宣告外掛程式所需的資料結構。
daemon_example.cc
檔案會設定程式庫描述符,如下所示。程式庫描述符包含單一通用伺服器外掛程式描述符。
mysql_declare_plugin(daemon_example)
{
MYSQL_DAEMON_PLUGIN,
&daemon_example_plugin,
"daemon_example",
"Brian Aker",
"Daemon example, creates a heartbeat beat file in mysql-heartbeat.log",
PLUGIN_LICENSE_GPL,
daemon_example_plugin_init, /* Plugin Init */
daemon_example_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
NULL, /* status variables */
NULL, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
name
成員 (daemon_example
) 指出在諸如 INSTALL PLUGIN
或 UNINSTALL PLUGIN
等語句中用於參照外掛程式的名稱。這也是 SHOW PLUGINS
或 INFORMATION_SCHEMA.PLUGINS
顯示的名稱。
外掛程式描述符的第二個成員 daemon_example_plugin
指向類型特定的守護進程外掛程式描述符。此結構僅由類型特定的 API 版本號組成
struct st_mysql_daemon daemon_example_plugin=
{ MYSQL_DAEMON_INTERFACE_VERSION };
類型特定的結構沒有介面函數。伺服器和外掛程式之間沒有通訊,除非伺服器呼叫通用外掛程式描述符中的初始化和反初始化函數來啟動和停止外掛程式
daemon_example_plugin_init()
會開啟心跳檔案並產生一個線程,該線程會定期喚醒並將下一個訊息寫入檔案。daemon_example_plugin_deinit()
會關閉檔案並執行其他清理。
若要編譯和安裝外掛程式庫檔案,請使用 第 4.4.3 節,「編譯和安裝外掛程式庫」 中的指示。若要使程式庫檔案可供使用,請將其安裝在外掛程式目錄中 (由 plugin_dir
系統變數命名的目錄)。對於 daemon_example
外掛程式,當您從原始程式碼建置 MySQL 時,會編譯並安裝它。它也包含在二進位發行版本中。建置程序會產生一個共用物件程式庫,其名稱為 libdaemon_example.so
( .so
後綴可能會因您的平台而異)。
若要使用外掛程式,請將其註冊到伺服器。例如,若要在執行階段註冊外掛程式,請使用此語句,並根據您的平台需要調整 .so
後綴
INSTALL PLUGIN daemon_example SONAME 'libdaemon_example.so';
如需外掛程式載入的其他資訊,請參閱 安裝和解除安裝外掛程式。
若要驗證外掛程式安裝,請檢查 INFORMATION_SCHEMA.PLUGINS
表格或使用 SHOW PLUGINS
語句。請參閱 取得伺服器外掛程式資訊。
在載入外掛程式時,它會定期將心跳字串寫入資料目錄中名為 mysql-heartbeat.log
的檔案。這個檔案會無限增長,因此在您確定外掛程式運作正常後,請解除載入它
UNINSTALL PLUGIN daemon_example;