2

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

这个想法是启动一个使用mysql_real_connect, mysql_real_query... 来访问头节点上的“显示进程列表”并将它们与本地线程列表进行比较的 pthread。如果我mysql_real_connect在守护进程的线程中发出,我会遇到分段错误。我认为这是由于mysql_real_connect. 我已经使用#define MYSQL_SERVER 1并遵循ha_federated::real_connect().

实际上可以mysql_real_connect从守护程序插件中运行吗?

感谢您的任何提示。

4

1 回答 1

1

琢磨了一下handlersocker daemon插件后,我意识到为了mysql_real_connect和朋友们在daemon线程中工作,需要建立一个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 回答