mysqld での出来事を記録しているのが、一般クエリ ログです。サーバはこのログに、クライアント接続や切断の情報を書き込み、そのときのクライアントからの SQL ステートメントも記録します。一般クエリ ログはクライアント側でのエラーを検討するときに、クライアントが mysqld に何を送ったことによって問題が発生したかを正確に知ることができます。
mysqld ではステートメントを到着順にクエリ ログに書き込みますが、実行した順番とは異なることがあります。このロギングの順番は、ステートメントを実行した後のクエリがロックがリリースされる前である場合には、バイナリ ログとは対照的です。また、クエリ ログにはすべてのステートメントが入る一方で、バイナリ ログにはデータだけを選択するステーメントは入りません。
MySQL 5.1.6 から、一般クエリ
ログを有効化するには、mysqld を
--log[=
または file_name
]-l
[
で起動するか、あるいは file_name
]--log-output
を使用してログ先を指定します
(項4.11.1. 「一般クエリとスロー クエリのログ出力先の選択」 を参照)。MySQL 5.1.6
前は、一般クエリ
ログの出力先は常にファイルです。一般クエリ
ログ
ファイルを有効化するには、--log[=
または file_name
]-l
[
のオプションを使用します。
file_name
]
--log
または -l
に
file_name
値を指定しない場合、デフォルト名は、
というデータ
ディレクトリのファイル名になります。絶対パスでファイル名を指定しない場合、このファイルはデータ
ディレクトリに置かれます。
host_name
.log
MySQL 5.1.12 以降、--log
または
-l
を指定する場合、--general-log
オプションで最初の一般クエリ
ログ状態を指定することも可能です。このオプションで、引数なし、または
値を 0
にすると、ログが無効化します。省略する、または値を
1
とすると、ログが有効化します。--log
または-l
を指定しない場合、--general-log
には何の影響もありません。
general_log
および
general_log_file
のグローバル
システム変数で、一般クエリ
ログのランタイム制御ができます。general_log
を 0 (または OFF
)
にすると、ログが無効化し、1 (または
ON
)
で有効化します。general_log_file
を指定して、ログ
ファイルの名前を指定することもできます。ログ
ファイルがすでに開いている場合は、それを閉じて、新規ファイルを開けます。
一般クエリ
ログを有効化した場合、出力の書き込み先は
--log-output
オプション、または
log_output
環境変数で指定します。ノート: 出力先が
NONE
である場合、一般ログを有効化していても、出力書き込みはできません。同様に、ログ出力先の値に
FILE
がない場合は、ログ効果はありません。
サーバの再起動やログのフラッシュでは、一般クエリ ログの新規ファイルを生成しません。フラッシュはファイルを閉じて、それを再び開けるだけです。Unix では、ファイル名を変更して、次のコマンドを使用して、新規ファイルを作成できます。
shell>mv
shell>host_name
.loghost_name
-old.logmysqladmin flush-logs
shell>cp
shell>host_name
-old.logbackup-directory
rm
host_name
-old.log
Windows では、サーバがログ ファイルを使用している間は、ログ ファイルの名前変更はできません。まずサーバを停止してから、ファイルの名前を変更し、そして、サーバを再起動してから新規のログ ファイルを作成します。
MySQL 5.1.12 から、ランタイムで一般クエリ ログを無効化できるようになりました。
SET GLOBAL general_log = 'OFF';
ログを無効化した状態で、コマンドラインなどを使用して、ログ ファイルの名前を外部的に変更します。そして、ログを再び有効化します。
SET GLOBAL general_log = 'ON';
このやり方は、どのプラットフォームでも使用でき、サーバの再起動は不要です。