Ich habe eine MySQL-Datenbanktabelle mit 31.107.600 Zeilen. Sie verwendet InnoDB. Dies ist ein CentOS 7-System.
Die Tabelle hat folgende Spalten:
- Ausweis
- Zeitstempel
- Mac
- Daten
- Richtung
- Webseitenadresse
Ich möchte einen Index erstellen, also führe ich diesen Befehl aus:
ALTER TABLE MY_TABLE ADD INDEX idx_my_index (mac, site_id, timestamp);
Es dauert etwa 30 Sekunden und gibt mir dann Folgendes aus:
ERROR 1114 (HY000): The table 'MY_TABLE' is full
Mein MySQL verwendet die Standardeinstellung /var/lib/mysql
zum Speichern seiner Daten. Derzeit sind auf der Partition, auf der sich der Ordner befindet, 12 GB frei, und meine Datenbank ist nur 2,7 GB groß. Soweit ich das beurteilen kann, sollte also mehr als genug Platz vorhanden sein.
Warum wird mir dieser Fehler angezeigt? Online-Suchen zeigen, dass möglicherweise eine temporäre Tabelle verwendet wird und die Größenbeschränkungen der temporären Tabelle erreicht werden? Könnte es das sein? Oder etwas anderes? Wie kann ich das bestätigen?
Antwort1
Beobachten Sie während der Ausführung der ALTER TABLE-Anweisung Ihren Speicherplatzverbrauch auf allen Dateisystemen, die df verwenden. Prüfen Sie, ob der Speicherplatz auf einem anderen Dateisystem, insbesondere einem kleinen, schnell abnimmt, z. B. wenn Sie /tmp auf tmpfs haben.