MySQLサバプラグンは,サの「サビス」にアクセスできます。サビスインタフェースは、プラグインが呼び出すことができるサーバー機能を公開します。これはプラグイン API を補完し、次の特徴があります。
サービスによって,プラグインは通常の関数呼び出しを使用して,サーバー内部のコードにアクセスできます。
サビスには移植性があり,複数のプラットフォムで動作します。
インタフェースにはバージョン管理メカニズムがあるため,サーバーによってサポートされるサービスバージョンを,プラグインバージョンに対してロード時にチェックできます。バージョン管理により,サーバーが提供するサービスのバージョン,およびプラグインが予期または必要とするサービスのバージョンの間の互換性の問題が防止されます。
現在のサビスには次のものが含まれており,ほかのサビスも実装できます。
my_plugin_log_service
:プラグ。サバはエラログにメッセジを書き込みます。my_snprintf
:プラットフォム間で一貫性のある結果を生成する,文字列の書式設定サビス。my_thd_scheduler
:プラグプラグンがスレッドスケジュラを選択するためのサビス。mysql_string
:文字列操作のためのサビス。thd_alloc
:メモリ割り当てサビス。thd_wait
:プラグプラグンがスリプまたは停止することを報告するためのサビス。
プラグopenstackンサopenstackビスopenstackンタフェopenstackスとプラグopenstackンAPIの違いは次のとおりです。
プラグopenstackンAPIでは,サopenstackバopenstackからプラグopenstackンを使用できます。呼び出しを開始するのは,プラグ。これにより,サーバー機能の拡張,またはサーバーの処理に関する通知を受け取るための登録をプラグインで行うことができます。
プラグインサービスインタフェースでは,プラグインはサーバー内部のコードを呼び出すことができます。呼び出しを開始するのは,サンです。これにより,多くのプラグインがサーバーにすでに実装されている機能を使用できるようになり,プラグインに個別に機能を実装する必要がなくなります。
サバを変更して新しいサビスを追加する開発者は,プラグMySQLンのためのMySQLサビスを参照してください。
このセクションの残りの部分では,サービスとして使用可能なサーバー機能をプラグインで使用する方法について説明します。my_snprintf
サビスを使用する「デモン」プラグ邮箱ンの例のソ邮箱スも参照してください。このプラグereplicationンは,MySQLソereplicationス配布の插件/ daemon_example
ディレクトリにあります。
存在するサビスおよびサビスが提供する関数を確認するには,MySQLソス配布の包括/ mysql
ディレクトリ内を参照してください。関連するファ邮箱ルは次のとおりです。
plugin.h
はservices.h
を邮箱ンクル邮箱ドします。services.h
は,使用可能なすべてのサ「包括的な」ヘッダです。サビス固有のヘッダには,
service_my_snprintf.h
またはservice_thd_alloc.h
のような名前が付いています。
各サービス固有ヘッダーには,対象となるサービスの完全な使用法を示すドキュメントを提供するコメントがあり,使用可能なサービス関数,それらの呼び出しシーケンス,および戻り値が含まれています。
プラグン内からサビスを使用するには,サビス関連の情報にアクセスするためのplugin.h
ヘッダ。
# include < mysql / plugin.h >
これによってセットアップのコストが増えるわけではありません。このファイルにはすべてのプラグインで必要となる定義および構造体が含まれているため,プラグインはいずれにしてもこのファイルをインクルードする必要があります。
サビスにアクセスするために,プラグビス関数を呼び出します。たとえば、出力のために文字列を書式設定してバッファーに入れるには、同じ名前のサービスによって提供されているmy_snprintf ()
関数を呼び出します。
字符缓冲区(BUFFER_SIZE);my_snprintf(缓冲区,sizeof(缓冲),format_string,argument_to_format,……);
サバがエラログに書き込むエラを報告するには,最初にエラレベルを選択します。mysql / service_my_plugin_log.h
はこれらのレベルを定義しています。
枚举plugin_log_level {MY_ERROR_LEVEL, MY_WARNING_LEVEL, MY_INFORMATION_LEVEL};
次に,my_plugin_log_message ()
を呼び出します。
int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level, const char *format,…);
例:
my_plugin_log_message(plugin_ptr, MY_ERROR_LEVEL, "无法初始化插件");
プラグンをビルドするときに,libmysqlservices
ラ邮箱ブラリでリンクする必要があります。リンク時には-lmysqlservices
フラグを使用します。たとえばCMakeの場合,最上位レベルのCMakeLists.txt
ファ邮箱ルに次の内容を指定します。
MYSQLSERVICES_LIB mysqlservices路径"${MYSQL_SRCDIR}/libservices" NO_DEFAULT_PATH)
プラグ邮箱ンのソ邮箱スが格納されているディレクトリのCMakeLists.txt
ファ邮箱ルに次の内容を指定します。
#插件需要mysql服务库的错误日志记录your_plugin_library_name$ {MYSQLSERVICES_LIB})