無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.11 MySQL サーバ ログ :: 4.11.1 一般クエリとスロー クエリのログ出力先の選択
« 4.11 MySQL サーバ ログ

4.11.2 エラー ログ »
Section Navigation      [Toggle]
  • 4.11 MySQL サーバ ログ
  • 4.11.1 一般クエリとスロー クエリのログ出力先の選択
  • 4.11.2 エラー ログ
  • 4.11.3 一般クエリ ログ
  • 4.11.4 バイナリ ログ
  • 4.11.5 スロー クエリ ログ
  • 4.11.6 ログ ファイルの保守

4.11.1. 一般クエリとスロー クエリのログ出力先の選択

MySQL 5.1.6 前は、サーバではログ ファイルが一般クエリとスロー ログ クエリのエントリとして機能しています (有効の場合)。MySQL 5.1.6 からは、サーバで、柔軟性があるログ出力先の制御ができます。従来通り、ログ エントリをログ ファイルに書き込みますが、mysql データベースの general_log そして slow_log のテーブルにもエントリを書き込むことができます。ロギングを有効にすると、テーブルの出力先を選択することができます。両方選択することも可能です。

ロギングを有効にすると、--log-output オプションでログ出力先を指定できます。このオプションは、次のように --log-output[=value,...] というシンタックスの使い方をします。

  • 値を --log-output で指定すると、この値はカンマ区切りのリストになります。TABLE はログからテーブルへの出力、FILE はログからファイルへの出力。NONE はテーブルやファイルにログしないときに使用し、これはどのような指定子よりも優先になる。

  • --log-output を値なしで使用する、または省略すると、その効果は --log-output=TABLE に同じ。つまり、テーブルの出力先の選択が行われる、ということ。 これは、MySQL 5.1.6 前のファイルを使用したデフォルトの出力先とは異なる。

  • --log-output オプションは、log_output グローバル システム変数の値を指す。これはランタイムで変更ができ、実行中のサーバのログ先を変更できる。

注意

MySQL 5.1.6 以上のインストールでは、ログ テーブルをシステム テーブルなどと一緒に作成します。MySQL を 5.1.6 より古いリリース バージョンから MySQL 5.1.6 以上にアップグレードするときは、アップグレードを行なった後に、ログ テーブルがあるかどうかを確認するために、システム テーブルのアップグレードも行ってください。

MySQL 5.1.6 より、デフォルトのログ先がファイルからテーブルに変更します。ロギングをログ ファイルで行う設定になっている場合は、その設定を保存するために、5.1.6 以上にアップグレードを行なってから、--log-output=FILE を使用します。

--log[=file_name] を使用すると、一般クエリ ログのログ先を選択式で変更して、ロギングができます。同様に、--log-slow-queries[=file_name] を使用すると、スロー クエリ ログも選択式でログ先を変更できます。どちらのオプションでも、FILE の出力先を指定しない限り、ファイル名は無視になります。

--log または --log-slow-queries を指定する場合は、サーバが関連ログ ファイルを開き、スタートアップ メッセージを書き込みますが、ファイルへのクエリのロギングは、FILE ログ先を選択するまで始まりません。

例:

  • 一般クエリ エントリをログ テーブルとログ ファイルに書き込むには、--log-output=TABLE,FILE を使用して、両方の出力先を選択して、--log オプションで、一般クエリ ログを返す。

  • 一般クエリとスロー クエリのログをログ テーブルにだけ書き込むには、--log-output=TABLE でログ先のテーブルを選択し、--log と --log-slow-queries で両方のログを有効にする。この場合、デフォルトのログ出力先が TABLE になっているため、--log-output オプションを省略することも可能。

テーブルでのログ出力には、次のような利点があります。

  • ログ エントリが標準形式になる。ログ テーブルの現行のストラクチャを表示するには、次のステートメントを使用する。

    SHOW CREATE TABLE mysql.general_log;
    SHOW CREATE TABLE mysql.slow_log;
    
  • ログ内容は、SQL ステートメントでアクセス可能。これは、特定のクライテリアを充たすエントリを選択するという、クエリの使い方をすることができる。たとえば、特定のクライアントに関連するログ内容を選択することが簡単になるということ。これは、クライアントからの問題があるクエリを識別するときに役立つ。

  • サーバに接続し、クエリを出すクライアントからログにリモート アクセスできる。(これには、クライアントに適切なテーブル権限が必要。) サーバ ホストへのログイン、またはファイルシステムへの直接アクセスが不要になる。

  • TRUNCATE TABLE を使用して、ログ エントリに有効期限をつけることができる。

デフォルトでは、ログ テーブルへのデータ書き込みは CSV ストレージ エンジンへ、カンマ区切り形式で行います。ログ テーブルにデータがある .CSV ファイルへのアクセスができるユーザは、CSV を処理する表計算など別のプログラムへファイルを簡単にインポートできます。

MySQL 5.1.12 から、ログ テーブルは MyISAM ストレージ エンジン (メモリ) での使用に変更できます。使用中のログ テーブルを変更するために、ALTER TABLE を使用することはできません。その場合は、まずログを停止してください。ログ テーブルのエンジン (メモリ) には、CSV または MyISAM だけを使用してください。

ログ テーブルに DROP TABLE を使用することも同様に禁止です。使用中のログ テーブルをドロップすることはできません。まず、ログを停止してください。

ログを停止してから、ログ テーブルを変更するには、次の方法を取ります。

SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
SET GLOBAL slow_query_log = @old_log_state;

MySQL 5.1.12 から、FLUSH TABLES ではログ テーブルを出力しません。ログ テーブルをフラッシュするには、FLUSH LOGS を使用してください。

MySQL 5.1.13 から、ログのローテーションを行うときなどに、ログ テーブルをアトミックに改名できます。それには、次の方法を取ります。

USE mysql;
CREATE TABLE IF NOT EXISTS general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.