常駐程式外掛程式是一種簡單的外掛程式類型,用於應由伺服器執行但不與其通訊的程式碼。本節說明如何編寫常駐程式伺服器外掛程式,並使用 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;