java误删的信息怎么恢复_记一次线上表数据误删恢复过程

在今年3月份的一次发布中,需要删除一张业务表中某一天2点到7点的数据,同事写了如下的sql:

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

发布之前看到这条sql感觉有点奇怪,但是没有具体进行测试。

发布完第二天产品反应某个功能突然没有数据了,我们到线上库里一查发现只有3月6号7点以后的数据了,之前的数据都被误删了,后来发现就是这条sql引起的,'2019-03-06 01:59:59'< create_time < '2019-03-06 07:00:00'这个条件其实等同于1=1,导致严重的生产事故!

当晚进行数据恢复,恢复过程如下:

1、首先建一张新表,新表的结构与老表结构一致

2、让DBA将数据先恢复到新建的表中,由于恢复的数据与目前线上已有的数据一定有重复数据,需要去重

3、对比新表和线上表的数据差异,将新表中多余的数据删除,对比删除语句如下:

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';

4、将新表中剩余的数据重新导入到线上的表中,如此完成数据恢复!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值