这是一个纯粹的MySQL调整问题,用于记录失败的SQL尝试。 我需要一个解决方案来记录MySQL数据库上的失败的SQL。
MySQL general query log在这里不起作用,因为它只会记录成功的查询。我需要在不同的日志文件中知道失败的文件。
我的方案是:我需要清理一个乱糟糟的SQL和PHP脚本(实际上,每页执行大约7,000个SQL)。由于在服务器上抑制了错误,即使SQL失败的查询也会继续并在网站上显示好的内容。但我确信,有很多SQL错误。我找到了2个链接但无法重试。 MySQL中的This one和writing server side audit插件。
使用Kontrolbase作为mentioned here的答案。
答案 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代码以删除错误抑制,并记录错误。