2012-06-03 8 views
15

Kiedy próbuję upuścić tabelę, MySQL zawiesza się. Nie mam żadnych innych otwartych sesji. Jak rozwiązać ten problem? Czekałem 10 godzin i proces się nie zakończył.Upuszczenie tabeli powoduje zawieszenie się MySQL

+1

proszę umieszczać wynik SHOW ENGINE InnoDB Stan jeśli baza danych jest w InnoDB oczywiście – Sebas

+0

wygląda stołu próbujesz drop jest już w użyciu (no cóż, mam na myśli to, że został zablokowany przez jakiś inny proces) i dlatego oczekuje na zatwierdzenie procesu. – Rahul

+0

Dodałem dane wyjściowe dziennika. –

Odpowiedz

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 

Jeśli jest to tabela, zobacz this link

masz niejawny impasu. Zabij inne transakcje, aby zwolnić zrzut, lub zabij drop, aby zwolnić pozostałe transakcje.

Możesz użyć KILL wątku, w sql_plus.


Dodaję dalsze informacje, odkąd wymyśliłem kolejne interesujące doświadczenie.

Metadata Martwe zamki mogą równie zdarzyć między operacji ddl w danej tabeli (drop, alter ...) i wybierz zapytania na tym stole.

Tak, select.

Tak więc, jeśli pętli nad kursorem w mysql (lub php, na przykład z pdo::fetch), i uruchomisz ddl oświadczenie na tej samej tabeli (s), dostaniesz zakleszczenie.

Jednym z rozwiązań tego nietypowego scenariusza jest systematyczne uwalnianie niejawnych blokad za pomocą instrukcji commit po pobraniu dowolnej instrukcji select.

+0

Upuściłem tabelę, a teraz nie mogę utworzyć nowej tabeli, ponieważ otrzymuję kod błędu (28): nie mogę zsynchronizować pliku ".." z dyskiem. Zakładam, że poprzez zrzucenie stołu będę miał więcej wolnego miejsca. –

+0

jaki plik? Myślę, że powinieneś zrestartować serwer, ponieważ blokada trwała długo. – Sebas

+1

po uruchomieniu naprawdę dużego polecenia utworzenia tabeli z wieloma kolumnami pojawia się ten komunikat o błędzie. przez ponowne uruchomienie serwera, czy masz na myśli ponowne wyjście i ponowne połączenie? jak eksplodujesz restart serwera? –

12

Ponowne MySQL nie może być najładniejszą rozwiązanie ale pracował dla mnie:

sudo /etc/init.d/mysql restart 
mysqladmin drop YOURDATABASE 
+0

'mysql.server restart' działa dla mnie. –

Powiązane problemy