Wenn ich versuche, eine Tabelle zu löschen, hängt MySQL. Ich habe keine anderen offenen Sitzungen. Wie löst man das? Ich habe 10 Stunden gewartet und der Prozess wurde nicht beendet.Dropping-Tabelle lässt MySQL hängen
Antwort
Waiting for table metadata lock
drop table tableA name
SELECT l1.lat, l1.lon, l2.zipcode FROM tableA l1, tableBl2 where l1.lat = l2.latitude and l1.lon = l2.longitude limit 10
Wenn dies Ihr Tisch ist, sehen this link
Sie eine implizite Deadlock haben. Beseitigen Sie die anderen Transaktionen, um den Abwurf freizugeben, oder brechen Sie den Abwurf ab, um die anderen Transaktionen freizugeben.
Sie können KILL thread_id in sql_plus verwenden.
Ich füge weitere Informationen hinzu, da ich eine weitere interessante Erfahrung gemacht habe.
Metadata
Riegelschlösser ebenso zwischen einer DDL-Operation an einem bestimmten Tisch (drop
, alter
...) und eine wählt Abfrage auf dieser Tabelle passieren.
Ja, select
.
Also, wenn Sie über einen Cursor in MySQL (oder PHP, zum Beispiel mit pdo::fetch
) Schleife, und Sie eine ddl-Anweisung für die gleiche Tabelle (s) ausführen, erhalten Sie einen Deadlock.
Eine Lösung für dieses atypische Szenario besteht darin, die impliziten Sperren mit einer commit
-Anweisung systematisch freizugeben, nachdem eine SELECT-Anweisung vollständig abgerufen wurde.
Ich habe die Tabelle gelöscht, und jetzt kann ich keine neue Tabelle erstellen, da ich den Fehlercode (28) erhalte: Datei '..' kann nicht auf Festplatte synchronisiert werden. Ich gehe davon aus, dass ich mehr freien Platz hätte, wenn ich den Tisch fallen lasse. –
welche Datei? Ich denke, du solltest den Server neu starten, da das Schloss lange gedauert hat. – Sebas
Wenn ich eine wirklich große create table-Anweisung mit mehreren Spalten ausführen, bekomme ich diese Fehlermeldung. Wenn Sie den Server neu starten, meinen Sie das Beenden und erneutes Verbinden? Wie starte ich den Server? –
MySQL Neustarten vielleicht nicht die schönste Lösung sein, aber es funktioniert für mich:
sudo /etc/init.d/mysql restart
mysqladmin drop YOURDATABASE
'mysql.server restart' funktioniert für mich. –
Sie bitte das Ergebnis von SHOW ENGINE BDB STATUS schreiben, wenn die Datenbank unter innodb natürlich – Sebas
sieht aus wie die Tabelle Sie versuchen, drop wird bereits verwendet (nun, ich meine, es wurde von einem anderen Prozess gesperrt) und daher wartet es darauf, dass der Prozess festgeschrieben wird. – Rahul
Ich habe die Protokollausgabe hinzugefügt. –