2014-09-20 47 views
0

如果我有用户,主机,命令类型,线程ID和参数(来自mysql通用日志的数据),我该如何确定命令的来源,因为它来自哪个脚本或应用程序?只知道这些信息并没有给我多大的提示。我试图找出它来自哪里。有没有办法跟踪mysql连接请求?

我检查了我的php和apache日志,但无法确定可能发出的命令。我需要某种直接的追踪。

回答

3

不,没有办法知道MySQL服务器端连接来自哪个应用程序。 MySQL服务器可以记录的唯一标识信息是用户和连接源自的主机。

有些人设计自己的应用程序添加注释的SQL查询和注释添加到查询日志:

SELECT ... FROM mytable /* ShoppingCart.java, method cancelOrder() */ 

但如果你的应用程序不这样做,信息当然不是可用。

此外,mysql客户端在提交查询前剥离注释,因此如果您有SQL脚本或用户进行即席查询,则此方法无效。

+0

该死的。我遇到了这个问题,我一直在获取“连接”命令,每秒约3个用户为root。 root是我的网站用来连接数据库的用户 - 但我不确定它是否真的是我网站上发布命令的脚本。我想唯一的方法来确定它是否是我的网站上的东西将删除整个网站,检查,并重新上传。我想尽量避免这样做。 – 2014-09-20 19:57:22

+0

@ChrisScott如果你有一个用于连接的包含,你可以创建一个新用户,授予这个用户所需的权限并更改这个包含的凭证。如果它被传播,那么一个搜索和替换文件的编辑器会很方便。 – VMai 2014-09-20 20:34:57

+0

我已经发现了它的起源。从字面上看,任何时候我服务器上的任何东西都连接到mysql,当mysql仍在运行时,用户使用的命令将不断发出这些“连接”命令。这是bizzare:http://community.bitnami.com/t/help-keep-getting-connection-commands-to-mysql-slows-down-my-server/26037 – 2014-09-20 20:54:41

0

也许试试php函数名为debug_backtrace()? 它返回一个数组,其中包含具有文件名称行和函数名称的回溯函数调用。

像这样:

$trace = debug_backtrace(); 
var_dump($trace); 

我只能回答这是因为你在你的问题有PHP代码,所以这是可以用PHP做最我猜。

+0

但我会把这个放在哪里?在我的服务器上的任何ol php文件?我只能怀疑这是php发布的命令。 – 2014-09-20 19:51:25

相关问题