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 : 27/02/2019

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 souvent sur les réplicas en lecture qui provoquent l'échec de la réplication. Cette erreur peut également se produire lorsque la table dans laquelle les données sont écrites est pleine, ou encore dans l'un des cas suivants :

  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 la section Moteurs de stockage pris en charge pour MySQL sur Amazon RDS.

Résolution

1. 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 ce problème 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 la section 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 qui est basée sur la classe d'instance de base de données Amazon RDS que vous utilisez. Pour plus d'informations sur la mémoire disponible pour votre instance, consultez la section Types d'instances Amazon RDS.

2. 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, définissez le paramètre myisam_data_pointer_size dans votre groupe de paramètres de base de données personnalisés en lui attribuant une valeur plus élevée.

3. Le fichier d'espace de table InnoDB est plein.

L'espace de table maximal d'une table InnoDB est de quatre milliards de pages (64 To). Pour plus d'informations, reportez-vous à la section Limites des tables InnoDB dans la documentation MySQL.

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 partitions, telles que RANGE, LIST, HASH, etc. 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 la section 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 la section Comment procéder si mon instance de base de données MySQL d'Amazon RDS utilise plus d'espace de stockage que prévu ?

4. L'instance de base de données Amazon RDS est à court d'espace disque.

Si l'instance de base de données Amazon RDS affiche l'état STORAGE_FULL, vous recevrez le message d'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 la section Instance de base de données Amazon RDS à court d'espace de stockage.

Le cas échéant, vous pouvez 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 la section 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 la section Catégories et messages d'événements Amazon RDS.

5. La table a atteint sa taille de fichier maximale.

La section Limites de taille des fichiers dans Amazon RDS limite les espaces de table des fichiers InnoDB à 16 To par table, mais certaines instances de bases de données créées avant 2014 ont une limite inférieure.

Si vous avez une instance qui possède une limite de taille inférieure, vous pouvez vider vos données à l'aide de mysqldump. Ensuite, vous pouvez importer vos 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 ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?