gpt4 book ai didi

mysql - MySQL:永久获取“等待表元数据锁定”

转载 作者:IT老高 更新时间:2023-10-29 00:07:29 24 4
gpt4 key购买 nike

我的mysql数据库提供三个webapps作为存储后端。然而,我最近遇到了一个永久性的错误“等待表元数据锁”。它几乎总是发生,我不明白为什么。

mysql> show processlist
-> ;
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+
| 36 | root | localhost:33444 | bookmaker2 | Sleep | 139 | | NULL |
| 37 | root | localhost:33445 | bookmaker2 | Sleep | 139 | | NULL |
| 38 | root | localhost:33446 | bookmaker2 | Sleep | 139 | | NULL |
| 39 | root | localhost:33447 | bookmaker2 | Sleep | 49 | | NULL |
| 40 | root | localhost:33448 | bookmaker2 | Sleep | 139 | | NULL |
| 1315 | bookmaker | localhost:34869 | bookmaker | Sleep | 58 | | NULL |
| 1316 | root | localhost:34874 | bookmaker3 | Sleep | 56 | | NULL |
| 1395 | bookmaker | localhost:34953 | bookmaker | Sleep | 58 | | NULL |
| 1396 | root | localhost:34954 | bookmaker3 | Sleep | 46 | | NULL |
| 1398 | root | localhost:34956 | bookmaker3 | Query | 28 | Waiting for table metadata lock | CREATE TABLE IF NOT EXISTS LogEntries (
lid INT NOT NULL AUTO_INCREMEN |
| 1399 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+------+-----------+-----------------+------------+---------+------+---------------------------------+------------------------------------------------------------------------------------------------------+

当然,可以杀死相应的过程。但是,如果重新启动试图创建数据库“bookmarker3”的表结构的程序,新创建的进程将再次结束在metalock中。
我甚至不能删除数据库:
mysql> drop database bookmaker3;

这也会产生金属块。
怎么修理这个?

最佳答案

用锁切断连接

Kill 1398

然后检查自动提交是否设置为0
select @@autocommit;

如果是,您可能忘记提交事务。然后另一个连接想对这个表做些什么,这会导致锁定。
在您的例子中:如果您对日志条目(whitch exists)进行了一些查询,但没有提交它,那么您将尝试从另一个连接执行create table,如果不存在,则会发生元数据锁。
编辑
对我来说,这个bug在你的应用程序中。检查那里,或者如果您没有在应用程序中使用事务,则将自动提交设置为1。
PS也会检查这些帖子:
not a bug on bugs.mysql
replication of lock on MyISAM andINNOdb tables

关于mysql - MySQL:永久获取“等待表元数据锁定”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com