当我发出SHOW PROCESSLIST查询时,在info列中只返回正在运行的SQL查询的前100个字符。
是否有可能改变MySQL配置或发出不同类型的请求来查看完整的查询(我正在查看的查询超过100个字符)
当我发出SHOW PROCESSLIST查询时,在info列中只返回正在运行的SQL查询的前100个字符。
是否有可能改变MySQL配置或发出不同类型的请求来查看完整的查询(我正在查看的查询超过100个字符)
SHOW FULL PROCESSLIST
如果不使用FULL,“每条语句的前100个字符只显示在Info字段中”。
在使用phpMyAdmin时,您还应该点击“全文”选项(“←T→”在结果表的左上角)来查看未截断的结果。
我刚刚在MySQL文档中读到,默认情况下SHOW FULL PROCESSLIST只列出当前用户连接的线程。
引用自MySQL SHOW FULL PROCESSLIST文档:
如果您拥有PROCESS权限,则可以查看所有线程。
所以你可以在你的mysql中启用Process_priv列。用户表。记得在之后执行FLUSH PRIVILEGES:)
Show Processlist从另一个表中获取信息。下面是如何提取数据并查看包含整个查询的“INFO”列:
select * from INFORMATION_SCHEMA.PROCESSLIST where db = 'somedb';
您可以根据自己的需求添加或忽略任何条件。
查询的输出结果如下:
+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+-------+------+-----------------+--------+---------+------+-----------+----------------------------------------------------------+
| 5 | ssss | localhost:41060 | somedb | Sleep | 3 | | NULL |
| 58169 | root | localhost | somedb | Query | 0 | executing | select * from sometable where tblColumnName = 'someName' |
查看SHOW PROCESSLIST的完整查询:
SHOW FULL PROCESSLIST;
Or
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
如果你想在shell会话上不断更新进程(在这个例子中,2秒),而不需要手动与它交互,可以使用:
watch -n 2 'mysql -h 127.0.0.1 -P 3306 -u some_user -psome_pass some_database -e "show full processlist;"'
show [full] processlist唯一的缺点是不能过滤输出结果。另一方面,从INFORMATION_SCHEMA中发出SELECT *。PROCESSLIST打开了从输出中删除任何你不想看到的东西的可能性:
SELECT * from INFORMATION_SCHEMA.PROCESSLIST
WHERE DB = 'somedatabase'
AND COMMAND <> 'Sleep'
AND HOST NOT LIKE '10.164.25.133%' \G