如果线程丢失,则解锁表

时间:2012-03-20 08:42:46

标签: mysql

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”语句之前丢失(没有被杀死),我怎么知道某些表被锁定了,我该怎么办?手动解锁表格?

3 个答案:

答案 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.