Comment résoudre l'erreur « MySQL HA_ERR_RECORD_FILE_FULL » lors de l'utilisation d'Amazon RDS for MySQL ?

Date de la dernière mise à jour : 30/11/2020

Suite à une tentative d'écriture dans une instance de base de données MySQL Amazon Relational Database Service (Amazon RDS), j'ai reçu le message d'erreur suivant :

« Error_code: 1114; handler error HA_ERR_RECORD_FILE_FULL »

Comment puis-je résoudre cette erreur ?

Brève description

Cette erreur se produit le plus souvent sur les réplicas en lecture qui provoquent l'échec de la réplication, ou lorsque la table dans laquelle les données sont écrites est pleine. Cette erreur peut également avoir l'une des causes suivantes :

  1. La table qui envoie le message d'erreur est une table de moteur MEMORY dont la capacité maximale a été atteinte.
  2. La table est une table de moteur MyISAM dont la capacité maximale du pointeur a été atteinte.
  3. La table utilise le moteur InnoDB et le fichier d'espace de table InnoDB est plein.
  4. L'instance de base de données Amazon RDS manque d'espace disque.
  5. La table a atteint sa taille de fichier maximale.

Pour plus d'informations sur les moteurs de stockage pris en charge par Amazon RDS, consultez Moteurs de stockage pris en charge par MySQL sur Amazon RDS.

Résolution

La table du moteur MEMORY a atteint sa taille maximale

Exécutez une commande similaire à celle qui suit et vérifiez la valeur du moteur pour confirmer que la table du moteur MEMORY a atteint sa taille maximale :

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

Si la valeur de la variable data_length dans la sortie est supérieure à la valeur de la variable max_data_length, alors la table a atteint sa taille maximale. Il s'agit de la cause du message d'erreur.

Vous pouvez résoudre cette erreur en augmentant la taille du paramètre max_heap_table_size dans le groupe de paramètres personnalisés associé à votre instance de base de données. Pour plus d'informations, consultez Création d'un groupe de paramètres de base de données. Veillez à ne pas dépasser la limite de mémoire de la classe d'instance de base de données. Elle est fonction de la classe d'instance de base de données que vous utilisez. Pour plus d'informations sur la mémoire disponible pour votre instance de base de données, consultez Types d'instances Amazon RDS.

La taille maximale du pointeur de la table de moteur MyISAM a été atteinte

Exécutez une commande similaire à celle qui suit et vérifiez la valeur du moteur pour confirmer que la taille maximale du pointeur de la table du moteur MyISAM a été atteinte :

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

Vous pouvez résoudre cette erreur en utilisant la commande ALTER TABLE pour modifier la taille maximale actuelle de la table :

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

Le cas échéant, vous pouvez modifier la taille maximale par défaut pour toutes les tables MyISAM. Ensuite, attribuez une valeur plus élevée au paramètre myisam_data_pointer_size dans votre groupe de paramètres de base de données personnalisés.

Le fichier d'espace de table InnoDB est plein

L'espace de table maximal d'une table InnoDB est de quatre milliards de pages (16 To).

Vous pouvez partitionner les tables en plusieurs fichiers d'espace de table pour les tables supérieures à 1 To. Vous pouvez utiliser différents types de partitionnements, par exemple RANGE, LIST et HASH, pour partitionner votre table en fonction de votre cas d'utilisation. Par exemple, vous pouvez tronquer les anciennes données en fonction de leur année de création, ou encore créer des partitions distinctes pour chaque année. Pour plus d'informations, consultez Limites de taille des fichiers MySQL et la documentation MySQL sur le partitionnement.

Important : testez minutieusement l'impact potentiel du partitionnement sur votre application avant d'implémenter les modifications dans un environnement de production.

Vous pouvez convertir une table existante en une table partitionnée à l'aide d'une instruction de modification de table similaire à celle qui suit :

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

Remarque : la conversion d'une table existante en une table partitionnée ne récupère pas l'espace alloué pour l'espace de table InnoDB. Pour récupérer l'espace InnoDB, consultez Comment procéder si mon instance de base de données MySQL Amazon RDS utilise plus d'espace de stockage que prévu ?

L'espace disque de l'instance de base de données Amazon RDS est insuffisant

Si l'instance de base de données Amazon RDS affiche l'état STORAGE_FULL, vous recevrez l'erreur HA_ERR_RECORD_FILE_FULL. Pour résoudre cette erreur, augmentez l'espace de stockage de votre instance de base de données. Pour plus d'informations, consultez Espace de stockage de l'instance de base de données Amazon RDS insuffisant.

Vous pouvez de manière facultative surveiller l'espace de stockage disponible pour l'instance de base de données en utilisant la métrique FreeStorageSpace d'Amazon CloudWatch. Pour plus d'informations, consultez Présentation de la surveillance d'Amazon RDS. Vous pouvez également vous abonner à la notification d'événement de stockage faible d'Amazon RDS afin d'être averti lorsque votre instance de base de données consomme plus de 90 % de son stockage alloué. Pour plus d'informations, consultez Catégories et messages d'événements Amazon RDS.

La taille de fichier maximale de la table est atteinte

Remarque : certaines instances de base de données existantes ont une limite inférieure. Par exemple, les instances de base de données MySQL créées avant avril 2014 ont une limite de taille de fichier et de table de 2 To. Cette limite de taille de fichier de 2 To s'applique également aux instances de base de données ou aux réplicas en lecture créés à partir d'instantanés de bases de données pris avant avril 2014, quel que soit le moment où l'instance de base de données a été créée.

Si vous avez une instance de base de données qui possède une limite de taille inférieure, vous pouvez effectuer un vidage MySQL de vos données à l'aide de mysqldump. Ensuite, importez les données dans une nouvelle instance de base de données qui possède une limite plus élevée.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?