16
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slaveに更新クエリを投げてしまった話

Last updated at Posted at 2025-12-04

この記事は「 本番環境などでやらかしちゃった人 Advent Calendar 2025」の5日目です。

はじめに

初めまして、社会人6年目のLearです。今回初めて記事を書かしていただきます。
本番作業って本当に、慣れてきた時ほどやらかしまね……
入社したての頃はあんなに確認して、実行ボタン押すときも指先が震えていたのに。
というわけで、あまりにも初歩的なミスを犯してしまったので、自分への戒めです。

やらかし内容

タイトルの通り、更新クエリをMasterではなく、Slaveに投げてしまいました。
あるTableに保存してあったデータの一部の管理方法を変えるため、別TableへのINSERT文を流す対応をしていたのですが、向き先がSlaveのまま実行しておりました。

なぜ起きたのか

完全なる自分の慢心です。
ちょうどその日は月初から新施策が始まるということもあり、その準備として深夜メンテをしておりました。
対応人員も少なくいこうということで、先の施策担当者から実行手順書を受け取って流すだけの状態でした。
「ああ、流すだけなら楽だ!」と思いそのままクエリを流し込んでおりました。

「本番実行はMasterに向き先を変えて実行する」 という一文を見逃して……

確認のために、本番に向けてSELECTを投げたら、

あれ……INSERTしたはずのデータがない……

実行コマンドを遡ると、対象がSlaveのままになっていることに気づく。
修正は無事できたものの、修正のためメンテが少し延長する結果となってしまいました。

どう修正したか

  1. SlaveをSTOP
  2. SlaveにINSERTしてしまった分をDELETE
  3. ずれた分のPOSを合わせる
  4. SlaveをStart

メンテ中ということもあり、Masterに対しての更新がないためすんなり復旧できました。

対策

Slaveに対しての書き込み権限を制限しました。
元々、READ ONLYオプションはついておりましたが、CONNECTION ADMINが付与されていた為、書き込めてしまう状態でした。
そのため、CONNECTION ADMIN権限を外すことで、Slaveに対しての書き込みをできないように対策しました。

そもそも、手順書を見間違えていたので、「気を付ける」となりがちですが、人間絶対ミスをするので、
そのミスをしないような設計や仕組みにしていこうぜ!という教訓です。

16
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?