开发者社区> 问答> 正文

MySQL表死锁了怎么办

如果一张表被锁住了,应该怎么处理,是手动登录解锁吗

展开
收起
睡着了去做梦 2021-10-13 12:24:48 519 0
1 条回答
写回答
取消 提交回答
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    导致mysql 死锁的四个条件

    互斥条件:就是一个资源只能有一个进程占有,不可以被两个或者多个进程占有

    不可抢占条件:进程已经获得的资源在未使用完之前,不可以被抢占,只能在使用完之后自己释放

    占有申请条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源

    循环等待条件:发生死锁时,必定会形成一个进程——资源的环路。进程集合{p1,p2,p3}中,p1请求p2占有的资源,p2请求p3占有的资源,p3请求p1占有的资源

    解决死锁的方案

    第一种:

    1.查询是否锁表
    show OPEN TABLES where In_use > 0;
    
    2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
    show processlist
    
    3.杀死进程id(就是上面命令的id列)
    
    kill id
    
    

    第二种:

    1.查看下在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
    
    2.杀死进程id(就是上面命令的trx_mysql_thread_id列)
    kill 线程ID
    
    2021-10-13 12:42:55
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像