1114 (HY000): Die Tabelle ist voll

114

Ich versuche, einer InnoDBTabelle mit einer einfachen Abfrage eine Zeile hinzuzufügen :

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

Wenn ich diese Abfrage versuche, wird Folgendes angezeigt:

FEHLER 1114 (HY000): Die Tabelle zip_codesist voll

A tun

SELECT COUNT(*) FROM zip_codes

gibt mir 188.959 Zeilen, was nicht allzu viele zu sein scheint, wenn man bedenkt, dass ich eine andere Tabelle mit 810.635 Zeilen in derselben Datenbank habe.

Ich bin ziemlich unerfahren mit dem InnoDB engineund habe dieses Problem nie erlebt MyISAM. Was sind einige der möglichen Probleme hier?

BEARBEITEN: Dies tritt nur auf, wenn der zip_codesTabelle eine Zeile hinzugefügt wird .

Wickethewok
quelle
Tritt der Fehler auf, wenn Sie versuchen, in eine Tabelle oder nur die Postleitzahl einzufügen?
Chad Birch

Antworten:

92

BEARBEITEN: Überprüfen Sie zunächst, ob Ihnen nicht der Speicherplatz ausgeht, bevor Sie die konfigurationsbezogene Auflösung festlegen.

Sie scheinen eine zu geringe maximale Größe für Sie zu haben innodb_data_file_pathin Ihrem my.cnf, in diesem Beispiel

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

Sie können nicht mehr als 512 MB Daten in allen Innodb-Tabellen zusammen hosten.

Vielleicht sollten Sie mit zu einem Innodb-per-Table-Schema wechseln innodb_file_per_table.

Martin C.
quelle
C wo wir diese my.cnf Datei in Ubuntu bekommen
3
@ Nadh In Ubuntu 16.04 ist es Teil von /etc/mysql/und wird teilweise in zusätzliche Dateien in/etc/mysql/conf.d
Martin C.
Meins funktionierte nach dem Hinzufügen der innodb_data_file_pathLeitung zu /etc/mysql/mysql.conf.d/mysqld.cnfund Neustarten der mysqlund apache2 Dienste
Timmah
81

Ein weiterer möglicher Grund ist, dass die Partition voll ist - genau das ist mir jetzt passiert.

Maaartinus
quelle
1
Dies sollte immer als erstes überprüft werden. Gehen Sie immer zurück zum Netzkabel, ich bin schon oft darauf gestoßen.
Steven Church
1
Sie haben mir einige Stunden beim Versuch gespart, die MySQL-Konfiguration zu ändern. Die primäre Partition war voll. Musste MySQL-Datenbank auf Datenpartition verschieben und dann einen Softlink erstellen
Ganesh Krishnan
2
Verwendung df -hzur Überprüfung der Plattengröße
Amit Bera
25

Sie erhalten auch den gleichen Fehler FEHLER 1114 (HY000): Die Tabelle '# sql-310a_8867d7f' ist voll

Wenn Sie versuchen, einer Tabelle, die die Speicher-Engine MEMORY verwendet, einen Index hinzuzufügen.

Grüne Karte
quelle
Das ist mir passiert, aber es schien, als würde mein Client eine falsche Syntax verwenden. Beim Hinzufügen des gleichen Index mit einem einfachen hat ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);es funktioniert.
Thephper
22

Sie müssen die in my.cnf festgelegte Obergrenze für die Tabellen INNO_DB ändern. Diese Speicherbegrenzung ist nicht für einzelne Tabellen festgelegt, sondern für alle Tabellen zusammen.

Wenn Sie möchten, dass der Speicher automatisch auf 512 MB erweitert wird

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

Wenn Sie das Limit nicht kennen oder keine Limitobergrenze festlegen möchten, können Sie es wie folgt ändern

innodb_data_file_path = ibdata1:10M:autoextend
Daniel Luca CleanUnicorn
quelle
Wir haben unsere ddbb bei Amazon gehostet und sie wurde mit Autoextend konfiguriert. Aber wir hatten das gleiche Problem, von dem ich
annehme,
12

Dieser Fehler tritt auch auf, wenn die Partition, auf der sich die Partition tmpdirbefindet, voll ist (aufgrund einer Änderungstabelle oder einer anderen)

fimbulvetr
quelle
11

In meinem Fall lag dies daran, dass die Partition, auf der sich die Datei ibdata1 befindet, voll war.

Skiphoppy
quelle
10

Möglicherweise fehlt Ihnen der Speicherplatz entweder in der Partition, in der die MySQL-Tabellen gespeichert sind (normalerweise / var / lib / mysql), oder in der Partition, in der die temporären Tabellen gespeichert sind (normalerweise / tmp).

Möglicherweise möchten Sie: - Ihren freien Speicherplatz während der Indexerstellung überwachen. - Zeigen Sie mit der MySQL-Variablen tmpdir auf einen anderen Speicherort. Dies erfordert einen Neustart des Servers.

Julio
quelle
8

Auch ich habe diesen Fehler beim Importieren einer 8 GB SQL-Datenbankdatei festgestellt. Überprüfte mein MySQL-Installationslaufwerk. In der Einfahrt war kein Platz mehr. Erhalten Sie also etwas Speicherplatz, indem Sie unerwünschte Elemente entfernen und meinen Datenbankimportbefehl erneut ausführen. Diesmal war es erfolgreich.

Arun Kumar
quelle
7

