回答:
まず、このログファイルは、ビジー状態のサーバーでは非常に大きくなる可能性があることに注意してください。
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
オプションは廃止されています。ログファイルを指定してロギングを有効にするには、[mysqld]
セクションのmy.cnfでこれを使用します。
general_log_file = /path/to/query.log
general_log = 1
または、MySQLコンソールからロギングをオンにします(ログファイルの場所を何らかの方法で指定するか、デフォルトの場所を見つける必要があります)。
SET global general_log = 1;
また、遅いクエリ、またはインデックスを使用しないクエリのみをログに記録する追加オプションがあることにも注意してください。
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
別の関連する質問に対するこの回答を見てください。再起動せずにライブサーバーのログを有効化、無効化、および確認する方法を示します。
ここに要約があります:
MySQLサーバーが不要または再起動できない場合は、実行中のサーバーで次のように処理できます。
ログテーブルを作成します(回答を参照)
データベースでクエリログを有効にします(文字列 'table'は文字どおりに配置し、テーブル名で置き換えないようにしてください。おかげでNicholas Pickering)
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
さまざまなページの読み込みをすばやく最適化したい場合は、この方法でログを記録します。ちょっとしたヒントです...
TABLEへのロギング
SET global general_log = 1;
SET global log_output = 'table';
次に、私のmysql.general_log
テーブルから選択して、最近のクエリを取得できます。
その後tail -f
、mysql.log と同様のことを行うことができますが、さらに改良されています...
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秒以内に実行されたクエリのみをフェッチします。
これはすでにコメントにありましたが、独自の答えに値します:構成ファイルを編集せずに:mysqlで、rootとして、
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
後でオフにすることを忘れないでください:
SET global general_log = off;
/tmp/
、最終的に次のような場所になることがあります/tmp/systemd-private-...-mariadb.service-.../tmp/
(すべてのクエリを記録する)一般的なクエリログを無効または有効にできます。
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/
ログに移動して確認する// 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;
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
...
...
...
...
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"
それが誰かを助けることを願っています。
ため> = 5.5のMySQLだけ遅いクエリの(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
質問はすでに素晴らしい答えを持っているので、質問に対する正確な答えではありません。これは副次的な情報です。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
に、あなたが見つけようとしていることを見つけ、それをオフにするのに十分なログを取るために、短い期間使用してください。
一般的なログを一度に削除して再作成する必要がありました。レクリエーション中に、文字セットがめちゃくちゃになり、ログに次のエラーが表示されました。
[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'
したがって、「ロギングがオンになっていることを確認する」という標準的な回答が機能しない場合は、フィールドに適切な文字セットがあることを確認してください。