如何将 mysql 查询链接到 php 进程?

如何将 mysql 查询链接到 php 进程?

我注意到我有异常大量的mysqld进程,这些进程具有各种 mysql 查询;我已经重新启动mysqld,所有这些进程都在 10 秒内恢复。

我知道进程是使用 php 生成的;但不知道如何跟踪。如何做到这一点?

答案1

除非您正在运行多个数据库实例,否则您应该只运行一个 mysqld 进程。

答案2

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

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

然后你会看到谁锁定了你的数据库。当然,我确信你的数据库中至少有一个索引被破坏了,必须重建。你必须运行数据库分析/修复来修复你的问题:

REPAIR TABLE database.table;

答案3

lsof为了回答我自己的问题,这是我发现的;它在很大程度上取决于您的环境,并且涉及和的使用strace

您需要找到请求的进程 ID(使用lsofnetstatLinux 中的任何其他网络工具)。找到后,您需要父进程 ID,您可以通过 获取ps。然后,您需要使用以下命令跟踪该 PPID:strace -f -tt -T -s 10000 -p <PPID> -o ~/out.strace

另一种方法更高级,涉及使用/proc/。您还必须使用获取连接的 PPID lsof。然后您将执行ls -la /proc/<ppid>/fd/并 grep socket:[*number*]。然后您将对lsof所有数字s 然后是strace所有来自这些的 pid数字秒。

相关内容