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

6 minutos de lectura
0

He recibido el siguiente error al intentar escribir en una instancia de base de datos MySQL de Amazon Relational Database Service (Amazon RDS): «Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL» ¿Cómo puedo solucionar este error?

Descripción breve

Este error se produce con mayor frecuencia 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. Este error también puede deberse a una de las siguientes causas:

  1. La tabla que envía el mensaje de error es una tabla del motor MEMORY y ha alcanzado su tamaño máximo.
  2. La tabla es una tabla del motor MyISAM y ha alcanzado 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 se ha quedado sin espacio en disco.
  5. La tabla ha alcanzado el límite de tamaño de archivo.

Para obtener más información sobre los motores de almacenamiento compatibles con Amazon RDS, consulte Motores de almacenamiento compatibles con MySQL en Amazon RDS.

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 y compruebe el valor del motor:

mysql> show table status from database_name like 'table_name'\G

Si el valor de la variable data_length de la salida es mayor que el valor de la variable max_data_length, la tabla ha alcanzado su tamaño máximo. Esta es la causa del mensaje de error.

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. Asegúrese de no superar 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. Para obtener más información sobre la memoria disponible para la instancia de base de datos, consulte Tipos de instancias de Amazon RDS.

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 y compruebe el valor del motor:

mysql> show table status from database_name like 'table_name'\G

Puede resolver este error mediante 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. Puede usar diferentes tipos de particiones, como RANGE, LIST y HASH, para particionar la tabla en función de su caso de uso. Por ejemplo, puede truncar los datos antiguos en función del año en que los creó o puede crear particiones independientes para cada año. Para obtener más información, consulte Límites de tamaño de archivo de MySQL y la documentación de MySQL sobre particiones.

Importante: Pruebe a consciencia el impacto que la partición podría tener en su aplicación antes de implementar los cambios en un entorno de producción.

Puede convertir una tabla existente en una tabla particionada mediante un comando alter table similar al siguiente:

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

Nota: La conversión de una tabla existente en una tabla particionada no recupera el espacio asignado para el espacio de tablas InnoDB. Para recuperar el espacio de InnoDB, consulte ¿Cómo puedo solucionar los problemas con mi instancia de base de datos MySQL de Amazon RDS que 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, añada más espacio de almacenamiento a su instancia de base de datos. Para obtener más información, consulte La instancia de base de datos de Amazon RDS se está quedando sin espacio de almacenamiento.

Si lo desea, puede supervisar el espacio de almacenamiento disponible para la instancia de base de datos mediante la métrica de Amazon CloudWatch FreeStorageSpace. Para obtener más información, consulte la Información general de la supervisión de Amazon RDS. También puede suscribirse a las notificaciones de eventos de Amazon RDS de almacenamiento bajo para recibir un aviso cuando la instancia de base de datos consuma más del 90 % del almacenamiento asignado. Para obtener más información, consulte las Categorías y mensajes de eventos de Amazon RDS.

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 base de datos tomadas antes de abril de 2014, independientemente de cuándo se creó dicha instancia.

Si tiene una instancia de base de datos que tiene un límite de tamaño inferior, puede volcar sus datos MySQL mediante mysqldump. A continuación, importe los datos a una nueva instancia de base de datos que tenga 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?