Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 20.9Mb
PDF (A4) - 21.0Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


5.2.3 一般クエリーログ

一般クエリーログは、mysqld の実行内容の一般的な記録です。サーバーは、クライアントが接続または接続解除したときに情報をこのログに書き込み、クライアントから受け取った各 SQL ステートメントをログに記録します。一般クエリーログは、クライアント側でエラーが疑われるとき、クライアントが mysqld に送信した内容を正確に知りたい場合に非常に役立つことがあります。

mysqld は、ステートメントを受け取った順にクエリーログに書き込みますが、ステートメントが実行された順番とは異なることがあります。このロギング順序はバイナリログの順序とは対照的で、バイナリログの場合、ステートメントはそれが実行されたあと、ロックがリリースされる前に書き込まれます。さらに、クエリーログはデータを選択するだけのステートメントを格納することもあり、そのようなステートメントはバイナリログには一切書き込まれません。

ステートメントベースのロギングを使用する場合、すべてのステートメントはクエリーログに書き込まれますが、行ベースのロギングを使用する場合、更新は SQL ステートメントではなく行の変更として送信されるため、binlog_formatROW のときは、これらのステートメントはクエリーログに一切書き込まれません。使用されるステートメントによっては、この変数が MIXED に設定された場合、所定の更新がクエリーログに書き込まれないこともあります。詳細については、セクション17.1.2.1「ステートメントベースおよび行ベースレプリケーションのメリットとデメリット」を参照してください。

デフォルトでは、一般クエリーログは無効になっています。初期の一般クエリーログ状態を明示的に指定するには、--general_log[={0|1}] を使用します。引数を指定しないか、引数が 1 の場合、--general_log によってログが有効になります。引数が 0 の場合、このオプションによってログが無効になります。ログファイル名を指定するには、--general_log_file=file_name を使用します。ログの出力先を指定するには、(セクション5.2.1「一般クエリーログおよびスロークエリーログの出力先の選択」で説明されている) --log-output を使用します。

一般クエリーログファイルの名前を指定しない場合、デフォルト名は host_name.log です。サーバーは、別のディレクトリを指定する絶対パス名が指定されないかぎり、データディレクトリ内にファイルを作成します。

実行時に一般クエリーログを無効化または有効化したり、ログファイル名を変更したりするには、グローバルな general_log および general_log_file システム変数を使用します。general_log を 0 (または OFF) に設定するとログが無効化され、1 (または ON) にすると有効化されます。ログファイルの名前を指定するには、general_log_file を指定します。ログファイルがすでに開いている場合、ログファイルが閉じて新しいファイルが開きます。

一般クエリーログが有効な場合、サーバーは --log-output オプションまたは log_output システム変数によって指定されたあらゆる出力先に出力を書き込みます。ログを有効にすると、サーバーはログファイルを開き、ログファイルに起動メッセージを書き込みます。ただし、FILE ログの出力先が選択されないかぎり、ファイルに対するそれ以上のクエリーのロギングは実行されません。出力先が NONE の場合、一般ログが有効な場合であってもサーバーはクエリーを書き込みません。ログ出力先の値に FILE が含まれていない場合、ログファイル名を設定してもロギングへの影響はありません。

サーバー再起動およびログフラッシュを行なっても、新しい一般クエリーログファイルは生成されません (ただし、フラッシュではファイルが閉じて再オープンします)。ファイルを名前変更して新しいファイルを作成するには、次のコマンドを使用します。

shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory

Windows では、mv の代わりに rename を使用してください。

また、ログを無効にすることによって、実行時に一般クエリーログファイルを名前変更することができます。

SET GLOBAL general_log = 'OFF';

ログが無効化されている場合、コマンド行などの外部からログファイルを名前変更してください。そのあと、ログをふたたび有効にします。

SET GLOBAL general_log = 'ON';

この方法はすべてのプラットフォームで動作し、サーバー再起動を必要としません。

セッション変数 sql_log_offON または OFF に設定して、現在の接続についての一般クエリーロギングを無効化または有効化することができます。

MySQL 5.6.3 以降では、一般クエリーログに書き込まれるステートメントのパスワードはサーバーによって書き換えられ、文字どおりに平文で表示されることはありません。一般クエリーログについてのパスワードの書き換えは、--log-raw オプションでサーバーを起動することによって抑制できます。このオプションは、サーバーによって受け取られるステートメントの正確なテキストを表示する際の診断目的で役立つ場合がありますが、セキュリティー上の理由で本番用途では推奨されません。

MySQL 5.6.3 より前では、ステートメント内のパスワードは書き換えられないため、一般クエリーログを保護するようにしてください。セクション6.1.2.3「パスワードおよびロギング」を参照してください。

MySQL 5.6.3 でのパスワード書き換えの導入による 1 つの影響として、(構文エラーなどが理由で) 構文解析できないステートメントがパスワードなしであることを認識できないため、一般クエリーログに書き込まれなくなるということがあります。エラーを持つものを含むすべてのステートメントのロギングを必要とする使用例では、--log-raw オプションを使用しますが、このオプションはパスワードの書き込みをバイパスすることにも留意してください。