2012-06-03 6 views
15

テーブルを削除しようとすると、MySQLがハングします。他のオープンセッションはありません。これを解決するには?私は10時間待っており、プロセスは終了していません。テーブルを削除するとMySQLがハングする

+1

データベースはもちろん – Sebas

+0

のInnoDBの下にある場合にSHOW ENGINE INNODB STATUSの結果を投稿してください、あなたがしようとしている表のようになります。ドロップは既に使用されています(つまり、他のプロセスによってロックされていることを意味します)ので、プロセスがコミットするのを待っています。 – Rahul

+0

ログ出力を追加しました。 –

答えて

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 

これはあなたのテーブルの場合は、暗黙のデッドロックを持っているthis link

を参照してください。他のトランザクションを終了してドロップを解放するか、ドロップを強制終了して他のトランザクションを解放します。

KILL thread_idをsql_plusに使用できます。


私は別の興味深い経験を思い付いたので、私はさらに情報を追加しています。

Metadataデッドロックが均等に与えられた表(dropalter ...)と、そのテーブルに選択クエリにDDL操作の間に起こり得ます。

はい、selectです。

mysql(またはPHPの場合はpdo::fetchなど)のカーソルをループし、同じテーブルでddlステートメントを実行すると、デッドロックが発生します。

この非典型的なシナリオの1つの解決策は、selectステートメントが完全にフェッチされた後にcommitステートメントで暗黙のロックを系統的に解放することです。

+0

私はテーブルを削除しましたが、エラーコード(28)を得ると新しいテーブルを作成できません:ファイル '..'をディスクに同期できません。私はテーブルを落とすことによって、より多くの空き領域があると仮定しています。 –

+0

どのファイルですか?ロックが長時間続いたので、サーバーを再起動する必要があると思います。 – Sebas

+1

私は本当に大きな複数の列を持つテーブルの作成ステートメントを実行すると、私はこのエラーメッセージが表示されます。サーバーを再起動すると、もう一度終了して再接続することを意味しますか?あなたはどのようにサーバーを再起動するのですか? –

12

MySQLを再起動すると、きれいな解決策になるが、それは私のために働いていない可能性があります:

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

'mysql.server restart'は私のために働きます。 –

関連する問題