Wenn Sie NDBCLUSTER als Speicher-Engine verwenden, sollten Sie DataMemoryund erhöhen IndexMemory.

MySQL FQA

metdos
quelle
6

Sofern Sie die innodb_file_per_tableOption nicht aktiviert haben , werden InnoDBalle Daten in einer Datei gespeichert, die normalerweise aufgerufen wird ibdata1.

Überprüfen Sie die Größe dieser Datei und stellen Sie sicher, dass auf dem Laufwerk, auf dem sie sich befindet, genügend Speicherplatz vorhanden ist.

Quassnoi
quelle
5

wir hatten: SQLSTATE [HY000]: Allgemeiner Fehler: 1114 Die Tabelle 'catalog_product_index_price_bundle_sel_tmp' ist voll

gelöst durch:

Konfiguration der Datenbank bearbeiten:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • Neustart db
Sition
quelle
1
Diese 512M-Einstellungen sind gefährlich. Sie steuern die maximale Speichergröße für temporäre Tabellen in komplexen Auswahlen. Es ist nicht nur "pro Verbindung", sondern auch "pro tmp-Tabelle". Diese Werte können also leicht dazu führen, dass Ihnen der Arbeitsspeicher ausgeht.
Rick James
4

Um die MySQL-Dokumente zu zitieren.

Die InnoDB-Speicher-Engine verwaltet InnoDB-Tabellen in einem Tabellenbereich, der aus mehreren Dateien erstellt werden kann. Dadurch kann eine Tabelle die maximale individuelle Dateigröße überschreiten. Der Tablespace kann Raw-Disk-Partitionen enthalten, wodurch extrem große Tabellen möglich sind. Die maximale Tablespace-Größe beträgt 64 TB.

Wenn Sie InnoDB-Tabellen verwenden und im InnoDB-Tabellenbereich nicht mehr genügend Platz vorhanden ist. In diesem Fall besteht die Lösung darin, den InnoDB-Tabellenbereich zu erweitern. Siehe auch Abschnitt 13.2.5, [„Hinzufügen, Entfernen oder Ändern der Größe von InnoDB-Daten und -Protokolldateien“.]

Ólafur Waage
quelle
4

In meinem Fall ist die Festplatte voll, nur weil der MySQL-Server zusammen mit einer Anwendung ausgeführt wird, die zu viele Protokolle schreibt.

Sie können überprüfen, ob auf der Festplatte genügend Speicherplatz vorhanden ist

df -h

Wenn der Prozentsatz der Festplattenauslastung 100% beträgt, können Sie mit diesem Befehl ermitteln, welches Verzeichnis zu groß ist

du -h -d 1 /
Kai
quelle
4

DOCKER-BENUTZER: Dies passiert auch, wenn Sie ungefähr 90% Ihrer Docker-Bildgrößenbeschränkung erreicht haben (anscheinend werden 10% für das Caching benötigt oder so). Der Wortlaut ist verwirrend, da dies einfach bedeutet, wie viel Speicherplatz Docker für praktisch alles verwenden kann.

Um dies zu beheben, gehen Sie zu Ihren Docker-Desktop-Einstellungen> Festplatte> Schieben Sie den Schieberegler etwas weiter nach rechts> Übernehmen.

Geben Sie hier die Bildbeschreibung ein

Sliq
quelle
2

Unter CentOS 7 wurde dies durch einfaches Stoppen und Starten des MySQL-Dienstes behoben.

sudo service mysql stop

sudo service mysql start

crmpicco
quelle
Seltsamerweise funktionierte das auch bei mir ... Es gab keine Partitionen, die zu mehr als 80% voll waren, und nur ein Neustart hat das Problem behoben.
n0nag0n
2

Ich hatte das gleiche Problem wegen des geringen Speicherplatzes. Die Partition, auf der sich die Datei ibdata1 befindet, die den Systemtabellenbereich für die InnoDB-Infrastruktur darstellt, war voll.

Saveendra Ekanayake
quelle
2

Ich hatte dieses Problem ... in meinem Fall ging mir der Speicher auf meinem dedizierten Server aus. Überprüfen Sie dies, wenn alles andere fehlschlägt, und erwägen Sie, den Speicherplatz zu vergrößern oder unerwünschte Daten oder Dateien zu entfernen.

NotJay
quelle
1

In meinem Fall war der Serverspeicher voll, sodass die Datenbank die temporären Daten nicht schreiben konnte. Um es zu lösen, müssen Sie nur einen Platz auf Ihrem Laufwerk schaffen.

Pierre-Yves Guillemet
quelle
1

Ich habe dieses Problem behoben, indem ich den verfügbaren Speicher für die vagabundierende VM, auf der sich die Datenbank befand, erhöht habe.

Yvoloshin
quelle
1

In meinem Fall habe ich versucht, einen Befehl zum Ändern der Tabelle auszuführen, und der verfügbare Speicherplatz war kleiner als die Größe der Tabelle. Einmal habe ich den Speicherplatz vergrößert, das Problem ist verschwunden.

Pratik Singhal
quelle
1

Diese Festplatte ist unter / var / www / mysql voll

Wukong
quelle
-1

Dies könnte auch das InnoDB-Limit für die Anzahl offener Transaktionen sein:

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

Bei 1024 Transaktionen, bei denen Datensätze rückgängig gemacht wurden (wie in, bearbeitete Daten), funktioniert InnoDB nicht


quelle
Antwort ist so veraltet.
Evan Carroll