简单记录几条命令通过mysql的binlog日志进行删除数据的恢复
1.先把mysql的binlog日志上传或下载到linux机器中
2.找到大致删除时间,越具体越好,确定恢复时间后查看文件内容
mysqlbinlog --no-defaults mysql-bin.023036 --start-datetime="2024-07-24 16:43:00.899" --stop-datetime="2024-07-24 16:45:00.899" > a1.txt
参数说明:
-vv 转换二进制内容
--start-datetime 起始时间
--stop-datetime 终止时间
--start-position 起始位置
--stop-position 终止位置
3.起始位置和终止位置根据实际情况进行选择一般是两个BEGIN之间的,如果为了保险可以多一些后面在进行过滤也是可行的
比如本次我需要的stock_bill已经包含在内了
起始位置:438978580 终止位置438978816
mysqlbinlog --no-defaults -vv --base64-output=decode-rows --start-position='438978389' --stop-position='438997498' mysql-bin.023036 >a2.txt
查看a2.txt文件的信息
4.格式处理,只过滤本次需要的信息,本次过滤后文件中只包含DELETE的删除信息了
通过查看上面的文件或者查看设计表看到字段的个数
此处的A65为字段长度+1
grep -A65 'DELETE FROM `erp_biz_1`.`stock_bill`' a2.txt >a3.txt
5.将删除语句更改为插入语句,产出的文件可执行在库中执行
cat a3.txt |sed -n '/###/p'| sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@65.*),/\1;/g' | sed 's/@[1-9]=//g' | sed 's/@[1-9][0-9]=//g' > a4.txt