我没有从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服务器的无效命令,以便我可以尝试解决它们。
答案 0 :(得分:15)
错误日志不会这样做: https://dev.mysql.com/doc/refman/8.0/en/error-log.html
错误日志包含信息 指示mysqld何时启动和 停止以及任何严重错误 服务器发生时发生的事情 运行
MySQL不会在任何地方记录无效/失败的查询。
如果是出于调试目的,您可以尝试设置一个MySQL代理,我可以记录这个:
答案 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-log
和general-log-file
打开常规查询日志,例如:
[mysqld]
general-log=1
log-raw=1
general-log-file=/var/log/mysql/general.log
答案 4 :(得分:0)
这不是那么微不足道。执行此操作的最佳方法是在应用程序中记录错误查询。没有内置的方式。