1114 (HY000): Le tableau est plein

114

J'essaye d'ajouter une ligne à une InnoDBtable avec une simple requête:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

Mais lorsque j'essaye cette requête, j'obtiens ce qui suit:

ERREUR 1114 (HY000): la table zip_codesest pleine

Faire un

SELECT COUNT(*) FROM zip_codes

me donne 188 959 lignes, ce qui ne semble pas trop nombreux étant donné que j'ai une autre table avec 810 635 lignes dans cette même base de données.

Je suis assez inexpérimenté avec InnoDB engineet je n'ai jamais rencontré ce problème avec MyISAM. Quels sont certains des problèmes potentiels ici?

EDIT: Cela se produit uniquement lors de l'ajout d'une ligne à la zip_codestable.

Wickethewok
la source
L'erreur se produit-elle lorsque vous essayez d'insérer dans n'importe quelle table, ou seulement celle de zip_codes?
Chad Birch

Réponses:

92

EDIT: Vérifiez d'abord, si vous n'avez pas manqué d'espace disque, avant de résoudre la résolution liée à la configuration.

Vous semblez avoir une taille maximale trop faible pour votre innodb_data_file_pathdans votre my.cnf, Dans cet exemple

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

vous ne pouvez pas héberger plus de 512 Mo de données dans toutes les tables innodb combinées.

Vous devriez peut-être passer à un schéma innodb-per-table en utilisant innodb_file_per_table.

Martin C.
la source
C où nous obtenons ce fichier my.cnf dans ubuntu
3
@Nadh Dans Ubuntu 16.04, il fait partie de /etc/mysql/et est en partie divisé en fichiers supplémentaires dans/etc/mysql/conf.d
Martin C.
Le mien a fonctionné après avoir ajouté la innodb_data_file_pathligne /etc/mysql/mysql.conf.d/mysqld.cnfet redémarré les services mysqletapache2
Timmah
81

Une autre raison possible est que la partition est pleine - c'est exactement ce qui m'est arrivé maintenant.

maaartinus
la source
1
Cela devrait toujours être la première chose à vérifier. Revenez toujours au cordon d'alimentation, je suis tombé dessus plusieurs fois.
Steven Church
1
Vous m'avez sauvé quelques heures en essayant de changer la configuration de mysql. La partition principale était pleine. J'ai dû déplacer la base de données mysql vers la partition de données, puis créer un lien souple
Ganesh Krishnan
2
utiliser df -hpour vérifier la taille du disque
Amit Bera
25

Vous obtiendrez également la même erreur ERREUR 1114 (HY000): La table '# sql-310a_8867d7f' est pleine

si vous essayez d'ajouter un index à une table qui utilise le moteur de stockage MEMORY.

Carte verte
la source
Cela m'est arrivé mais il semblait que mon client utilisait une mauvaise syntaxe. Lors de l'ajout du même index avec un simple, ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);cela a fonctionné.
thephper
22

Vous devez modifier le plafond de limite défini dans my.cnf pour les tables INNO_DB. Cette limite de mémoire n'est pas définie pour les tables individuelles, elle est définie pour toutes les tables combinées.

Si vous souhaitez que la mémoire s'étende automatiquement à 512 Mo

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

Si vous ne connaissez pas la limite ou ne voulez pas mettre de limite de limite, vous pouvez la modifier comme ceci

innodb_data_file_path = ibdata1:10M:autoextend
Daniel Luca CleanLicorne
la source
Nous avons hébergé notre ddbb sur Amazon et il a été configuré avec autoextend. Mais nous avons eu le même problème que je suppose être dû à l'atteinte de la limite stockée configurée
borjab
12

