一条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,唉,不然就这样了,还至于跑路😓