如何使用mysql-proxy上的Lua脚本记录SQL错误和警告

时间:2013-07-02 00:41:51

标签: mysql lua mysql-proxy

出于调试目的,我想在服务器级别记录MySQL返回的SQL错误和警告消息以及相应的查询。

我找到了两个有用的Lua脚本:

https://github.com/koopa/mysql-proxy-log-error-queries/blob/master/mysql-proxy-log-error-queries.lua https://github.com/patrickallaert/MySQL-Proxy-scripts-for-devs(debug.lua)

允许使用MySQL Proxy记录错误。但我仍在寻找记录警告的方法。 我对mysql-proxy LUA脚本没有信心。有人可以告诉我该怎么做吗?

这个问题:Log warnings into a table似乎很接近,但不幸的是,提供的链接已经死了,我找不到内容。

2 个答案:

答案 0 :(得分:2)

我终于在研究文献时研究了这个主题,并开发了适合我的Lua脚本。

我首先提到的脚本(https://github.com/koopa/mysql-proxy-log-error-queries/blob/master/mysql-proxy-log-error-queries.lua)是一个很好的起点,但是:

  • 它只记录错误而不是警告。最初它管理一个'错误标志',如果客户端的查询返回错误,则设置为true。我更改了这一点,以便记录SHOW WARNINGS返回某些内容的每个查询(错误,警告或注释)。

  • 它将错误日志行插入表中。它可能很好,但对于客户端来说可能会让人感到困惑,因为插入日志行会清除“show warnings”查询显示的消息。可能有办法解决这个问题,打开一个新的会话或连接...但我选择将事件记录到一个简单的文本文件中。其次,原始脚本中的插入查询可能会生成语法错误,因为错误消息或原始查询中可能包含简单引号'

在记录所有警告时我们必须小心:所有查询都不会清除警告/注释队列。因此,SHOW WARNINGS可以在非警告生成查询之后返回由先前查询生成的结果集。 为了解决这个问题,我使用了一个脏方法:在检测到一个查询之后,我注入了一个错误的查询,我知道它会生成错误信息;之后我忽略了这个错误信息。这是一种“清除”警告和注释的方法......

答案 1 :(得分:0)

您可以下载此脚本并在配置MySQL代理时指定。 此处列出了命令行选项: MySQL-proxy-configuration

典型的MySQL代理配置在您的情况下将如下所示:

  

$ mysql-proxy --proxy-backend-addresses = 192.168.x.x:3305   --proxy-address = 192.168.y.y:4045 --proxy-lua-script = mysql-proxy-log-error-queries.lua

我猜您可能需要修改此脚本才能连接到MySQL代理。