MySQL无效查询的日志

时间:2011-01-07 23:12:30

标签: sql mysql view logging

我没有从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!";

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

5 个答案:

答案 0 :(得分:15)

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

  

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

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


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

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

答案 1 :(得分:9)

基本上,有两种方式。

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 :(得分:3)

您可以启用General Query Log吗?这应该告诉你需要知道的一切。

答案 3 :(得分:3)

从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-loggeneral-log-file打开常规查询日志,例如:

[mysqld]
general-log=1
log-raw=1
general-log-file=/var/log/mysql/general.log

答案 4 :(得分:0)

这不是那么微不足道。执行此操作的最佳方法是在应用程序中记录错误查询。没有内置的方式。