クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

MySQL Workbenchの取り扱いを間違え、本番DBにロックをかけちゃった話

こんにちは、ちーかまです!
クイックで働き始めて、エンジニアデビューしてから3年経ちました。
本当にあっという間ですね...

今回はやらかしエピソードを紹介するとともに、MySQL Workbenchの取り扱いに気を付けようね!という話をします。

なにが起こったか

ここから詳細に原因と背景を説明していきます。
端的に言うと、writerのデータベースに接続してデータ抽出を行い、Workbenchを開きっぱなしにして作業を終了し、トランザクションが貼られているのに気付かず書き込みロックをかけたままにしてしまったことが原因でした。

MySQL Workbenchはデフォルトだとオートコミットモードになっており、当時は5.2.11より下のバージョンを使用していたため手動でトランザクションを貼っても適用されませんでした。
トランザクションを適用するためには Preferences>SQL Execution より「New connections use auto commit mode」のチェックを外す必要があります。
(Ver 5.2.11以上では手動で貼ればトランザクションが適用されるようになりましたが、うっかりミスを防ぐためにもオートコミットモードオフがおすすめです!)

今回はそのオートコミットモードをオフにして作業をしていました。

MySQL Workbenchではオートコミットをオフにしている場合、SQLを実行した時点でトランザクションが貼られます。
そしてwriterのデータベースはトランザクションが貼られるとロックがかかり、トランザクションが解除されるとロックも解除されます。
ちーかまはMySQL Workbenchが裏側でトランザクションを貼っていることを知らず、そのまま作業を終えたため、トランザクションが解除されていなくロックがかかったままになりました...

どうすれば防げたか

まず一番に、データ更新しないのであればreaderのデータベースに接続すれば防げます。
(今回のケースではwriterのDBしか接続権限がなかったためwriterに接続しました)

それ以外であれば、下記いずれかの操作を行って作業終了後にトランザクションを解除していれば防げました。

  • commit
  • rollback
  • タブを閉じる
  • Workbenchを閉じる

同じミスを繰り返さないよう、今では使用後は必ずWorkbenchを閉じるよう徹底しています。

まとめ

というわけでエンジニア4年目となったちーかまのやらかしエピソードでした。

みなさんもデータ更新しない場合はreaderのデータベースを使いましょう。
またMySQL Workbenchを使用している方は、オートコミットの設定を見直すとともに使用後は必ずトランザクションを解除するよう気を付けましょう。

私の失敗が誰かの役に立てば幸いです!


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp