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

标签 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 (调试.lua)

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

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

最佳答案

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

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

  • 它只记录错误而不记录警告。最初它管理一个“错误标志”,如果客户端的查询返回错误,该标志将设置为 true。我对此进行了更改,以便记录 SHOW WARNINGS 返回某些内容(错误、警告或注释)的每个查询。

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

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

关于mysql - 如何在 mysql-proxy 上使用 Lua 脚本记录 SQL 错误和警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415727/

相关文章:

python - 如何在python中使用mysql代理

mysql-proxy proxy.queries :append call failing with . server_capability 错误

php - mysql表中插入的数据不按时间顺序排列

php - 如何存储 64 位数字(位板)

character-encoding - Lua String 字符编码

kubernetes - sqlproxy : inject secrets into sqlproxy. cnf

php - Codeigniter:顺序子句中的列 'id' 不明确

php - 使用服务器将有效负载发送到 APN

linux - 编辑 rc.lua 时的 Tabcompletion 和 docview

android - 如何在触摸时删除克隆