误删mysql某表数据,通过binlog日志进行数据恢复

本文介绍了如何通过MySQL的binlog日志来恢复误删的数据。首先确定误删的时间范围和binlog文件,然后使用特定命令解密并筛选出DELETE操作,将DELETE转换为INSERT语句,生成可执行的SQL文件。最后,在MySQL中执行该文件即可恢复数据。此外,还提到了一款数据误删闪回工具作为恢复的辅助选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【分享】误删mysql某表数据,通过binlog日志进行数据恢复
【理解:binlog日志】记录的是mysql客户端对数据库server的修改操作,包括DML DDL语句
【时间】误删时大概是那个时间范围
【位置】查看binlog日志的位置及时那个日志文件
【输出】命令解密binlog日志,截取对应时间点日志记录并输出到文件(a.txt)

mysqlbinlog --no-defaults --base64-output=decode-rows -v -v --start-datetime="2020-11-11 16:46:50" --stop-datetime="2020-11-11 16:53:10" /application/mysql/data/mysql-bin.000043  >> /application/a.txt

【过滤并替换】暂分为2步:
第一步:过滤非DELETE操作的文本输出到b.txt文件
命令:

sed -n '/### DELETE FROM `mes`.`prod_line_sn`/,/COMMIT/p' a.txt >> b.txt

注:
1.注意命令中的引号;
2.mes为数据库名字;
3.prod_line_sn为表名

第二步:多次过滤,并将delete语句替换为insert语句,得到数据库可直接执行的sql文件
命令:

cat b.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@23.*),/\1;/g' | sed 's/@[0-9][0-9]=//g' | sed 's/@[1-9]=//g' > source.sql

注:
1.@23代表当前表最大列的数量;
2.@[0-9][0-9]过滤两位列的字符(第10列-第99列);
3.@[0-9]过滤一位列的字符(第1列-第9列)

【恢复】
1,登录mysql数据库,mysql /source文件目录/source.sql
2,通过数据库操作工具,执行sql文件即可恢复

推荐使用:【数据误删闪回工具】
https://www.jb51.net/article/172030.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值