この記事は「 本番環境などでやらかしちゃった人 Advent Calendar 2025」の5日目です。
はじめに
初めまして、社会人6年目のLearです。今回初めて記事を書かしていただきます。
本番作業って本当に、慣れてきた時ほどやらかしまね……
入社したての頃はあんなに確認して、実行ボタン押すときも指先が震えていたのに。
というわけで、あまりにも初歩的なミスを犯してしまったので、自分への戒めです。
やらかし内容
タイトルの通り、更新クエリをMasterではなく、Slaveに投げてしまいました。
あるTableに保存してあったデータの一部の管理方法を変えるため、別TableへのINSERT文を流す対応をしていたのですが、向き先がSlaveのまま実行しておりました。
なぜ起きたのか
完全なる自分の慢心です。
ちょうどその日は月初から新施策が始まるということもあり、その準備として深夜メンテをしておりました。
対応人員も少なくいこうということで、先の施策担当者から実行手順書を受け取って流すだけの状態でした。
「ああ、流すだけなら楽だ!」と思いそのままクエリを流し込んでおりました。
「本番実行はMasterに向き先を変えて実行する」 という一文を見逃して……
確認のために、本番に向けてSELECTを投げたら、
あれ……INSERTしたはずのデータがない……
実行コマンドを遡ると、対象がSlaveのままになっていることに気づく。
修正は無事できたものの、修正のためメンテが少し延長する結果となってしまいました。
どう修正したか
- SlaveをSTOP
- SlaveにINSERTしてしまった分をDELETE
- ずれた分のPOSを合わせる
- SlaveをStart
メンテ中ということもあり、Masterに対しての更新がないためすんなり復旧できました。
対策
Slaveに対しての書き込み権限を制限しました。
元々、READ ONLYオプションはついておりましたが、CONNECTION ADMINが付与されていた為、書き込めてしまう状態でした。
そのため、CONNECTION ADMIN権限を外すことで、Slaveに対しての書き込みをできないように対策しました。
そもそも、手順書を見間違えていたので、「気を付ける」となりがちですが、人間絶対ミスをするので、
そのミスをしないような設計や仕組みにしていこうぜ!という教訓です。