Error Code: 1205. Lock wait timeout exceeded; try restarting transaction

何でもない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_stateRUNNINGになってるレコード1件出てきた。
昨日実行して帰ってこなかったから止めたやつだ…

じゃあロックの解除どうするの?

ロックの解除

MySQL/ロックを解除する - ポケットがチケットでいっぱい

show processlist;でIdを確認してkillする!かこいい!

show processlist;

いくつか結果返ってきたけど、timeが大きくてinfoの内容がINNODB_TRXtrx_queryと同じやつがあったのでこれをkill

kill <ID>

で、もう一回show processlistするとそのID消えてた。
で、最初のUPDATE文実行できたので解決。