web-dev-qa-db-ja.com

MySQL Query Logを有効にするにはどうすればいいですか?

クライアントから受信した各SQLクエリステートメントとそのクエリステートメントが送信された時間を記録するMySQL機能を有効にするにはどうすればよいですか? phpmyadminまたはNaviCatでそれを実行できますか?ログを分析する方法

231
Feng-Chun Ting

まず、このログファイルはビジー状態のサーバーでは非常に大きくなる可能性があることを忘れないでください。

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;

また、遅いクエリ、またはインデックスを使用しないクエリのみをログに記録するための追加のオプションがあります。

275
Gryphius

別の関連質問に対するこの回答を見てください。再起動せずに有効にする方法、無効にする方法、および稼働中のサーバーのログを表示する方法を示します。

すべてのクエリをmysqlに記録する


概要は次のとおりです。

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;
163

異なるページロードをすばやく最適化したい場合は、この方法でログを記録します。ちょっとした情報ですが….

テーブルへのログ記録

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秒間隔を使用します。

54
Layke

これは既にコメントになっていますが、それ自身の答えに値します:設定ファイルを編集せずに:rootとして、mysqlで、

SET global general_log_file='/tmp/mysql.log'; 
SET global log_output = 'file';
SET global general_log = on;

後でそれを消すことを忘れないでください。

47
commonpike

一般的なクエリログ(すべてのクエリを記録する)を無効または有効にすることができます。

SET GLOBAL general_log = 1 # (or 0 to disable)
13
Jon

私はまたMySQLログファイルがクエリを見ることを可能にしたいと思いました、そして私はこれを以下の指示で解決しました

  1. /etc/mysql/mysql.conf.dに行く
  2. mysqld.cnfを開く

以下の行を有効にして

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. このコマンドでMySQLを再起動してください/etc/init.d/mysql restart
  2. /var/log/mysql/に行きログをチェックしてください
6
shrikant

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"

誰かに役立つことを願っています。

3
croonx

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
...
...
...
...
2
HimalayanCoder

質問はすでにすばらしい答えを持っているので、その質問に対する正確な答えではありません。これは補足情報です。 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を短時間使用して、見つけようとしているものを見つけてそれをオフにするのに十分なだけログに記録します。

1
Allen King

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;
1
Kumanan

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
1
lptn

ある時点で一般ログを削除して再作成しなければなりませんでした。レクリエーション中に、文字セットがめちゃくちゃになり、ログにこのエラーが表示されてしまいました。

[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'

そのため、「ロギングがオンになっていることを確認する」という標準的な答えがあなたにはうまくいかない場合は、フィールドに正しい文字セットがあることを確認してください。

0
William Neely

PhpMyAdmin 4.0では、Status> Monitorに行きます。そこではスロークエリーログと一般ログを有効にし、ライブモニターを見て、グラフの一部を選択し、関連クエリーを見てそれらを分析することができます。

0
Marc Delisle
// 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; 
0