MySQL无效查询的日志

ano*_*919 21 mysql sql logging view

我没有运行PHP的命令!

我将MySQL log_error值设置为/var/log/mysql/error.log

但是,当我连接到数据库并运行SQL命令时,错误不会出现在日志中.


SELECT * 
FROM some_table
where this_is_invalid_and_will_fail="Doesn't matter because column doesn't exist!";
Run Code Online (Sandbox Code Playgroud)

有些命令从某种Windows应用程序运行.所有我想知道的是它发送到MySQL服务器的无效命令,以便我可以尝试解决它们.

Mch*_*chl 17

错误日志不会这样做:https: //dev.mysql.com/doc/refman/8.0/en/error-log.html

错误日志包含指示mysqld何时启动和停止的信息以及服务器运行时发生的任何严重错误.

MySQL不会在任何地方记录无效/失败的查询.


如果是出于调试目的,您可以尝试设置MySQL代理,我可以记录这个:

http://dev.mysql.com/downloads/mysql-proxy/


And*_*lin 10

基本上,有两种方式.

1)设置某种代理,可以记录错误查询.原始mysql代理有很多分支(@Mchl提到) - https://github.com/search?utf8=%E2%9C%93&q=MySQL+Proxy你也可以找到最新版本的原始的mysql代理在这里https://github.com/mysql/mysql-proxy

我不喜欢这种方式,因为它太复杂,无法快速调试

2)您可以启用mysql中的常规日志(将记录所有查询).它会产生很大的开销并且不符合生产要求,但是它可以快速简便地修复开发环境中的错误.

只需登录您的mysql并执行即可 SET GLOBAL general_log = 'ON'; SHOW GLOBAL VARIABLES LIKE 'general_log%';

你会看到日志的位置,比如 +------------------+------------------------+ | Variable_name | Value | +------------------+------------------------+ | general_log | OFF | | general_log_file | /mnt/ssd/mysql/s.log | +------------------+------------------------+

之后执行 mysqladmin flush-logs -u root -p

当您需要停止日志时 - 只需执行即可 SET GLOBAL general_log = 'OFF';

  • 第二个版本不会写出语法错误 (2认同)

Sta*_*pov 5

从 mysql 版本 5.6.3(2011-10-03 发布)开始,有一个名为 的变量log-raw允许您在常规查询日志中包含无效查询:

https://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_log-raw

您需要使用general-log和打开一般查询日志general-log-file,例如:

[mysqld]
general-log=1
log-raw=1
general-log-file=/var/log/mysql/general.log
Run Code Online (Sandbox Code Playgroud)

  • @MartinKonecny,使用“log-raw”为我解决了这个问题——它对你不起作用吗?我相信它起作用的原因是mysql要屏蔽密码,它需要能够解析查询。因此,如果它无法解析查询,它不会记录任何内容,这使得无法通过查看 mysql 日志文件来检测此类查询。这就是“log-raw”发挥作用的地方。 (4认同)
  • 不知道为什么根据文档,但实际上, `log_raw=1 ge​​neric_log=1 ge​​neric_log_file=c:/wamp/logs/mysql.query.log` 在 MySQL 5.7.16 上也对我有用 (3认同)