2012-06-03 6 views
15

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

+1

Sie bitte das Ergebnis von SHOW ENGINE BDB STATUS schreiben, wenn die Datenbank unter innodb natürlich – Sebas

+0

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

+0

Ich habe die Protokollausgabe hinzugefügt. –

Antwort

12
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.

+0

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. –

+0

welche Datei? Ich denke, du solltest den Server neu starten, da das Schloss lange gedauert hat. – Sebas

+1

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? –

12

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 
+0

'mysql.server restart' funktioniert für mich. –