記一次線上表數據誤刪恢復過程

在今年3月份的一次發佈中,須要刪除一張業務表中某一天2點到7點的數據,同事寫了以下的sql:sql

DELETE FROM cr_guide_customer_rel WHERE '2019-03-06 01:59:59'< create_time < '2019-03-06 07:00:00'ide

發佈以前看到這條sql感受有點奇怪,可是沒有具體進行測試。測試

發佈完次日產品反應某個功能忽然沒有數據了,咱們到線上庫裏一查發現只有3月6號7點之後的數據了,以前的數據都被誤刪了,後來發現就是這條sql引發的,'2019-03-06 01:59:59'< create_time < '2019-03-06 07:00:00'這個條件其實等同於1=1,致使嚴重的生產事故!ui

 

當晚進行數據恢復,恢復過程以下:產品

一、首先建一張新表,新表的結構與老表結構一致io

二、讓DBA將數據先恢復到新建的表中,因爲恢復的數據與目前線上已有的數據必定有重複數據,須要去重gui

三、對比新表和線上表的數據差別,將新表中多餘的數據刪除,對比刪除語句以下:im

DELETE bak
FROM
    cr_guide_customer_rel AS origin,
    cr_guide_customer_rel_bak AS bak
WHERE
    origin.staff_id = bak.staff_id
AND origin.cust_no = bak.cust_no
AND origin.relation_type = bak.relation_type
AND origin.delete_flag = bak.delete_flag
AND origin.business_type = '1';數據

四、將新表中剩餘的數據從新導入到線上的表中,如此完成數據恢復!
 guide

相關文章
相關標籤/搜索