首页 > 数据库 > > Mysql中的具体实现锁以及解决方案(详细)
下面针对这篇博客加以补充:
在解决锁相关问题前先介绍几个常用命令;
(1)show processlist 命令
如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程,所以使用root用户可以解锁其他账户

(2)kill id 命令
杀死某个进程,可以解决死锁卡死的问题
可以看到,进程id为30的进程在等待锁,执行命令kill 30

另一个一直等待着的窗口:

(3)show OPEN TABLES where In_use > 0 命令
查询是否锁表,In_use列表示有多少线程正在使用某张表,Name_locked表示表名是否被锁

(4)查看autocommit状态以及设置:
show variables like 'autocommit';

1.查询是否锁表
show OPEN TABLES where In_use > 0;
2.查询进程
show processlist
3.杀死进程id(就是上面命令的id列)
kill id
1.查看下在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2.杀死进程id(就是上面命令的trx_mysql_thread_id列)
kill 线程ID
例子
查出死锁进程:SHOW PROCESSLIST
杀掉进程 KILL 420821;
其它关于查看死锁的命令:
1:查看当前的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
但是下面两个语句我在mysql 8.0.13中发现informationschema数据下没有INNODB_LOCKS,INNODB_LOCK_WAITS这两个表
2:查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3:查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3130997/ ,如需转载,请注明出处,否则将追究法律责任。