テーブルを削除しようとすると、MySQLがハングします。他に開いているセッションはありません。これを解決する方法は?10時間待ちましたが、プロセスは終了していません。
3 に答える
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
これがあなたのテーブルである場合は、このリンクを参照してください
暗黙のデッドロックがあります。他のトランザクションを強制終了してドロップを解放するか、ドロップを強制終了して他のトランザクションを解放します。
sql_plusでKILLthread_idを使用できます。
別の興味深い経験を思いついたので、さらに情報を追加しています。
Metadata
drop
デッドロックは、特定のテーブル( 、alter
...)でのddl操作とそのテーブルでのselectクエリの間で同様に発生する可能性があります。
はい、select
。
したがって、mysql(またはphpなどpdo::fetch
)でカーソルをループし、同じテーブルでddlステートメントを実行すると、デッドロックが発生します。
この非定型シナリオの1つの解決策は、commit
selectステートメントが完全にフェッチされた後、ステートメントを使用して暗黙的なロックを体系的に解放することです。
私は私がそうであるように、初心者のためのより簡単な答えを試みています:
1)実行:
SHOW PROCESSLIST
あなたが次のようなものを手に入れたら:
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 580410103 | Waiting on empty queue | NULL |
| 13 | root | localhost:50627 | airbnb | Sleep | 10344 | | NULL |
| 17 | root | localhost:50877 | NULL | Query | 2356 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 18 | root | localhost:50878 | airbnb | Query | 2366 | Waiting for table metadata lock | DROP TABLE `airbnb`.`characteristics` |
| 21 | root | localhost:51281 | airbnb | Query | 2305 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type` |
| 22 | root | localhost:51282 | airbnb | Query | 2301 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`characteristics` |
| 23 | root | localhost:51290 | airbnb | Query | 2270 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`property_type` |
| 24 | root | localhost:51296 | airbnb | Query | 2240 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`property_type` |
| 26 | root | localhost:51303 | NULL | Query | 2212 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 27 | root | localhost:51304 | NULL | Query | 2218 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type` |
| 29 | root | localhost:51306 | NULL | Query | 2176 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`characteristics` |
| 30 | root | localhost:51308 | NULL | Query | 2122 | Waiting for table metadata lock | DROP TABLE `airbnb`.`characteristics` |
| 34 | root | localhost:51312 | NULL | Query | 2063 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 35 | root | localhost:51313 | NULL | Query | 2066 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type` |
| 39 | root | localhost:51338 | NULL | Query | 2004 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 40 | root | localhost:51339 | NULL | Query | 2008 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type` |
| 45 | root | localhost | airbnb | Field List | 997 | Waiting for table metadata lock | |
| 46 | root | localhost | airbnb | Field List | 798 | Waiting for table metadata lock | |
| 53 | root | localhost | airbnb | Query | 0 | starting | SHOW PROCESSLIST |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
状態あり:テーブルメタデータロックを待機しています(公式回答に記載されています)
2)KILL 13
(Idに対応する13)。
それが実際にデッドロックである場合、以下のすべてのプロセスは正常に続行されます。
MySQLを再起動することは最も美しい解決策ではないかもしれませんが、それは私にとってはうまくいきました:
sudo /etc/init.d/mysql restart
mysqladmin drop YOURDATABASE