Comment résoudre l'erreur « MySQL HA_ERR_RECORD_FILE_FULL » lorsque j'utilise Amazon RDS for MySQL ?

Lecture de 5 minute(s)
0

Lorsque j’écris sur une instance de base de données Amazon Relational Database Service (Amazon RDS) for MySQL ou que je lis des répliques, je reçois un message d'erreur. Sur l’instance de base de données Amazon RDS for MySQL, j’obtiens ce qui suit : « ERREUR 1114 (HY000) : Le tableau 'Nom de la table' est plein ». En ce qui concerne les répliques en lecture, dans le champ Last_Error de la section Afficher le statut de l'esclave (Amazon RDS for MySQL 5.7) ou Afficher l'état de la réplique (Amazon RDS for MySQL 8.0), j'obtiens ce qui suit : « Code_erreur : 1114 ; erreur du gestionnaire HA_ERR_RECORD_FILE_FULL »

Brève description

Ces erreurs se produisent sur les répliques de lecture qui entraînent l’échec de la réplication, ou lorsque la table dans laquelle les données sont écrites est pleine. Les problèmes suivants sont également à l’origine de cette erreur :

  1. La table qui envoie le message d’erreur est une table du moteur MEMOIRE et atteint sa taille maximale.
  2. La table est une table du moteur MyISAM et atteint la taille maximale du pointeur.
  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 atteint la taille limite du fichier.

Pour plus d’informations, consultez la section Moteurs de stockage pris en charge pour RDS pour MySQL.

Résolution

La table du moteur MEMOIRE a atteint sa taille maximale

Pour vérifier que la table du moteur MEMOIRE a atteint sa taille maximale, exécutez une commande similaire à l’exemple suivant :

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

Si la valeur de ** data_length ** dans la sortie est supérieure à la valeur de max_data_length, la table a atteint sa taille maximale.

Pour résoudre cette erreur, augmentez 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 dans Amazon RDS. Ne dépassez pas 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 que vous utilisez.

La table du moteur MyISAM a atteint la taille maximale du pointeur

Pour vérifier que la table du moteur MyISAM a atteint la taille maximale du pointeur, exécutez une commande similaire à la suivante :

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

Pour résoudre cette erreur, utilisez la commande ALTER TABLE pour modifier la taille maximale de la table existante :

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

Vous pouvez éventuellement modifier la taille limite par défaut pour toutes les tables MyISAM. Définissez ensuite le paramètre myisam_data_pointer_size dans votre groupe de paramètres de base de données personnalisé sur une valeur supérieure.

Le fichier d’espace de table InnoDB est plein

La taille maximale de l’espace disque logique d’une table InnoDB est de quatre milliards de pages (16 To). Vous pouvez partitionner les tables en plusieurs fichiers de tablespace pour les tables supérieures à 1 To. Partitionnez votre table par RANGE, LIST et HASH, en fonction de votre cas d'utilisation. Par exemple, tronquez les anciennes données en fonction de l'année de leur création ou créez des partitions distinctes pour chaque année. Pour plus d'informations, consultez les limites de taille de fichier MySQL dans Amazon RDS et la documentation MySQL sur le partitionnement.

**Important :**Avant de mettre en œuvre des modifications dans un environnement de production, testez minutieusement les effets que le partitionnement peut avoir sur votre application.

Pour convertir une table existante en table partitionnée, utilisez une instruction ALTER TABLE similaire à l’exemple suivant :

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

Remarque : Lorsque vous convertissez une table existante en table partitionnée, vous ne récupérez pas l’espace alloué au tablespace InnoDB. Pour récupérer l’espace InnoDB, consultez Pourquoi mon instance de base de données Amazon RDS pour MySQL utilise-t-elle plus de stockage que prévu ?

L’instance de base de données Amazon RDS manque d'espace disque

Si l’instance de base de données Amazon RDS est à l'état STORAGE_FULL, vous recevez l'erreur « HA_ERR_RECORD_FILE_FULL ». Pour résoudre cette erreur, ajoutez de l'espace de stockage à votre instance de base de données.

Vous pouvez éventuellement utiliser la métrique Amazon CloudWatch FreeStorageSpace pour surveiller l'espace de stockage disponible. Vous pouvez également vous abonner à la notification d’événement Amazon RDS à faible capacité de stockage. Cela vous avertit lorsque votre instance de base de données consomme plus de 90 % de l'espace de stockage alloué.

La taille de la table a atteint la limite de taille de fichier

**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épliques de lecture créées à partir d’instantanés de base de données pris avant avril 2014. La limite s’applique quelle que soit la date à laquelle vous avez créé l’instance de base de données.

Si vous avez une instance de base de données avec une limite de taille inférieure, utilisez mysqldump pour créer un dump MySQL de vos données. Importez ensuite les données dans une nouvelle instance de base de données avec une limite plus élevée.

Informations connexes

Comment puis-je résoudre les problèmes qui surviennent lorsque les instances de base de données Amazon RDS manquent d'espace de stockage ?