一条sql 引发的血案,删库恢复,切记delete前记得备份表,数据库记得开binlog

一条sql 引发的血案

DELETE from t_send_msg where site_id > '100'

某日发现接口异常,site_id 本来应该是 数字类型的,出现了随机字符串

那就删掉异常数据吧,可能年代久远,开发数据而已

设备id最大57

那么

DELETE from t_send_msg where site_id > 100

DELETE from t_send_msg_copy1 where site_id>100

> 1292 - Truncated incorrect DOUBLE value: '8fec54c20966fba07582e8f2dd017195'

> 时间: 0.027s

?? 删除不了字符串,嗯嗯

DELETE from t_send_msg where site_id > ‘100’

执行,4.2s

再查下异常数据在不

嗯嗯,删好了,就是查全部怎么空数据??

我删库了??

这数据好像有点用哦,旧数据没了影响那个位数的用户吗?

恢复吧,问问db delete 语句删除能恢复吗 不能,不过有binlog可以,

感觉看看 binlog开启没

还好

show variables like '%log_bin%';

flush logs;

show master logs;

mysqlbinlog --base64-output=decode-rows --start-datetime='2021-06-07 11:37:00' --stop-datetime='2021-06-07 11:40:00' -d thmsdb /var/lib/mysql/mysql-bin.000050 -v --result-file=/root/36-45.txt

--base64-output=decode-rows 是base64密文

终于看到明文数据,安心了

delete转 insert

借助notepad++ 替换 无用符合,去掉换行的话,还是用java吧,notepad太卡了,才17M数据,13w条而已

来来来。java开始写

public class TestDogForeach {

public static void main(String[] args) {

try {

BufferedReader in = new BufferedReader(new FileReader("G:\\Users\\Administrator\\Documents\\笔记\\35-40-1.txt"));

BufferedWriter out = new BufferedWriter(new FileWriter("D://1.txt"));

String str;

String sql = "";

while ((str = in.readLine()) != null) {

if(str.contains("into `thmsdb`.`t_send_msg`")){

sql+=";";

sql=sql.replace("select,","select ");

System.out.println(sql);

out.write(sql);

out.write("\n");

sql ="";

sql+=str.replace(";"," ");

}else {

sql+=str;

}

}

out.close();

System.out.println("文件创建成功!");

System.out.println(str);

} catch (IOException e) {

}

}

}

存个sql文件,DB说mysql插入不用临时关闭自增加配置,直接执行,ok

执行完成,吓死我

查查,数据在了

还好生产库配置了binlog,唉,不然就这样了,还至于跑路😓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值