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サーバーに送信する無効なコマンドを解決することだけです。
エラーログはそれを行いません: https://dev.mysql.com/doc/refman/8.0/en/error-log.html
エラーログには、mysqldがいつ開始および停止されたかを示す情報と、サーバーの実行中に発生した重大なエラーが含まれます。
MySQLは、無効/失敗したクエリをどこにも記録しません。
デバッグを目的としている場合は、MySQLプロキシを設定してみてください。これにより、次のことがログに記録される可能性があります。
基本的に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';
を実行するだけ
一般クエリログ を有効にできますか?それはあなたが知る必要があるすべてをあなたに伝えるべきです。
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
これはそれほど些細なことではありません。これを行う最良の方法は、アプリケーションに不正なクエリを記録することです。組み込みの方法はありません。