如何对使用 Amazon RDS for MySQL 时出现的“MySQL HA_ERR_RECORD_FILE_FULL”错误进行故障排除?

2 分钟阅读
0

当我写入 Amazon Relational Database Service (Amazon RDS) for MySQL 数据库实例或只读副本时,我收到了错误。在 Amazon RDS for MySQL 数据库实例上,我收到以下错误: “错误 1114 (HY000): 表 'Table Name' 已满。” 在只读副本上,在 show slave status (Amazon RDS for MySQL 5.7) 或 show replica status (Amazon RDS for MySQL 8.0) 的 Last_Error 字段中,我收到以下错误: “Error_code: 1114;处理程序错误 HA_ERR_RECORD_FILE_FULL”

简短描述

这些错误会出现在导致复制失败的只读副本上,或者在写入数据的表已满时出现。以下问题也可能会导致此错误:

  1. 发送错误消息的表是 MEMORY 引擎表,且达到了其最大大小。
  2. 表是 MyISAM 引擎表,且达到了最大指针大小。
  3. 表使用 InnoDB 引擎,且 InnoDB 表空间文件已满。
  4. Amazon RDS 数据库实例的磁盘空间不足。
  5. 表达到了文件大小限制。

有关详细信息,请参阅支持的 RDS for MySQL 存储引擎

解决方法

MEMORY 引擎表达到了其最大大小

要确认 MEMORY 引擎表是否已达到其最大大小,请运行类似于以下示例的命令:

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

如果输出中 data_length 的值大于 max_data_length 的值,则表示表已达到其最大大小。

要解决此错误,请增加与数据库实例关联的自定义参数组中 max_heap_table_size 参数的大小。有关详细信息,请参阅在 Amazon RDS 中创建数据库参数组。不要超过基于您使用的数据库实例类设定的数据库实例类内存限制。

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 表的默认大小限制。然后,将自定义数据库参数组中的 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 数据库实例的磁盘空间不足

如果 Amazon RDS 数据库实例处于 STORAGE_FULL 状态,则您会收到“HA_ERR_RECORD_FILE_FULL”错误。要解决此错误,请向数据库实例添加更多存储空间

或者,您可以使用 Amazon CloudWatch 指标 FreeStorageSpace监控可用存储空间。您还可以订阅 Amazon RDS 的存储空间不足事件通知。当数据库实例消耗的已分配存储空间超过 90% 时,会向您发送通知。

该表已达到文件大小限制

**注意:**一些现有数据库实例的限制较低。例如,在 2014 年 4 月之前创建的 MySQL 数据库实例的文件和表大小限制为 2 TB。此 2 TB 文件大小限制也适用于从 2014 年 4 月之前拍摄的数据库快照创建的数据库实例或只读副本。无论您何时创建数据库实例,此限制均适用。

如果您的数据库实例的大小限制较低,请使用 mysqldump 对数据进行 MySQL 转储。然后,将数据导入到具有更高限制的新数据库实例中。

相关信息

如何解决 Amazon RDS 数据库实例用尽存储空间时出现的问题?

AWS 官方
AWS 官方已更新 2 年前