2012-06-05 17 views
2

我想編寫一個MySQL守護程序插件,用於監視其他MySQL服務器上的查詢,並將它們與運行守護程序的查詢進行比較。基本上這是在蜘蛛引擎設置中,在頭節點上啓動的查詢會在碎片上運行。每當一個查詢被殺死的時候,我希望在分片節點上有一個守護進程,這會在那裏終止關聯的查詢。來自守護程序插件的mysql_real_connect調用

這個想法是啓動一個pthread,它使用mysql_real_connect,mysql_real_query ...來訪問頭節點上的「show processlist」,並將它們與本地線程列表進行比較。如果我在守護進程的線程中發出mysql_real_connect,我會遇到分段錯誤。我認爲這是由於mysql_real_connect中的線程問題。我已使用#define MYSQL_SERVER 1並按照ha_federated::real_connect()中採取的方法。

實際上是否可以從守護進程插件中運行mysql_real_connect

感謝您的任何提示。

回答

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);