生產資料update沒加where條件(從執行到恢復)

SeeMoonUp發表於2019-02-15

新功能上線

20180701上線新功能 平臺使用者錢包管理

訂單收入、銷售獎勵收入、系統獎勵收入 三個收入模組(分別有單獨的明細和提現記錄)進行合併即統一入口,增加了新的表account和account_log來記錄對應的使用者賬戶資訊,上線時對之前的系統流水進行了介面一次性同步資料進入上述兩張表中,系統上線,可以休息了

生產資料update沒加where條件(從執行到恢復)

問題出現

系統上線三天之後 發現資料出現問題,檢查問題源頭,發現同步資料介面中出現問題導致資料不一致

發現了問題開始處理吧,因為只是部分資料出現問題只需要運算元據庫更新幾個使用者的資料就可以,好的,下面開始操作 重點來了:

  1. 連線上資料庫

  2. 書寫sql

  3. update account_log set leftMoney = 8888;

  4. 回車

  5. 臥槽 什麼鬼where條件呢 臥槽。。。

    臥槽

  6. ctrl+c 臥槽 完蛋了 來不及了

  7. 臥槽 慌得一筆

  8. 檢查資料庫 select count(1) where leftMoney = 8888;

  9. 涼了。。。。

    涼了。。。

資料恢復

好了 怎麼辦吧 趕快想一下現在的影響

  1. 使用者看到的餘額是有問題的
  2. 現在是晚上11點 使用者線上數不高
  3. 趕快恢復資料

開始解決

  1. 聯絡負責人 詢問資料庫是否可以回滾(被告知不行 只能回滾到某一個時間點 會早上線上資料丟失)
  2. 是否可以同步?可以同步 但是上線後兩天的資料都在新表中 沒有記錄 怎麼去同步 部分資料會丟失

好吧 第一種方案直接不能走通了 看來只能使用第二種方案了

改造同步資料介面,支援上線後產生的account_log資訊的同步

因業務原因,需要確認哪些提現是上線後產生的,逐一去日誌檔案中根據關鍵詞來篩選提現記錄(大概300多條)想想都眼睛痛

接下來就是執行介面,測試資料了,線上資料量較大,需同步資料較多,大概百萬數量級,同步一次資料耗時2個半小時左右

耐心等待執行中。。。。

好了 執行完了 檢查一下 臥槽有個條件寫錯了

需要重新同步

想死的心都有了

來吧 修改程式碼 再同步一次

終於在凌晨6點同步完了(此時我的小夥伴已經扛不住睡一會了)。。。

檢查資料 一切正常,啊,終於可以睡覺了,跟負責人申請休息,睡覺,感謝我的小夥伴跟我一塊解決了這個問題。

現線上上庫執行sql必須確認三遍,穩得很。。。

大家引以為戒。哈哈哈

收官大吉

未經作者允許 請勿轉載 歡迎大家關注我的技術部落格

圖片摘自技術小黑屋

相關文章