mysql连接id(thread_id)

时间:2012-01-19 15:25:20

标签: mysql

mySQL是否为用户连接使用特定的连接ID(thread_id)范围?我注意到我所做的所有连接都在50的范围内,如55,56。但是还有其他连接(不是我的)是8和9。

或者是否有一个表我只能选择用户conenction id?

我正在使用的查询是:

USE mysql;
SELECT * FROM general_log 
WHERE command_type='query' AND argument REGEXP ('^(SELECT|INSERT|DELETE|UPDATE).*')  AND thread_id != CONNECTION_ID()
ORDER BY event_time DESC;

但是id喜欢过滤掉所有无用户查询。


修改

我发现了另一个表,所以现在我的查询看起来像这样,虽然processlist显然只提供了有效的连接细节,但我仍然无法判断它是用户还是系统进程进行连接

USE mysql;
#TRUNCATE general_log;
SELECT * FROM general_log AS gl
LEFT JOIN information_schema.PROCESSLIST AS pl ON pl.ID = gl.thread_id
WHERE command_type='query' AND argument REGEXP ('^(SELECT|INSERT|DELETE|UPDATE).*') AND thread_id != CONNECTION_ID()
ORDER BY event_time DESC;

1 个答案:

答案 0 :(得分:1)

您最初的问题的答案是“不”。

所有连接共享相同的连接ID范围,因此该号码不会告诉您有关连接的任何有用信息。

如果要排除某些用户(可能是“repl”或“system user”),那么可以使用user_host列执行此操作:

USE mysql;
SELECT * FROM general_log 
WHERE command_type='query' 
AND argument REGEXP ('^(SELECT|INSERT|DELETE|UPDATE).*')  
AND thread_id != CONNECTION_ID()
AND user_host NOT IN (...)
ORDER BY event_time DESC;