当我尝试删除表时,MySQL 挂起。我没有任何其他公开会议。如何解决这个问题?我已经等了 10 个小时,这个过程还没有终止。
问问题
43262 次
3 回答
21
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中使用KILL thread_id。
因为我想出了另一个有趣的经历,所以我正在添加更多信息。
Metadata
死锁可能同样发生在给定表(drop
,alter
...)上的 ddl 操作和该表上的选择查询之间。
是的,select
。
因此,如果您在 mysql(或 php,例如 with pdo::fetch
)中循环游标,并在同一个表上运行 ddl 语句,您将遇到死锁。
这种非典型场景的一种解决方案是在commit
完全获取任何 select 语句后,使用语句系统地释放隐式锁。
于 2012-06-03T15:28:24.947 回答
21
我正在尝试为新手提供更简单的答案:
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 |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
with State :等待表元数据锁定(如官方回答中所述)
2)KILL 13
(13对应于Id)。
如果确实是死锁,那么后面的所有流程都会正常继续。
于 2019-05-24T17:16:07.807 回答
12
重新启动 MySQL 可能不是最漂亮的解决方案,但它对我有用:
sudo /etc/init.d/mysql restart
mysqladmin drop YOURDATABASE
于 2015-09-04T09:51:43.990 回答