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


MySQL 5.6 リファレンスマニュアル  /  ...  /  一般クエリーログおよびスロークエリーログの出力先の選択

5.2.1 一般クエリーログおよびスロークエリーログの出力先の選択

MySQL Server では、一般クエリーログおよびスロークエリーログが有効化されている場合、これらのログへの出力先を柔軟に制御できます。ログエントリの可能な出力先は、ログファイル、または mysql データベース内の general_log および slow_log テーブルです。いずれかまたは両方の出力先を選択できます。

サーバー起動時のログ制御。--log-output オプションは、ログ出力の出力先を指定します。このオプション自体はログを有効化しません。この構文は、--log-output[=value,...] です。

  • --log-output に値が指定される場合、値は TABLE (テーブルへのログ)、FILE (ファイルへのログ)、または NONE (テーブルにもファイルにもログを出力しない) のうち 1 つ以上の単語のカンマ区切りリストにします。NONE がある場合は、ほかの指定子よりも優先されます。

  • --log-output が省略された場合、デフォルトのロギング出力先は、FILE です。

general_log システム変数は、選択されたログ出力先についての一般クエリーログへのロギングを制御します。サーバー起動時に指定された場合、general_log は、ログを有効化または無効化するためのオプション引数 1 または 0 を取ります。ファイルロギングについて、デフォルト以外のファイル名を指定するには、general_log_file 変数を設定します。同様に、slow_query_log 変数は、選択された出力先についてのスロークエリーログへのロギングを制御し、slow_query_log_file の設定は、ファイルロギングのためのファイル名を指定します。いずれかのログが有効化された場合、サーバーは対応するログファイルを開き、ログファイルに起動メッセージを書き込みます。ただし、FILE ログの出力先が選択されないかぎり、ファイルに対するそれ以上のクエリーのロギングは実行されません。

例:

  • 一般クエリーログエントリをログテーブルおよびログファイルに書き込むには、--log-output=TABLE,FILE を使用して両方のログ出力先を選択し、--general_log を使用して、一般クエリーログを有効化します。

  • 一般クエリーログエントリおよびスロークエリーログエントリをログテーブルにのみ書き込むには、--log-output=TABLE を使用してテーブルをログ出力先として選択し、--general_log および --slow_query_log を使用して両方のログを有効化します。

  • スロークエリーログエントリをログファイルにのみ書き込むには、--log-output=FILE を使用してファイルをログ出力先として選択し、--slow_query_log を使用してスロークエリーログを有効化します。(この場合、デフォルトのログ出力先は FILE であるため、--log-output オプションを省略できます。)

実行時のログ制御。ログテーブルおよびファイルに関連付けられたシステム変数によって、ロギングへの実行時制御が可能になります。

  • グローバルな log_output システム変数は、現在のロギング出力先を示します。出力先を変更するために、これを実行時に変更できます。

  • グローバルな general_log および slow_query_log 変数は、一般クエリーログおよびスロークエリーログを有効化 (ON) または無効化 (OFF) するかどうかを指示します。これらの変数を実行時に設定して、ログを有効化するかどうかを制御することができます。

  • グローバルな general_log_file および slow_query_log_file 変数は、一般クエリーログファイルおよびスロークエリーログファイルの名前を指示します。これらの変数をサーバー起動時または実行時に設定して、ログファイルの名前を変更することができます。

  • 現在の接続のための一般クエリーロギングを無効化または有効化するには、セッションの sql_log_off 変数を ON または OFF に設定します。

