http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
以下是文档摘录。
mysql> LOCK TABLES real_table WRITE, temp_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM temp_table;
mysql> DELETE FROM temp_table;
mysql> UNLOCK TABLES;
我的问题是,如果我在shell脚本代码中使用这个逻辑,并且如果线程在到达“unlock tables”语句之前丢失(没有被杀死),我怎么知道某些表被锁定了,我该怎么办?手动解锁表格?
答案 0 :(得分:109)
这是我对MySQL中某些锁定表的FORCE UNLOCK所做的事情
1)输入MySQL
mysql -u your_user -p
2)让我们看一下锁定表的列表
mysql> show open tables where in_use>0;
3)让我们看看当前进程的列表,其中一个是锁定你的表
mysql> show processlist;
4)让我们杀死其中一个进程
mysql> kill put_process_id_here;
答案 1 :(得分:24)
我怎么知道某些表被锁定了?
您可以使用SHOW OPEN TABLES命令查看锁定的表格。
如何手动解锁表格?
如果你知道锁定表的会话ID - 'SELECT CONNECTION_ID()',那么你可以运行KILL命令来终止会话和解锁表。
答案 2 :(得分:3)
使用Sequel Pro:
重新启动应用程序解锁了我的表格。它重置会话连接。
NOTE: I was doing this for a site on my local machine.