Amazon RDS for MySQL の使用時に発生する MySQL HA_ERR_RECORD_FILE_FULL エラーのトラブルシューティング方法を教えてください。

所要時間2分
0

MySQL DB インスタンスの Amazon Relational Database Service (Amazon RDS) またはリードレプリカに書き込む際に、エラーが発生します。MySQL 用 Amazon RDS の DB インスタンスでは、次のメッセージが表示されます。 ERROR 1114 (HY000): The table 'Table Name' is full. リードレプリカでは、[スレーブステータスの表示] (Amazon RDS for MySQL 5.7) または [レプリカステータスの表示] (Amazon RDS for MySQL 8.0) の Last_Error フィールドに次のメッセージが表示されます。 Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL

簡単な説明

これらのエラーは、レプリケーションが失敗する原因となるリードレプリカで発生したり、データの書き込み先であるテーブルに空きがない場合に発生したりします。次の問題により、このエラーが発生する場合もあります。

  1. エラーメッセージを送信するテーブルが MEMORY エンジンテーブルであり、最大サイズに達している。
  2. テーブルが MyISAM エンジンテーブルであり、最大ポインタサイズに達している。
  3. テーブルは InnoDB エンジンを使用しており、InnoDB テーブルスペースファイルに空きがない。
  4. Amazon RDS DB インスタンスのディスク容量が不足している。
  5. テーブルがファイルサイズの制限に達している。

詳細については、「RDS for MySQL でサポートされるストレージエンジン」を参照してください。

解決策

MEMORY エンジンテーブルが最大サイズに達している

MEMORY エンジンテーブルが最大サイズに達していることを確認するには、次の例に類似したコマンドを実行します。

mysql> show table status from database_name like <YourTableName>\G

出力で data_length の値が max_data_length の値よりも大きい場合、テーブルは最大サイズに達しています。

このエラーを解決するには、DB インスタンスに関連付けられているカスタムパラメータグループで max_heap_table_size パラメータのサイズを増やします。詳細については、「Amazon RDS で DB パラメータグループを作成する」を参照してください。使用する DB インスタンスクラスに基づく DB インスタンスクラスのメモリ制限を超えないようにしてください。

MyISAM エンジンテーブルが最大ポインタサイズに達している

MyISAM エンジンテーブルが最大ポインタサイズに達しているかどうかを確認するには、次の例に類似したコマンドを実行します。

mysql> show table status from database_name like <YourTableName>\G

このエラーを解決するには、ALTER TABLE コマンドを実行し、既存のテーブルの最大サイズを変更します。

mysql> ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;

必要に応じて、すべての MyISAM テーブルでデフォルトのサイズ制限を変更してもかまいません。次に、カスタム DB パラメータグループの myisam_data_pointer_size パラメータをより高い値に設定します。

InnoDB テーブルスペースファイルに空きがない

InnoDB テーブルの最大テーブルスペースサイズは 40 億ページ (16 TB) です。テーブルが 1 TB を超える場合、テーブルを複数のテーブルスペースファイルに分割すると対処できます。ユースケースに応じて、テーブルを RANGELISTHASH で分割します。たとえば、作成した年に基づいて古いデータを切り捨てたり、年ごとに個別のパーティションを作成したりします。詳細については、「Amazon RDS における MySQL のファイルサイズ制限」および、パーティショニングに関する MySQL ドキュメントを参照してください。

重要: 本番環境で変更を実装する前に、パーティショニングがアプリケーションに及ぼす影響を十分にテストしてください。

既存のテーブルを分割テーブルに変換するには、次の例のような ALTER TABLE ステートメントを使用します。

ALTER TABLE table_name
PARTITION BY HASH(id)
PARTITIONS 8;

注: 既存のテーブルを分割テーブルに変換しても、InnoDB テーブルスペースに割り当てられた領域は回復されません。InnoDB スペースの回復方法については、「Amazon RDS for MySQL インスタンスが想定よりも多くのストレージを使用している理由を教えてください」を参照してください。

Amazon RDS DB インスタンスのディスク容量が不足している

Amazon RDS DB の状態が STORAGE_FULL である場合、HA_ERR_RECORD_FILE_FULL エラーが発生します。このエラーを解決するには、DB インスタンスにストレージ容量を追加します。

必要に応じて、Amazon CloudWatch の FreeStorageSpace メトリクスを使用すると使用可能なストレージ容量を監視できます。Amazon RDS の low storage イベント通知にサブスクライブして確認することもできます。こうすると、DB インスタンスが割り当てられたストレージの 90% 以上を消費した際に通知が送信されます。

テーブルがファイルサイズの制限に達している

注: 既存の DB インスタンスには下限があるものもあります。たとえば、2014 年 4 月より前に作成された MySQL DB インスタンスのファイルとテーブルのサイズ制限は 2 TB です。この 2 TB のファイルサイズ制限は、2014 年 4 月以前に取得した DB スナップショットから作成された DB インスタンスまたはリードレプリカにも適用されます。この制限は、DB インスタンスを作成した時期に関係なく適用されます。

サイズ制限の低い DB インスタンスがある場合は、mysqldump を使用してデータの MySQL ダンプを作成します。次に、制限の大きい新しい DB インスタンスにデータをインポートします。

関連情報

Amazon RDS DB インスタンスのストレージが不足したときに発生する問題を解決する方法を教えてください

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