2012-03-20 5 views
25

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; 

それは私はいくつかのテーブルがロックされていることを知っているだろうか「テーブルのロックを解除する」声明を、到達する前に、私の質問は、(殺さない)私はシェルスクリプトコードでこのロジックを使用した場合ということです、そしてスレッドが失われた場合手動でテーブルのロックを解除するにはどうすればよいですか?

+0

代わりにトランザクションを使用すると思われましたか? http://stackoverflow.com/questions/4226766/mysql-transactions-vs-locking-tables – GordonM

答えて

19

一部のテーブルがロックされていることをどのように知ることができますか?

SHOW OPEN TABLESコマンドを使用すると、ロックされたテーブルを表示できます。

手動でテーブルのロックを解除するにはどうすればよいですか?

あなたがテーブルをロックされたセッションIDを知っている場合 - 「CONNECTION_IDを()SELECT」、その後、あなたがセッションを終了し、テーブルのロックを解除するKILLコマンドを実行することができます。ここで

+2

ロックされたテーブルが開いていないセッションIDと端末がわからない場合は、 – shantanuo

+2

ロックテーブルの前にWAIT_TIMEOUTの期間を設定してください(例:SET WAIT_TIMEOUT = 120;)。指定した時間が経過すると自動的に接続を閉じることができます。 – Devart

76

は、i)はMySQLの

mysql -u your_user -p 

2を入力しますMySQLの

にいくつかのロック・テーブルの場合

1をUNLOCKを強制的に何をすべきかだ))のロック・テーブル

mysql> show open tables where in_use>0; 

3のリストを見てみましょう現在のプロセスのリストを見てみましょう。そのうちの1つがテーブルをロックしています

mysql> show processlist; 

4)のProの続編では、これらのプロセスの1

mysql> kill put_process_id_here; 
+0

非常に便利です!ありがとう! –

+2

何とか私はプロセスリストに何も表示されずにテーブルをロックすることができました。(スリープ接続の他に... – Kevin

+1

あなたのプロセスは完全には失われていますが、ロックされたテーブルに関する苦情を受けているならば:mysqldを再起動してください。私にとって、それは "service mysqld restart"でした。 –

2

を殺してみましょう:アプリを再起動

は私のテーブルをロック解除しました。セッション接続をリセットします。

NOTE: I was doing this for a site on my local machine.

関連する問題