MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
MySQL Server では、一般クエリーログおよびスロークエリーログが有効になっている場合は、それらのログに書き込まれる出力先を柔軟に制御できます。 ログエントリに使用可能な宛先は、ログファイル、または mysql
システムデータベース内の general_log
テーブルと slow_log
テーブルです。 ファイル出力またはテーブル出力、あるいはその両方を選択できます。
log_output
システム変数は、ログ出力の出力先を指定します。 この変数を単独で設定してもログは有効になりません。個別に有効にする必要があります。
起動時に log_output
が指定されていない場合、デフォルトのロギング先は FILE
です。
起動時に log_output
が指定された場合、その値は TABLE
(テーブルに記録)、FILE
(ファイルに記録) または NONE
(テーブルまたはファイルに記録しない) から選択されたカンマ区切りの単語のリストです。 NONE
がある場合は、ほかの指定子よりも優先されます。
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 TABLE
、ALTER TABLE
、および DROP TABLE
はログテーブル上での有効な操作です。 ALTER TABLE
および DROP TABLE
の場合、ログテーブルは使用中であってはならず、あとで説明するように無効にする必要があります。
デフォルトでは、ログテーブルは、カンマ区切り値形式でデータを書き込む CSV
ストレージエンジンを使用します。 ログテーブルデータを含む .CSV
ファイルにアクセスするユーザーの場合、CSV 入力を処理できるスプレッドシートなどのほかのプログラムにファイルを簡単にインポートできます。
ログテーブルは、MyISAM
ストレージエンジンを使用するように変更することができます。 使用中のログテーブルを変更するために、ALTER TABLE
を使用することはできません。 ログを最初に無効にする必要があります。 CSV
または MyISAM
以外のすべてのエンジンは、ログテーブルについて適正ではありません。
ログテーブルおよび「「開いているファイルが多すぎます」」エラー.
ログの宛先として TABLE
を選択し、ログテーブルが CSV
ストレージエンジンを使用している場合、一般クエリーログまたはスロークエリーログを実行時に繰り返し無効にして有効にすると、.CSV
ファイル用に多数のオープンファイル記述子が生成され、「「開いているファイルが多すぎます」」エラーが発生する可能性があります。 この問題を回避するには、FLUSH TABLES
を実行するか、open_files_limit
の値が table_open_cache_instances
の値より大きいことを確認します。
ログテーブルを変更 (または削除) できるようにロギングを無効化するには、次の方法を使用することができます。 この例では一般クエリーログを使用しており、スロークエリーログについての手順も類似していますが、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
をログテーブル上で使用することはできません。
INSERT
、DELETE
、および UPDATE
をログテーブル上で使用することはできません。 これらの操作は、サーバー自体の内部でのみ許可されます。
FLUSH TABLES WITH READ LOCK
および read_only
システム変数の状態は、ログテーブルには影響しません。 サーバーは常にログテーブルに書き込むことができます。
ログテーブルに書き込まれたエントリはバイナリログに書き込まれないため、複製に複製されません。
ログテーブルまたはログファイルをフラッシュするには、FLUSH TABLES
または FLUSH LOGS
をそれぞれ使用します。
ログテーブルのパーティション化は許可されません。
mysqldump ダンプには、ダンプファイルのリロード後に欠落しないように、これらのテーブルを再作成するステートメントが含まれています。 ログテーブルの内容はダンプされません。