¿Cómo puedo solucionar el error «MySQL HA_ERR_RECORD_FILE_FULL» al utilizar Amazon RDS para MySQL?

5 minutos de lectura
0

Cuando escribo en una instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para una instancia de base de datos MySQL o leo réplicas, aparece un error. En la instancia de base de datos de Amazon RDS para MySQL, aparece lo siguiente: «ERROR 1114 (HY000): la tabla "table-name" está llena». Al leer réplicas, en el campo Last_Error de show slave status (Amazon RDS para MySQL 5.7) o show replica status (Amazon RDS para MySQL 8.0), aparece lo siguiente: «Error_code: 1114; error de controlador HA_ERR_RECORD_FILE_FULL»

Descripción corta

Este error se produce en las réplicas de lectura que provocan un error en la replicación o cuando la tabla en la que se escriben los datos está llena. Los siguientes problemas también provocan este error:

  1. La tabla que envía el mensaje de error es una tabla del motor MEMORY y alcanza su tamaño máximo.
  2. La tabla es una tabla del motor MyISAM y alcanza el tamaño máximo de puntero.
  3. La tabla usa el motor InnoDB y el archivo de espacio de tablas InnoDB está lleno.
  4. La instancia de base de datos de Amazon RDS no tiene espacio en disco.
  5. La tabla alcanza el límite de tamaño de archivo.

Para obtener más información, consulte Motores de almacenamiento compatibles con RDS para MySQL.

Resolución

La tabla del motor MEMORY ha alcanzado su tamaño máximo

Para confirmar que la tabla del motor MEMORY ha alcanzado su tamaño máximo, ejecute un comando similar al siguiente ejemplo:

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

Si el valor de data_length de la salida es mayor que el valor de max_data_length, la tabla ha alcanzado su tamaño máximo.

Para resolver este error, aumente el tamaño del parámetro max_heap_table_size del grupo de parámetros personalizado asociado a la instancia de base de datos. Para obtener más información, consulte Creación de un grupo de parámetros de base de datos en Amazon RDS. No supere el límite de memoria de la clase de instancia de base de datos que se basa en la clase de instancia de base de datos que utiliza.

La tabla del motor MyISAM ha alcanzado el tamaño máximo del puntero

Para confirmar que la tabla del motor MyISAM ha alcanzado el tamaño máximo del puntero, ejecute un comando similar al siguiente:

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

Para resolver este error, use el comando ALTER TABLE para modificar el tamaño máximo de la tabla existente:

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

Si lo desea, puede cambiar el límite de tamaño predeterminado para todas las tablas de MyISAM. A continuación, defina el parámetro myisam_data_pointer_size en su grupo de parámetros de base de datos personalizado en un valor superior.

El archivo de espacio de tablas InnoDB está lleno

El tamaño máximo del espacio de tablas para una tabla InnoDB es de cuatro mil millones de páginas (16 TB). Puede particionar tablas en varios archivos de espacio de tablas para tablas de más de 1 TB. Particione la tabla mediante RANGE, LIST y HASH, según su caso de uso. Por ejemplo, trunque los datos antiguos en función del año en que los creó o cree particiones independientes para cada año. Para obtener más información, consulte Límites de tamaño de archivo de MySQL en Amazon RDS y la documentación de MySQL sobre particiones.

Importante: Antes de implementar cambios en un entorno de producción, pruebe minuciosamente los efectos que las particiones pueden tener en su aplicación.

Para convertir una tabla existente en una tabla particionada, use un comando ALTER TABLE similar al siguiente ejemplo:

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

Nota: Cuando convierte una tabla existente en una tabla particionada, no recupera el espacio asignado al espacio de tablas InnoDB. Para recuperar el espacio de InnoDB, consulte ¿Por qué mi instancia de base de datos de Amazon RDS para MySQL utiliza más almacenamiento del esperado?

La instancia de base de datos de Amazon RDS no tiene espacio en disco

Si la instancia de base de datos de Amazon RDS se encuentra en el estado STORAGE_FULL, recibirá el error «HA_ERR_RECORD_FILE_FULL». Para resolver este error, agregue más espacio de almacenamiento a su instancia de base de datos.

Si lo desea, puede usar la métrica FreeStorageSpace de Amazon CloudWatch para supervisar el espacio de almacenamiento disponible. También puede suscribirse a la notificación de eventos de Amazon RDS con poco almacenamiento. Esto le notifica cuando la instancia de base de datos consume más del 90 % del almacenamiento asignado.

La tabla ha alcanzado el límite de tamaño de archivo

Nota: Algunas instancias de base de datos existentes tienen un límite inferior. Por ejemplo, las instancias de base de datos MySQL creadas antes de abril de 2014 tienen un límite de tamaño de archivo y tabla de 2 TB. Este límite de tamaño de archivo de 2 TB también se aplica a las instancias de base de datos o réplicas de lectura creadas a partir de instantáneas de bases de datos tomadas antes de abril de 2014. El límite se aplica independientemente de cuándo haya creado la instancia de base de datos.

Si tiene una instancia de base de datos con un límite de tamaño inferior, utilice mysqldump para hacer un volcado de sus datos en MySQL. A continuación, importe los datos a una nueva instancia de base de datos con un límite superior.

Información relacionada

¿Cómo puedo solucionar los problemas que surgen cuando las instancias de base de datos de Amazon RDS se quedan sin almacenamiento?