プラグインライブラリを作成するには,ライブラリファイルに含まれるプラグインを示す必要なディスクリプタ情報を提供し,各プラグインのインタフェース関数を記述する必要があります。
すべてのサーバープラグインには,プラグインAPIに情報を提供する一般ディスクリプタ,および特定のタイプのプラグインにプラグインインタフェースについての情報を提供するタイプ固有のディスクリプタがある必要があります。一般ディスクリプタの構造体は,すべてのプラグインタイプで同じです。タイプ固有のディスクリプタの構造体はプラグインタイプによって異なり,プラグインが実行する必要がある動作の要件によって決定されます。サーバープラグインインタフェースを使用すると,プラグインはステータス変数およびシステム変数を公開することもできます。これらの変数は,显示状态
ステートメントや显示变量
ステートメント,および対応するINFORMATION_SCHEMA
テーブルを介して表示できます。
クライアント側のプラグインの場合,アーキテクチャーは少し異なります。各プラグインにはディスクリプタがある必要がありますが,一般ディスクリプタとタイプ固有のディスクリプタに分割されていません。そうではなく,ディスクリプタはすべてのクライアントプラグインに共通する固定された一連のメンバーで始まり,この共通メンバーのあとに,特定のプラグインタイプを実装するために必要な追加のメンバーが続きます。
プラグインはCまたはc++(あるいはCの呼び出し規則を使用できる別の言語)で記述できます。プラグインは動的にロードおよびアンロードされるため,オペレーティングシステムが動的ロードをサポートしている必要があり,呼び出し元アプリケーションを(静的にではなく)動的にコンパイルしている必要があります。サーバープラグインの場合,これはmysqldを動的にコンパイルする必要があることを意味します。
サーバープラグインには実行中のサーバーの一部となるコードが含まれるため,プラグインを記述するときは,サーバーコードを作成する場合に該当するすべての制約に従う必要があります。たとえば,libstdc + +
ライブラリの関数を使用しようとすると,問題が生じることがあります。これらの制約はサーバーの今後のバージョンで変更される場合があるため,サーバーのアップグレードにより,古いサーバー用に作成されたプラグインの改訂が必要になることがあります。これらの制約については,セクション2.9.4“MySQLソース構成オプション”およびセクション2.9.5“MySQLのコンパイルに関する問題”を参照してください。
どのようなアプリケーションがプラグインを使用するかはわからないため,クライアントプラグインの作成者は,呼び出し元アプリケーションが持つシンボルに依存しないようにしてください。