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

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

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

MySQL ログは、Amazon RDS コンソール、Amazon RDS API、AWS 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 ロギングを有効化すると、24 時間ごとにログテーブルのローテーションが実行される場合があります。このログテーブルのローテーションは、テーブルログに使用されている領域が、割り当てられたストレージ領域の 20 % を超えるか、すべてのログの合計サイズが 10 GB を超えると、実行されます。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 ログを CloudWatch Logs に発行する

Amazon RDS MySQL DB インスタンスを設定して、ログデータを Amazon CloudWatch Logs のロググループに発行することができます。CloudWatch Logs を使用すると、ログデータのリアルタイム分析や、CloudWatch を使用したアラームの作成、メトリクスの表示を行うことができます。CloudWatch Logs を使用して、耐久性が高いストレージにログレコードを格納できます。

Amazon RDS は、MySQL データベースログを、ロググループの別のデータストリームとしてそれぞれ発行します。たとえば、エクスポート機能を設定して、スロークエリログを作成すると、スロークエリデータは、/aws/rds/instance/my_instance/slowquery ロググループのスロークエリログストリームに保存されます。

注記

CloudWatch Logs へのログファイルの発行は、MySQL バージョン 5.6 および 5.7 でのみサポートされます。

コンソールを使用して CloudWatch Logs に MySQL ログを発行するには

  1. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。

  2. ナビゲーションペインで、[ Instances] を選択し、変更する DB インスタンスを選択します。

  3. [インスタンスの操作] で、[変更] を選択します。

  4. [ログのエクスポート] セクションで、CloudWatch Logs に公開するログを選択します。

  5. [続行] を選択し、概要ページで [Modify DB Instance] (DB インスタンスの変更) を選択します。

CLI を使用して CloudWatch Logs にログを発行する

MySQL ログは、AWS CLI を使用して発行することができます。以下のパラメータを使用して、modify-db-instance コマンドを呼び出せます。

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

  • --apply-immediately

以下の AWS CLI コマンドを呼び出すことで MySQL ログを発行することもできます。

以下のオプションでこの AWS CLI コマンドの 1 つを実行します。

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

実行する AWS CLI コマンドに応じて、他のオプションが必要となる場合があります。

次のコマンドでは、ログファイルが CloudWatch Logs に発行されるよう既存の MySQL DB インスタンスを変更します。

Linux、OS X、Unix の場合:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["error","general","audit","slowquery"]}' \ --apply-immediately

Windows の場合:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["error","general","audit","slowquery"]}' ^ --apply-immediately

次のコマンドでは、MySQL DB インスタンスを作成してログファイルを CloudWatch Logs に発行します。

Linux、OS X、Unix の場合:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["error","general","audit","slowquery"]' \ --db-instance-class db.m4.large \ --engine MySQL

Windows の場合:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["error","general","audit","slowquery"]' ^ --db-instance-class db.m4.large ^ --engine MySQL

RDS API を使用して CloudWatch Logs にログを発行する

RDS API を使用して MySQL ログを発行することができます。以下のパラメータを使用して、ModifyDBInstance アクションを呼び出せます。

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

  • ApplyImmediately

以下の RDS API アクションを呼び出すことで MySQL ログを発行することもできます。

以下のパラメータでこの RDS API アクションの 1 つを実行します。

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

実行する AWS CLI コマンドに応じて、他のパラメータが必要となる場合があります。

ログファイルのサイズ

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> はコマンドプロンプトです。

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. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。

  2. [ナビゲーション] ペインで、[パラメータグループ] を選択します。

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

  4. [Edit Parameters] を選択して、DB パラメータグループのパラメーターを変更します。

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

  6. [変更の保存] を選択して、更新を DB パラメータグループに保存します。

重要

default.mysql5.6 または default.mysql5.7 DB パラメータグループを変更すると、そのパラメータグループを使用するすべての MySQL バージョン 5.6 DB インスタンスに影響を与えます。AWS リージョン内の特定の 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 の場合:

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

Windows の場合:

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 日に設定しています。

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

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

call mysql.rds_show_configuration;