MySQL日志查询尝试失败

时间:2014-05-25 17:43:56

标签: mysql

这是一个纯粹的MySQL调整问题,用于记录失败的SQL尝试。 我需要一个解决方案来记录MySQL数据库上的失败的SQL。

MySQL general query log在这里不起作用,因为它只会记录成功的查询。我需要在不同的日志文件中知道失败的文件。

我的方案是:我需要清理一个乱糟糟的SQL和PHP脚本(实际上,每页执行大约7,000个SQL)。由于在服务器上抑制了错误,即使SQL失败的查询也会继续并在网站上显示好的内容。但我确信,有很多SQL错误。我找到了2个链接但无法重试。 MySQL中的This onewriting server side audit插件。

使用Kontrolbase作为mentioned here的答案。

1 个答案:

答案 0 :(得分:0)

Percona Server 5.5.37和5.6.17包含一个免费和开源的审计插件的实现。在此处阅读:http://www.percona.com/doc/percona-server/5.6/management/audit_log_plugin.html

审计插件记录成功查询和错误查询。这是我查询表foo然后查询不存在的表foobar的示例:

<AUDIT_RECORD
  "NAME"="Query"
  "RECORD"="489_2014-05-23T14:06:09"
  "TIMESTAMP"="2014-05-23T14:08:13 UTC"
  "COMMAND_CLASS"="select"
  "CONNECTION_ID"="32709"
  "STATUS"="0"
  "SQLTEXT"="select * from foo"
  "USER"="root[root] @ localhost []"
  "HOST"="localhost"
  "OS_USER"=""
  "IP"=""
/>
<AUDIT_RECORD
  "NAME"="Query"
  "RECORD"="490_2014-05-23T14:06:09"
  "TIMESTAMP"="2014-05-23T14:08:19 UTC"
  "COMMAND_CLASS"="select"
  "CONNECTION_ID"="32709"
  "STATUS"="1146"
  "SQLTEXT"="select * from foobar"
  "USER"="root[root] @ localhost []"
  "HOST"="localhost"
  "OS_USER"=""
  "IP"=""
/>

STATUS=1146表示上面的错误查询。请参阅http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html以引用服务器错误。例如,1146是ER_NO_SUCH_TABLE。

如果您无法使用此解决方案,则必须更改PHP代码以删除错误抑制,并记录错误。