从守护进程插件中调用 mysql_real_connect

标签 mysql c

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

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

是否真的可以从守护进程插件中运行 mysql_real_connect

感谢任何提示。

最佳答案

经过handlersocker daemon plugin的深思熟虑后,我意识到为了让mysql_real_connect和 friend 在守护线程中工作,需要设置一个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);

关于从守护进程插件中调用 mysql_real_connect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893805/

相关文章:

php - 雅虎通过管道将 JSON 传输到数据库

php - 在PHP中使用explode显示mysql数据

mysql - 触发器中使用 If_Else 时出错

mysql - GROUP_CONCAT 有限制

c - 4096 个 float 和 2 个选项哪个是最好的方法,为什么?

使用 Coalesce 的 Mysql 查询不会更新行

C,在结构[]中分配一个数组

c - 段错误处理程序中的段错误

C-Mysql-警告 : assignment from incompatible pointer type

c - 初学者 ftp 服务器困境,部分 deux