メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

MySQL データベースログファイル

MySQL エラーログ、スロークエリログ、一般ログをモニタリングできます。MySQL エラーログはデフォルトで生成されます。DB パラメータグループのパラメーターを設定することで、スロークエリと一般ログを生成できます。Amazon RDS では、すべての MySQL ログファイルはローテーションされます。次に、ログファイルのタイプごとのローテーション間隔を示します。

MySQL ログは、Amazon RDS コンソール、Amazon RDS API、Amazon RDS CLI、または AWS SDK を通じて直接モニタリングできます。また、ログをメインデータベースのデータベーステーブルに書き込み、そのテーブルに対してクエリを実行することで、MySQL ログにアクセスできます。mysqlbinlog ユーティリティを使用して、バイナリログをダウンロードできます。

ファイルベースのデータベースログの表示、ダウンロード、監視の詳細については、「Amazon RDS データベースログファイル」を参照してください。

MySQL エラーログにアクセスする

MySQL エラーログは mysql-error.log ファイルに書き込まれます。mysql-error.log を表示するには、Amazon RDS コンソールを使用するか、Amazon RDS API、Amazon RDS CLI、または AWS SDK を使用してログを取得します。mysql-error.log は 5 分ごとにフラッシュされ、その内容は mysql-error-running.log に追加されます。その後、mysql-error-running.log ファイルは 1 時間ごとにローテーションされ、直前 24 時間内に 1 時間ごとに生成されたファイルが保持されます。各ログファイルには、それぞれ生成された時間 (UTC) がファイル名に付加されます。ログファイルには、タイムスタンプも付加され、ログエントリがいつ書き込まれたかを調べるために役立ちます。

MySQL では、起動時、シャットダウン時、エラー検出時にのみエラーログへの書き込みが行われます。DB インスタンスでは、新しいエントリがエラーログに書き込まれないまま、数時間または数日が経過することがあります。最近のエントリがない場合、それは、サーバーにログエントリになり得るエラーが発生しなかったためです。

MySQL のスロークエリと一般ログにアクセスする

MySQL のスロークエリログと一般ログは、DB パラメータグループのパラメーターを設定することで、ファイルまたはデータベーステーブルに書き込むことができます。DB パラメータグループの作成と変更の詳細については、「DB パラメータグループを使用する」を参照してください。スロークエリログまたは一般ログを表示する前に、以下のパラメーターを設定する必要があります。そのためには、Amazon RDS コンソールを使用するか、Amazon RDS API、Amazon RDS CLI、または AWS SDK を使用します。

以下のリストに示すパラメーターを使用して MySQL のログ記録を制御できます。

  • slow_query_log: スロークエリログを作成するには、1 に設定します。デフォルトは 0 です。

  • general_log: 一般ログを作成するには、1 に設定します。デフォルトは 0 です。

  • long_query_time: ファストクエリがスロークエリログに記録されないようにするために、ログに記録されるクエリの最短実行時間の値を秒単位で指定します。デフォルトは 10 秒で、最小値は 0 です。log_output = FILE の場合は、マイクロ秒の精度になるように、浮動小数点値を指定できます。log_output = TABLE の場合は、秒の精度になるように、整数値を指定する必要があります。実行時間が long_query_time の値を超えたクエリのみがログに記録されます。たとえば、long_query_time を 0.1 に設定すると、実行時間が 100 ミリ秒未満のすべてのクエリはログに記録されなくなります。

  • log_queries_not_using_indexes: インデックスを使用しないすべてのクエリをスロークエリログに記録するには、1 に設定します。デフォルトは 0 です。インデックスを使用しないクエリは、その実行時間が long_query_time パラメーターの値未満であってもログに記録されます。

  • log_output option: log_output パラメーターに指定できるオプションは、次のとおりです。

    • TABLE (デフォルト) – 一般クエリを mysql.general_log テーブルに、スロークエリを mysql.slow_log テーブルに書き込みます。

    • FILE – 一般クエリログとスロークエリログの両方をファイルシステムに書き込みます。ログファイルは 1 時間ごとにローテーションされます。

    • NONE – ログ記録を無効にします。

