transactionをスタートしたまま、commitせずにプログラムを途中で止めた場合の処理について。
不用意にプログラムを止めないようにしましょう。
ロックのメカニズム
ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動
復旧しないと特定行の更新ができない(場合によってはテーブル全体のロックができない)状態になります。
trasactionロックの確認と特定
まずは下記コマンドでロックが本当に発生しているかどうかを確認しましょう。
1 |
SELECT trx_rows_locked FROM information_schema.INNODB_TRX; |
そのあとスレッド発見→killをすることになります。(リンク参照)
ちなみにMySQLにログインしていないときに以下のコマンドでMySQLの結果を出力できます。(出力結果が長い時は結構使えそう)
1 |
echo ' show engine innodb status \G' | mysql -uroot -p > テキストファイルフルパス |
\Gつけないと改行されません。