从daemon插件中调用mysql_real_connect

时间:2012-06-05 08:14:52

标签: mysql c

我想编写一个MySQL守护程序插件,用于监视其他MySQL服务器上的查询,并将其与运行守护程序的查询进行比较。基本上这是在蜘蛛引擎设置中,在头节点上启动的查询在分片上运行。每当查询被杀死时,我想在分片节点上有一个守护进程,它会杀死那里的相关查询。

我们的想法是启动一个使用mysql_real_connectmysql_real_query ...来访问头节点上的“show processlist”并将它们与本地线程列表进行比较的pthread。如果我在守护程序的线程中发出mysql_real_connect,则会出现分段错误。我认为这是由mysql_real_connect中的线程问题引起的。我使用了#define MYSQL_SERVER 1并按照ha_federated::real_connect()中采用的方法。

是否可以在守护程序插件中运行mysql_real_connect

感谢任何提示。

1 个答案:

答案 0 :(得分: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);