ログ記録が有効になっている場合、Amazon RDS は、テーブルログのローテーションまたはログファイルの削除を定期的に実行します。これは、ログファイルが大きくなることでデータベースが使用できなくなったりパフォーマンスに影響する可能性を低く抑えるための予防措置です。ログ記録の FILE オプションと TABLE オプションでは、ローテーションと削除が次のように行われます。

  • FILE ログ記録が有効になっている場合、ログファイルの検査が 1 時間ごとに実行され、作成後 24 時間を超えた古いログファイルは削除されます。削除後、残りのログファイルの合計サイズが、DB インスタンスに割り当てられた領域の 2 パーセントというしきい値を超えている場合、ログファイルのサイズがしきい値以下になるまで、最も大きいログファイルから順に削除されます。

  • TABLE ログ記録が有効になっている場合は、テーブルログに使用されている領域が、割り当てられたストレージ領域の 20% を超えるか、すべてのログの合計サイズが 10 GB を超えると、24 時間ごとにログテーブルのローテーションが実行されます。DB インスタンスに使用されている領域が、DB インスタンスに割り当てられたストレージ領域の 90% を超えている場合は、ログのローテーションを実行するためのしきい値が小さくなります。テーブルログに使用されている領域が、割り当てられたストレージ領域の 10% を超えるか、すべてのログの合計サイズが 5 GB を超えると、ログテーブルのローテーションが実行されます。low_free_storage にサブスクライブして、ログテーブルのローテーションが実行されて領域が解放されたときに通知を受け取ることができます。詳細については、「Amazon RDS イベント通知の使用」を参照してください。

    ログテーブルのローテーションが実行されると、現在のログテーブルがバックアップのログテーブルにコピーされ、現在のログテーブル内にあるエントリは削除されます。バックアップのログテーブルがすでに存在する場合は、現在のログテーブルをバックアップにコピーする前に、削除されます。バックアップのログテーブルは、必要に応じて照会することができます。mysql.general_log テーブルに対するバックアップのログテーブルは、mysql.general_log_backup という名前になります。mysql.slow_log テーブルに対するバックアップのログテーブルは、mysql.slow_log_backup という名前になります。

    mysql.general_log テーブルのローテーションは、mysql.rds_rotate_general_log プロシージャを呼び出すことで実行できます。mysql.slow_log テーブルのローテーションは、mysql.rds_rotate_slow_log プロシージャを呼び出すことで実行できます。

    データベースバージョンのアップグレード時にも、テーブルログのローテーションが実行されます。

Amazon RDS コンソール、Amazon RDS API、Amazon RDS CLI、または AWS SDK からログを使用するには、log_output パラメーターを FILE に設定します。MySQL エラーログと同様、これらのログファイルは 1 時間ごとにローテーションされます。直前 24 時間以内に生成されたログファイルが保持されます。

スロークエリと一般ログの詳細については、MySQL のドキュメントの以下のトピックを参照してください。

ログファイルのサイズ

MySQL のスロークエリログ、エラーログ、一般ログファイルのサイズは、DB インスタンスに割り当てられたストレージ領域の 2 パーセント以下に制約されます。 このしきい値を維持するために、ログは 1 時間ごとに自動的にローテーションされ、24 時間以上前の古いログファイルは削除されます。古いログファイルを削除した後、ログファイルの合計サイズがしきい値を超えている場合、ログファイルのサイズがしきい値以下になるまで、最も大きいログファイルから順に削除されます。

MySQL バージョン 5.6.20 以降では、redo ログに書き込まれる BLOB にサイズ制限があります。この制限に対処するには、MySQL DB インスタンスの innodb_log_file_size パラメータを、テーブル内で最も大きい BLOB データサイズに、同テーブル内の他の可変長フィールド (VARCHARVARBINARYTEXT) を足した長さより 10 倍大きくします。パラメータ値を設定する方法については、「DB パラメータグループを使用する」を参照してください。redo ログの BLOB サイズ制限については、「MySQL 5.6.20 の変更点」を参照してください。

テーブルベースの MySQL ログを管理する

DB パラメータグループを作成し、log_output サーバーパラメーターを TABLE に設定することで、DB インスタンス上のテーブルに一般ログとスロークエリログを書き込むことができます。その後、一般クエリは mysql.general_log テーブルに記録され、スロークエリは mysql.slow_log テーブルに記録されます。それらのテーブルに対してクエリを実行することでログの情報にアクセスできます。このログ記録を有効にすると、データベースに書き込まれるデータの量が増え、パフォーマンスが低下することがあります。

一般ログもスロークエリログもデフォルトで無効になっています。テーブルへのログ記録を有効にするには、general_logslow_query_log のサーバーパラメーターを 1 に設定する必要があります。

ログテーブルは、それぞれのログ記録アクティビティの該当するパラメーターを 0 にリセットしてログ記録をオフにするまで、拡大し続けます。大量のデータが長期にわたって蓄積されることがよくあり、割り当てストレージ領域の大部分を使い果たすことがあります。Amazon RDS では、ログテーブルを切り捨てることはできませんが、その内容を移動することはできます。テーブルのローテーションにより、その内容がバックアップテーブルに保存され、新しい空のログテーブルが作成されます。以下のコマンドラインプロシージャを使用して、ログテーブルを手動でローテーションされることができます。ここで表示されている PROMPT> はコマンドプロンプトです。

Copy
PROMPT> CALL mysql.rds_rotate_slow_log; PROMPT> CALL mysql.rds_rotate_general_log;

以前のデータを完全に削除し、ディスク領域を再利用するには、該当するプロシージャを 2 回連続で呼び出します。

