skillup

技術ブログ

Database

transactionが切れた場合のロックの復旧方法

投稿日:

transactionをスタートしたまま、commitせずにプログラムを途中で止めた場合の処理について。

不用意にプログラムを止めないようにしましょう。

ロックのメカニズム

ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動

復旧しないと特定行の更新ができない(場合によってはテーブル全体のロックができない)状態になります。

trasactionロックの確認と特定

まずは下記コマンドでロックが本当に発生しているかどうかを確認しましょう。

そのあとスレッド発見→killをすることになります。(リンク参照)

ちなみにMySQLにログインしていないときに以下のコマンドでMySQLの結果を出力できます。(出力結果が長い時は結構使えそう)

\Gつけないと改行されません。

参考リンク
transactionの途中でトランザクションが切れてしまった時にそのトランザクションを殺す方法

MySQLでロックを特定し、強制終了する

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SQLにおけるナンバリング

本日はナンバリングに関して。 MySQLを使っていますと各テーブルにはid int not null auto_increment primary keyなどと打って主キーを打つことがほぼ習慣になって …

no image

ajaxのasync:falseと複数DBのjoinに関して

本日も小ネタ集です。 Contents1 ajax:false2 複数DBでのJOIN ajax:false ajaxは非同期処理が基本ですが、async:falseとすると同期処理になります。 ただ …

no image

サブクエリ 応用編

本日も引き続きサブクエリです。 前回とちょっと近いですが、下記のような歯抜けのテーブル(sales2)があるとします。 year | sale ——+—&#8212 …

no image

MySQLでtext型が大量にあるもののリストア 

MySQLでのリストアについて。 先日実務でtext型のカラムが複数あるテーブルを読もうとしたら下記エラーがでてこけました。

なにやら …

no image

MySQL小ネタ テーブル単位のリストア・SQLの小ネタ(バックスラッシュの検索)

MySQLのちょい小ネタ。 Contents1 テーブル単位でバックアップ&リストア2 バックスラッシュの入ったSQLについて テーブル単位でバックアップ&リストア 1 通常のdump(データベース単 …