web-dev-qa-db-ja.com

無効なクエリのMySQLログ

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サーバーに送信する無効なコマンドを解決することだけです。

21
anon5456919

エラーログはそれを行いません: https://dev.mysql.com/doc/refman/8.0/en/error-log.html

エラーログには、mysqldがいつ開始および停止されたかを示す情報と、サーバーの実行中に発生した重大なエラーが含まれます。

MySQLは、無効/失敗したクエリをどこにも記録しません。


デバッグを目的としている場合は、MySQLプロキシを設定してみてください。これにより、次のことがログに記録される可能性があります。

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

17
Mchl

基本的に2つの方法があります。

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';を実行するだけ

10
Andrew Zhilin

一般クエリログ を有効にできますか?それはあなたが知る必要があるすべてをあなたに伝えるべきです。

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
3
Stas Filippov

これはそれほど些細なことではありません。これを行う最良の方法は、アプリケーションに不正なクエリを記録することです。組み込みの方法はありません。

0
Silver Light