このセクションでは、MySQL ソース配布の plugin/semisync
ディレクトリにあるプラグイン例を使用して、準同期レプリケーションサーバープラグインを作成する方法について説明します。このディレクトリには、rpl_semi_sync_master
および rpl_semi_sync_slave
という名前のマスタープラグインおよびスレーブプラグインのソースファイルが格納されています。ここでは、プラグインフレームワークをセットアップする方法についてのみ説明します。プラグインがレプリケーション機能を実装する方法については、ソースを参照してください。
準同期レプリケーションプラグインを作成するには、プラグインソースファイルに次のヘッダーファイルをインクルードします。プラグインの機能および要件によっては、ほかの MySQL のヘッダーファイルまたは一般的なヘッダーファイルが必要になることもあります。
#include <mysql/plugin.h>
plugin.h
は、MYSQL_REPLICATION_PLUGIN
サーバープラグインタイプ、およびプラグインを宣言するために必要なデータ構造体を定義します。
マスター側の場合、semisync_master_plugin.cc
には rpl_semi_sync_master
という名前のプラグインの次の一般ディスクリプタが含まれています。
mysql_declare_plugin(semi_sync_master)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_master_plugin,
"rpl_semi_sync_master",
"He Zhenxing",
"Semi-synchronous replication master",
PLUGIN_LICENSE_GPL,
semi_sync_master_plugin_init, /* Plugin Init */
semi_sync_master_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_master_status_vars, /* status variables */
semi_sync_master_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
スレーブ側の場合、semisync_slave_plugin.cc
には rpl_semi_sync_slave
という名前のプラグインの次の一般ディスクリプタが含まれています。
mysql_declare_plugin(semi_sync_slave)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_slave_plugin,
"rpl_semi_sync_slave",
"He Zhenxing",
"Semi-synchronous replication slave",
PLUGIN_LICENSE_GPL,
semi_sync_slave_plugin_init, /* Plugin Init */
semi_sync_slave_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_slave_status_vars, /* status variables */
semi_sync_slave_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
マスタープラグインおよびスレーブプラグインのどちらの場合も、一般ディスクリプタには、タイプ固有のディスクリプタ、初期化関数と初期化解除関数、およびプラグインによって実装されるステータス変数とシステム変数へのポインタがあります。変数の設定については、セクション24.2.4.2.2「サーバープラグインのステータス変数およびシステム変数」を参照してください。以降の説明では、マスタープラグインのタイプ固有のディスクリプタ、初期化関数および初期化解除関数について記述していますが、スレーブプラグインにも同様に当てはまります。
マスターの一般ディスクリプタの semi_sync_master_plugin
メンバーは、タイプ固有のディスクリプタを指しており、これはタイプ固有の API バージョン番号のみで構成されています。
struct Mysql_replication semi_sync_master_plugin= {
MYSQL_REPLICATION_INTERFACE_VERSION
};
初期化関数および初期化解除関数の宣言は、次のようになります。
static int semi_sync_master_plugin_init(void *p);
static int semi_sync_master_plugin_deinit(void *p);
初期化関数はポインタを使用して、トランザクションおよびバイナリロギングの「オブザーバー」をサーバーに登録します。初期化が成功したあとに、サーバーは適切な時期にオブザーバーを呼び出します。(オブザーバーについては、ソースファイルを参照してください。)初期化解除関数は、オブザーバーを登録解除することによってクリーンアップ処理を実行します。各関数は、成功した場合は 0、およびエラーが発生した場合は 1 を返します。
プラグインライブラリのオブジェクトファイルをコンパイルおよびインストールするには、セクション24.2.4.3「プラグインライブラリのコンパイルおよびインストール」の手順を使用します。ライブラリファイルを使用するには、ライブラリファイルがプラグインディレクトリ (plugin_dir
システム変数で指定されているディレクトリ) にインストールされている必要があります。rpl_semi_sync_master
プラグインおよび rpl_semi_sync_slave
プラグインの場合、これらはソースから MySQL をビルドするときにコンパイルおよびインストールされます。これらはバイナリ配布にも含まれています。ビルド処理では、semisync_master.so
および semisync_slave.so
という名前の共有オブジェクトライブラリが生成されます (サフィクスはプラットフォームによって異なる場合があります)。