何でもないUPDATE文実行したらエラー返ってきた。
Error Code: 1205. Lock wait timeout exceeded; try restarting transaction
MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.19.5 InnoDB のエラーコードによると
1205 (ER_LOCK_WAIT_TIMEOUT)
ロック待機のタイムアウトの期限が切れました。トランザクション全体ではなく、待機時間の長すぎたステートメントがロールバックされました。innodb_lock_wait_timeout 構成オプションの値は、SQL ステートメントがほかのトランザクションの完了をより長い時間待機するようにする場合は増やし、また長時間実行されるトランザクションが多すぎるためにロックの問題が発生し、さらにビジー状態のシステム上の並列性が低下している場合は減らすことができます。
つまりテーブルかレコードがロックされてるってこと?
ロック状態の確認
ロック状態の確認方法はSH2さんの下記記事が有名とのこと。 d.hatena.ne.jp
とりあえずINNODB_TRXでわかりそう
SELECT * FROM information_schema.INNODB_TRX
trx_state
がRUNNING
になってるレコード1件出てきた。
昨日実行して帰ってこなかったから止めたやつだ…
じゃあロックの解除どうするの?
ロックの解除
MySQL/ロックを解除する - ポケットがチケットでいっぱい
show processlist;
でIdを確認してkill
する!かこいい!
show processlist;
いくつか結果返ってきたけど、time
が大きくてinfo
の内容がINNODB_TRX
のtrx_query
と同じやつがあったのでこれをkill
kill <ID>
で、もう一回show processlist
するとそのID消えてた。
で、最初のUPDATE文実行できたので解決。