危険察知4 択難易度 基礎

状況

期限切れクーポンを本番 DB(MySQL)から削除する作業。手順書は次の 4 行だけだった。

この手順書に欠けている、最も重要なものは?

1. 作業開始をチャットで連絡する2. mysql -h db-prd-01 -u ops shop で接続する3. DELETE FROM coupons WHERE expired_at < NOW();4. 作業終了をチャットで連絡する

正答

  1. NOW() ではなく CURRENT_TIMESTAMP と書くべき
  2. 連絡はチャットではなく電話で行うべき
  3. 接続時に -p を付けてパスワードを入力する手順がない
  4. 削除前の件数確認と、戻すためのバックアップやトランザクションがない

解説

MySQL の既定は autocommit なので、DELETE は実行した瞬間に確定する。手順書には、同じ条件で SELECT COUNT(*) して想定件数と比べる確認も、対象行のバックアップや BEGIN〜COMMIT もないため、条件を誤っても気づけず、戻す手段もない。NOW() と CURRENT_TIMESTAMP は MySQL では同じ意味で問題ではない。パスワードの入力方法や連絡手段は運用の細部で、データを失う危険に比べれば優先度は低い。

runbookmissing-stepbackup

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