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;