Cette erreur apparaît également si la partition sur laquelle tmpdirréside se remplit (en raison d'un alter table ou autre

fimbulvetr
la source
11

Dans mon cas, c'était parce que la partition hébergeant le fichier ibdata1 était pleine.

sauter
la source
10

Il se peut que vous manquiez d'espace soit dans la partition où les tables mysql sont stockées (généralement / var / lib / mysql) soit là où les tables temporaires sont stockées (généralement / tmp).

Vous souhaiterez peut-être: - surveiller votre espace libre lors de la création de l'index. - pointez la variable MySQL tmpdir vers un emplacement différent. Cela nécessite un redémarrage du serveur.

Julio
la source
8

J'ai aussi fait face à cette erreur lors de l'importation d'un fichier de base de données sql de 8 Go. Vérifié mon lecteur d'installation mysql. Il n'y avait plus d'espace dans le lecteur. Donc, j'ai un peu d'espace en supprimant les éléments indésirables et en réexécutant ma commande d'importation de base de données. Cette fois, ce fut un succès.

Arun Kumar
la source
7

Si vous utilisez NDBCLUSTER comme moteur de stockage, vous devez augmenter DataMemoryet IndexMemory.

Mysql FQA

metdos
la source
6

Sauf si vous avez activé l' innodb_file_per_tableoption, InnoDBconserve toutes les données dans un seul fichier, généralement appelé ibdata1.

Vérifiez la taille de ce fichier et vérifiez que vous disposez de suffisamment d'espace disque dans le lecteur sur lequel il réside.

Quassnoi
la source
5

nous avons eu: SQLSTATE [HY000]: Erreur générale: 1114 La table 'catalog_product_index_price_bundle_sel_tmp' est pleine

résolu par:

modifier la configuration de la base de données:

nano /etc/my.cnf

tmp_table_size = 256 Mo max_heap_table_size = 256 Mo

  • redémarrer db
Sition
la source
1
Ces paramètres 512M sont dangereux. Ils contrôlent la taille de mémoire maximale pour les tables temporaires dans les sélections complexes. Ce n'est pas seulement "par connexion", mais aussi "par table tmp". Ainsi, ces valeurs pourraient facilement vous faire manquer de RAM.
Rick James
4

Pour citer les documents MySQL.

Le moteur de stockage InnoDB maintient les tables InnoDB dans un tablespace qui peut être créé à partir de plusieurs fichiers. Cela permet à une table de dépasser la taille de fichier individuelle maximale. L'espace de table peut inclure des partitions de disque brutes, ce qui autorise des tables extrêmement volumineuses. La taille maximale du tablespace est de 64 To.

Si vous utilisez des tables InnoDB et que vous manquez d'espace dans l'espace de table InnoDB. Dans ce cas, la solution consiste à étendre le tablespace InnoDB. Reportez-vous à la Section 13.2.5, [«Ajout, suppression ou redimensionnement des données et des fichiers journaux InnoDB».]

Ólafur Waage
la source
4

dans mon cas, c'est simplement parce que le serveur mysql fonctionne avec une application, qui écrit trop de journaux, que le disque est plein.

vous pouvez vérifier si le disque a suffisamment d'espace utilisé

df -h

si le pourcentage d'utilisation du disque est de 100%, vous pouvez utiliser cette commande pour trouver quel répertoire est trop volumineux

du -h -d 1 /
Kai
la source
4

UTILISATEURS DE DOCKER: Cela se produit également lorsque vous avez atteint environ 90% de la taille limite de votre image Docker (il semble que 10% soient nécessaires pour la mise en cache ou plus). Le libellé est déroutant, car cela signifie simplement la quantité d'espace disque que Docker peut utiliser pour pratiquement tout.

Pour résoudre le problème, accédez aux paramètres du bureau Docker> Disque> déplacez le curseur un peu plus vers la droite> Appliquer.

entrez la description de l'image ici

Sliq
la source
2

Sur CentOS 7, simplement arrêter et démarrer le service MySQL a résolu ce problème pour moi.

sudo service mysql stop

sudo service mysql start

crmpicco
la source
Étrangement, cela a fonctionné pour moi aussi .... Je n'avais pas de partitions pleines à plus de 80% et le redémarrage a corrigé le problème.
n0nag0n
2

J'ai rencontré le même problème en raison du faible espace disque. Et la partition qui héberge le fichier ibdata1 qui est le tablespace système de l'infrastructure InnoDB était pleine.

Saveendra Ekanayake
la source
2

Je rencontrais ce problème ... dans mon cas, je manquerais de stockage sur mon serveur dédié. Vérifiez que si tout le reste échoue et envisagez d'augmenter l'espace disque ou de supprimer les données ou fichiers indésirables.

NotJay
la source
1

Dans mon cas, la mémoire du serveur était pleine et la base de données ne pouvait donc pas écrire les données temporaires. Pour le résoudre, il vous suffit de faire une place sur votre disque.

Pierre-Yves Guillemet
la source
1

J'ai résolu ce problème en augmentant la quantité de mémoire disponible pour la VM vagrant où se trouvait la base de données.

yvoloshin
la source
1

Dans mon cas, j'essayais d'exécuter une commande alter table et l'espace disque disponible était inférieur à la taille de la table. Une fois, j'ai augmenté l'espace disque, le problème a disparu.

Pratik Singhal
la source
1

Ce disque est plein dans / var / www / mysql

wukong
la source
-1

Cela pourrait également être la limite InnoDB pour le nombre de transactions ouvertes:

http://bugs.mysql.com/bug.php?id=26590

à 1024 transactions, qui ont des enregistrements d'annulation (comme dans, modifié des données), InnoDB ne fonctionnera pas


la source
La réponse est bien datée.
Evan Carroll