バイナリログ形式

Amazon RDS の MySQL では、MySQL バージョン 5.6 以降用に行ベース混合のバイナリログ形式がサポートされています。デフォルトのバイナリログ形式は混合です。MySQL バージョン 5.1 と 5.5 を実行する DB インスタンスの場合は、混合形式のバイナリログのみがサポートされています。MySQL のさまざまなバイナリログ形式の詳細については、MySQL リファレンスマニュアルの「バイナリログ形式」を参照してください。

重要

バイナリログ形式を行ベースに設定すると、バイナリログファイルが巨大になることがあります。巨大なバイナリログファイルにより、DB インスタンスの使用可能なストレージの量が減ります。また、DB インスタンスの復元オペレーションの実行にかかる時間が長くなることがあります。

MySQL バイナリログ形式を設定するには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. 左側のペインで、[Parameter Groups] をクリックします。

  3. default.mysql5.6 または default.mysql5.7 DB パラメータグループの場合は、[Go to Details Page] アイコンをクリックします。

  4. [Edit Parameters] ボタンをクリックして、DB パラメータグループのパラメーターを変更します。

  5. binlog_format パラメーターを、選択したバイナリログ形式 ([MIXED] または [ROW]) に設定します。

  6. [Save Changes] ボタンをクリックして、更新を DB パラメータグループに保存します。

重要

default.mysql5.6 または default.mysql5.7 DB パラメータグループを変更すると、そのパラメータグループを使用するすべての MySQL バージョン 5.6 DB インスタンスに影響を与えます。リージョン内の特定の MySQL 5.6 または 5.7 DB インスタンスに別のバイナリログ形式を指定する場合は、別のログ形式を指定した独自の DB パラメータグループを作成し、その DB パラメータグループを目的の DB インスタンスに割り当てる必要があります。

DB パラメータグループの詳細については、「DB パラメータグループを使用する」を参照してください。

MySQL バイナリログにアクセスする

mysqlbinlog ユーティリティを使用して、MySQL 5.6 以降を実行している Amazon RDS インスタンスからバイナリログをダウンロードまたはストリーミングできます。バイナリログはローカルコンピューターにダウンロードされ、mysql ユーティリティを使用してログの再生などの操作を実行できます。mysqlbinlog ユーティリティの使用の詳細については、「mysqlbinlog を使用してバイナリログファイルをバックアップする」を参照してください。

Amazon RDS インスタンスに対して mysqlbinlog ユーティリティを実行するには、以下のオプションを使用します。

  • --read-from-remote-server オプションを指定します。

  • --host: インスタンスのエンドポイントからの DNS 名を指定します。

  • --port: インスタンスによって使用されるポートを指定します。

  • --user: レプリケーションスレーブアクセス許可を付与された MySQL ユーザーを指定します。

  • --password: ユーザーのパスワードを指定するか、パスワード値を省略します。省略した場合、ユーティリティによってパスワードの入力を求められます。

  • ファイルをバイナリ形式でダウンロードするには、--raw オプションを指定します。

  • --result-file: raw 出力を受け取るローカルファイルを指定します。

  • 1 つ以上のバイナリログファイルの名前を指定します。使用可能なログのリストを取得するには、SQL コマンド SHOW BINARY LOGS を使用します。

  • バイナリログファイルをストリーミングするには、--stop-never オプションを指定します。

mysqlbinlog のオプションの詳細については、「mysqlbinlog - バイナリログファイル処理用ユーティリティ」を参照してください。

(例:

Linux、OS X、Unix の場合:

Copy
mysqlbinlog \ --read-from-remote-server \ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com \ --port=3306 \ --user ReplUser \ --password \ --raw \ --result-file=/tmp/ \ binlog.00098

Windows の場合:

Copy
mysqlbinlog ^ --read-from-remote-server ^ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com ^ --port=3306 ^ --user ReplUser ^ --password ^ --raw ^ --result-file=/tmp/ ^ binlog.00098

Amazon RDS では、通常、バイナリログはできる限り早く消去されますが、mysqlbinlog によってアクセスされるバイナリログはインスタンスで保持される必要があります。RDS でバイナリログを保持する時間数を指定するには、mysql.rds_set_configuration ストアドプロシージャを使用して、ログのダウンロードするのに十分な期間を指定します。保持期間を設定したら、DB インスタンスのストレージ使用状況をモニタリングして、保持されたバイナリログに必要以上の容量が使用されないようにします。

注記

mysql.rds_set_configuration ストアドプロシージャは、MySQL バージョン 5.6 以降でのみ使用できます。

この例では、保持期間を 1 日に設定しています。

Copy
call mysql.rds_set_configuration('binlog retention hours', 24);

現在の設定を表示するには、mysql.rds_show_configuration ストアドプロシージャを使用します。

Copy
call mysql.rds_show_configuration;