2

他の MySQL サーバーでクエリを監視し、デーモンが実行されている場所で実行されているクエリと比較する MySQL デーモン プラグインを作成したいと考えています。基本的に、これはスパイダー エンジンの設定であり、ヘッド ノードで開始されたクエリがシャードで実行されます。ヘッドでクエリが強制終了されるたびに、関連するクエリを強制終了するデーモンをシャード ノードに配置したいと考えています。

mysql_real_connect, mysql_real_query... を使用してヘッド ノードの "show processlist" にアクセスし、それらをローカル スレッド リストと比較するpthread を開始するというアイデアでした。デーモンのスレッドで発行mysql_real_connectすると、セグメンテーション違反が発生します。これは のスレッド化の問題によるものだと思いますmysql_real_connect#define MYSQL_SERVER 1で採用されたアプローチを使用し、それに従っていha_federated::real_connect()ます。

mysql_real_connectデーモンプラグイン内から実行することは実際に可能ですか?

ヒントをありがとう。

4

1 に答える 1

1

handlersocker デーモン プラグインについて熟考した後mysql_real_connect、デーモン スレッドで動作するためには、mysql 内部スレッド環境をセットアップしてサーバーに登録する必要があることに気付きました。

これには基本的に、デーモン スレッドで以下を呼び出すことが含まれます。

my_thread_init();
thd = new THD;

mysql_mutex_lock(&LOCK_thread_count);
thd->thread_id = thread_id++;
mysql_mutex_unlock(&LOCK_thread_count);

thd->store_globals();

... setting up various options in THD ...

mysql_mutex_lock(&LOCK_thread_count);
threads.append(thd);
++thread_count;
mysql_mutex_unlock(&LOCK_thread_count);
于 2012-06-08T07:28:15.380 に答える