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

为了调试目的,我想在服务器级别记录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代理记录错误。但我仍在寻找记录警告的方法。

我对mysql-proxy LUA脚本并不自信。有人能告诉我如何做到这一点吗?

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

点赞
用户88888888
用户88888888

你可以下载这个脚本并且在配置 MySQL-proxy 时指定。

命令行选项在这里列出: MySQL-proxy-configuration

在你的情况下,典型的 MySQL-proxy 配置会像这样:

$ 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-proxy。

2013-07-02 12:53:35
用户1197384
用户1197384

我最终在学习文学方面对这个主题进行了研究,并开发了适合我的 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 可能会返回由之前查询生成的结果集。 为了解决这个问题,我使用了一个不太干净的方法:在检测到一个查询之后,我注入一个我知道会生成错误消息的错误查询;之后我忽略这个错误消息。这是一种“清除”警告和注释的方法……
2013-07-04 10:13:29