クライアントから受信した各SQLクエリステートメントとそのクエリステートメントが送信された時間を記録するMySQL機能を有効にするにはどうすればよいですか? phpmyadminまたはNaviCatでそれを実行できますか?ログを分析する方法
まず、このログファイルはビジー状態のサーバーでは非常に大きくなる可能性があることを忘れないでください。
mysql <5.1.29の場合:
クエリログを有効にするには、これを/etc/my.cnf
セクションの[mysqld]
に配置します。
log = /path/to/query.log #works for mysql < 5.1.29
また、MySQLコンソールから有効にする
SET general_log = 1;
http://dev.mysql.com/doc/refman/5.1/en/query-log.html を参照してください。
mysql 5.1.29 +の場合
Mysql 5.1.29以降では、log
オプションは推奨されていません。ログファイルを指定してロギングを有効にするには、my.cnfの[mysqld]
セクションでこれを使用します。
general_log_file = /path/to/query.log
general_log = 1
あるいは、MySQLコンソールからのログ記録を有効にするには(何らかの方法でログファイルの場所を指定するか、デフォルトの場所を見つける必要があります)。
SET global general_log = 1;
また、遅いクエリ、またはインデックスを使用しないクエリのみをログに記録するための追加のオプションがあります。
別の関連質問に対するこの回答を見てください。再起動せずに有効にする方法、無効にする方法、および稼働中のサーバーのログを表示する方法を示します。
概要は次のとおりです。
MySQLサーバーを起動したくない場合や再起動できない場合は、実行中のサーバーで次のように進めることができます。
ログテーブルを作成します( answer を参照)。
データベースでクエリロギングを有効にします(文字列 'table'は文字通りに置かれ、どのテーブル名でも置き換えられないことに注意してください。Thanks Nicholas Pickering
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
異なるページロードをすばやく最適化したい場合は、この方法でログを記録します。ちょっとした情報ですが….
テーブルへのログ記録
SET global general_log = 1;
SET global log_output = 'table';
その後、私のmysql.general_log
テーブルから選択して最近のクエリを取得できます。
それから私はmysql.logのtail -f
のような何かをすることができますが、より洗練されたもので...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
これにより、私が試してみることができるクエリを簡単に確認できます。最後の8秒以内に実行されたクエリのみを取得するために8秒間隔を使用します。
これは既にコメントになっていますが、それ自身の答えに値します:設定ファイルを編集せずに:rootとして、mysqlで、
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
後でそれを消すことを忘れないでください。
一般的なクエリログ(すべてのクエリを記録する)を無効または有効にすることができます。
SET GLOBAL general_log = 1 # (or 0 to disable)
私はまたMySQLログファイルがクエリを見ることを可能にしたいと思いました、そして私はこれを以下の指示で解決しました
/etc/mysql/mysql.conf.d
に行く以下の行を有効にして
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
に行きログをチェックしてくださいMySQL 5.6バージョンにはバグがあります。 mysqldでも次のように表示されます。
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
実際の設定は次の順序で読み取られます。
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
ファイルを確認してください: "C:\ ProgramData\MySQL\MySQL Server 5.6\my.ini"
誰かに役立つことを願っています。
Windowsでは、単純に
C:\wamp\bin\mysql\mysql5.1.53\my.ini
この行をmy.iniに挿入します
general_log_file = c:/wamp/logs/mysql_query_log.log
my.iniファイルは、最後に次のようになります。
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
質問はすでにすばらしい答えを持っているので、その質問に対する正確な答えではありません。これは補足情報です。 general_logを有効にすると、MySQLのパフォーマンスが低下します。私は偶然にgeneral_log =1
を運用サーバーに任せ、何時間もかけてパフォーマンスが他のサーバーの同様の設定に匹敵しない理由を見つけました。それから私はこれを見つけましたそれは一般的なログを可能にすることの影響を説明します。 http://www.fromdual.com/general_query_log_vs_mysql_performance 。
ストーリーの要旨は、general_log=1
ファイルに.cnf
を入れないでください。代わりに、set global general_log =1
を短時間使用して、見つけようとしているものを見つけてそれをオフにするのに十分なだけログに記録します。
MACマシンでクエリログを有効にするには
次のファイルを開きます。
vi /private/etc/my.cnf
次のように 'mysqld'セクションの下にクエリログURLを設定します。
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
クエリを正しく記録していないマシンはほとんどないため、その場合はMySQLコンソールから有効にできます。
mysql> SET global general_log = 1;
mysql> = 5.5遅いクエリ(1秒以上)のみmy.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
ある時点で一般ログを削除して再作成しなければなりませんでした。レクリエーション中に、文字セットがめちゃくちゃになり、ログにこのエラーが表示されてしまいました。
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_Host' at position 1 to have character set 'utf8' but found character set 'latin1'
そのため、「ロギングがオンになっていることを確認する」という標準的な答えがあなたにはうまくいかない場合は、フィールドに正しい文字セットがあることを確認してください。
PhpMyAdmin 4.0では、Status> Monitorに行きます。そこではスロークエリーログと一般ログを有効にし、ライブモニターを見て、グラフの一部を選択し、関連クエリーを見てそれらを分析することができます。
// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;