如何将mysql查询连接到一个PHP进程?

我注意到我有一个exception大量的mysqld进程有各种mysql查询; 我重新启动了mysqld ,所有这些进程在10秒内回来。

我知道这个过程正在使用PHP产生, 但不知道如何跟踪这个。 如何做到这一点?

从CLI客户端或从phpmyadmin或您最喜欢的mysql工具运行下一个查询:

 SELECT `USER`, `HOST`, `DB`, `COMMAND`, `TIME`, `STATE`, LEFT(`INFO`, 51200) AS `Info` FROM `information_schema`.`PROCESSLIST`; 

你会看到谁locking了你的基地。 当然,我敢肯定你们基地里至less有一个指数被打破了,必须重build。 你必须运行数据库分析/修复来解决你的问题:

 REPAIR TABLE database.table; 

除非你正在运行多个数据库 – 实例 – 你应该只有一个mysqld进程运行。

回答我自己的问题,这是我发现的; 它很大程度上取决于你的环境,并涉及到lsofstrace的使用。

你需要find你的请求的进程ID(在Linux中使用lsof或者netstat或者其他networking工具)。 一旦你有了这个,你会想要父进程ID,你可以通过ps获得。 然后,您将要使用以下命令对PPID进行strace -f -tt -T -s 10000 -p <PPID> -o ~/out.stracestrace -f -tt -T -s 10000 -p <PPID> -o ~/out.strace

另一种方法是更先进的,并涉及到/proc/的用法。 您还必须使用lsof来获取连接的PPID。 然后,您将为socket:[*number*]执行ls -la /proc/<ppid>/fd/和grep socket:[*number*] 。 然后,你会对所有的数字做一个lsof ,然后从这些数字中把所有的pid都strace