前言
昨天因客戶員工操作錯誤,導致快遞單號和訂單互換。客戶員工那邊讓筆記修改數據。
于是筆者寫下如下SQL來操作,導致了災難性事故。
update `t_order_fed_ex_record` set `tracking_number` = '884102170661', `master_tracking_number` = '884102170661', `push_flag` = 'NONE', `pick_up_status` = 0 where '884106116578';
執行SQL后,7550條數據的tracking_number和master_tracking_number都被更新為884106116578。
筆者后面才留意到where后面漏了字段條件!!!此操作進行了全表更新!
一個重大的運維事故由此誕生!
恢復過程
由于客戶比較摳,客戶的阿里云DMS服務并沒有開通SQL備份與回滾服務。所以筆者無法通過阿里云DMS控制臺一鍵操作數據回滾。
阿里云DMS提供的備份回滾功能很便捷,只須點擊獲取備份,根據選項即可快速進行數據恢復。操作位置如下圖:
但很可惜,筆者只能通過阿里云DMS提供的數據恢復工具進行恢復。
在使用這個工具的前提是,數據庫有開通binlog而且只能追溯半小時內的操作數據。
操作步驟如下:
- 在阿里云DMS控制臺,在對應的數據表進行鼠標右鍵。你會看到彈出的菜單有一個數據方案,鼠標移到【數據方案】會有一個【數據追蹤】選項。
- 點擊【數據追蹤】,會彈出以下所圖。
3. 根據剛才的操作動作進行選擇選項。筆者操作的是update,而且是單表操作,數據勾選的追蹤類型為【更新】,也選擇對應的時間范圍。
4.點擊申請之后,阿里云DMS會生成一個數據追蹤工單,隨后只須耐心等待阿里云DMS完成日志處理。待日志處理完成后,您就可以以下界面進行日志搜索。
5. 根據操作的時間,進行范圍搜索,隨后點擊【導出回滾腳本】。待SQL腳本下載完畢,就可以在DMS控制臺進行執行SQL腳本回滾數據啦。
后語
- 數據庫一定要開啟binlog配置,以防不測。
- 生產環境數據操作需極度謹慎。雖為私人項目,仍需保持專業嚴謹態度。