我想编写一个MySQL守护程序插件,用于监视其他MySQL服务器上的查询,并将它们与运行守护程序的查询进行比较。基本上,这是在爬虫引擎设置中,在头节点上启动的查询在分片上运行。每当查询在头部被杀死时,我都希望在分片节点上有一个守护进程,它将杀死那里的关联查询。
这个想法是启动一个使用 mysql_real_connect
的 pthread,mysql_real_query
...访问头节点上的"显示进程列表",并将其与本地线程列表进行比较。如果我在守护程序的线程中发出mysql_real_connect
,则会出现分段错误。我认为这是由于mysql_real_connect
中的线程问题.我使用了#define MYSQL_SERVER 1
并遵循了ha_federated::real_connect()
中采取的方法。
实际上是否可以从守护程序插件中运行mysql_real_connect
?
感谢您的任何提示。
在沉思了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);