ログ出力用のテーブルを使用することには、次の利点があります。

  • ログエントリが標準形式を持ちます。ログテーブルの現在の構造を表示するには、次のステートメントを使用します。

    SHOW CREATE TABLE mysql.general_log;
    SHOW CREATE TABLE mysql.slow_log;
  • ログ内容に SQL ステートメントを使用してアクセスできます。これにより、特定の基準を満たすログエントリのみ選択するクエリーを使用することができます。たとえば、特定のクライアントに関連したログ内容を選択するには (そのクライアントからの問題のあるクエリーを特定するために役立つことがあります)、ログファイルよりもログテーブルを使用して行う方が簡単です。

  • サーバーに接続してクエリーを発行できるすべてのクライアントを介して、ログにリモートからアクセスできます (クライアントが適切なログテーブル権限を持つ場合)。サーバーホストにログインしてファイルシステムに直接アクセスする必要はありません。

ログテーブルの実装には次の特徴があります。

  • 一般的に、ログテーブルの主な目的は、サーバーのランタイム実行を観察するユーザーにインタフェースを提供することで、サーバーのランタイム実行を妨げません。

  • CREATE TABLEALTER TABLE、および DROP TABLE はログテーブル上での有効な操作です。ALTER TABLE および DROP TABLE の場合、ログテーブルは使用中であってはならず、あとで説明するように無効にする必要があります。

  • デフォルトでは、ログテーブルは、カンマ区切り値形式でデータを書き込む CSV ストレージエンジンを使用します。ログテーブルデータを含む .CSV ファイルにアクセスするユーザーの場合、CSV 入力を処理できるスプレッドシートなどのほかのプログラムにファイルを簡単にインポートできます。

    ログテーブルは、MyISAM ストレージエンジンを使用するように変更することができます。使用中のログテーブルを変更するために、ALTER TABLE を使用することはできません。ログを最初に無効にする必要があります。CSV または MyISAM 以外のすべてのエンジンは、ログテーブルについて適正ではありません。

  • ログテーブルを変更 (または削除) できるようにロギングを無効化するには、次の方法を使用することができます。この例では一般クエリーログを使用しており、スロークエリーログについての手順も類似していますが、slow_log テーブルおよび slow_query_log システム変数を使用します。

    SET @old_log_state = @@global.general_log;
    SET GLOBAL general_log = 'OFF';
    ALTER TABLE mysql.general_log ENGINE = MyISAM;
    SET GLOBAL general_log = @old_log_state;
  • TRUNCATE TABLE は、ログテーブル上での有効な操作です。ログエントリを期限切れにするために使用できます。

  • RENAME TABLE は、ログテーブル上での有効な操作です。次の方法を使用して、(たとえばログローテーションを実行するために) ログテーブルを原子的に名前変更できます。

    USE mysql;
    DROP TABLE IF EXISTS general_log2;
    CREATE TABLE general_log2 LIKE general_log;
    RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
  • CHECK TABLE は、ログテーブル上での有効な操作です。

  • LOCK TABLES をログテーブル上で使用することはできません。

  • INSERTDELETE、および UPDATE をログテーブル上で使用することはできません。これらの操作は、サーバー自体の内部でのみ許可されます。

  • FLUSH TABLES WITH READ LOCK およびグローバルな read_only システム変数の状態は、ログテーブルに影響を及ぼしません。サーバーは常にログテーブルに書き込むことができます。

  • ログテーブルに書き込まれたエントリはバイナリログに書き込まれないため、スレーブサーバーにレプリケーションされません。(MySQL 5.6.9 より前では、これは常に正しく強制されるわけではありませんでした。Bug #14741537 を参照してください。)

  • ログテーブルまたはログファイルをフラッシュするには、FLUSH TABLES または FLUSH LOGS をそれぞれ使用します。

  • ログテーブルのパーティション化は許可されません。

  • MySQL 5.6.6 より前では、mysqldumpmysql データベースのダンプとして general_log テーブルも slow_query_log テーブルもダンプしません。5.6.6 以降では、ダンプにはそれらのテーブルを再作成するためのステートメントが含まれているため、ダンプファイルを再ロードしたあとにそれらのテーブルが失われません。ログテーブルの内容はダンプされません。


User Comments
Sign Up Login You must be logged in to post a comment.