Loading... # 引言 ⚠前提是在数据删除前,需要开启binlog,并且是raw格式的 ![image.png](https://www.zunmx.top/usr/uploads/2024/11/3479594601.png) ℹ清楚当时的操作时间 ⚠执行的 `DELETE` 语句 # 找到binlog文件 这里可以通过`my.cnf`或者`my.ini`来确定binlog保存的路径,可以通过文件创建时间来简单的判断,也可以通过`mysqlbinlog`来判断 ![image.png](https://www.zunmx.top/usr/uploads/2024/11/1776247337.png) # 查找相应时间段数据 `mysqlbinlog --base64-output=DECODE-ROWS --verbose --start-datetime="2024-11-27 12:00:00" --stop-datetime="2024-11-27 12:05:00" .\mysql-bin.000647` 如果存在数据输出,那么就说明你找对binlog了,接下来就需要导出成SQL文件了。 ```bash mysqlbinlog --base64-output=DECODE-ROWS --verbose --start-datetime="2024-11-27 12:00:00" --stop-datetime="2024-11-27 12:05:00" .\mysql-bin.000647 > recovery.sql ``` ![image.png](https://www.zunmx.top/usr/uploads/2024/11/938403076.png) # 转换SQL 因为那里全部都是delete,接下来需要转换成INSERT,这里可以简单的使用一下脚本来处理下,先把delete那部分文本提取出来,保存到一个新的文件中。 ```python sql = """INSERT INTO `xxxxxx`.`xxxxxx`(`xxcode`,`xxil`)VALUES""" with open(r"g:/recovery2.txt", 'r') as f: fff = f.read() split = fff.split("### DELETE FROM `xxxxxx`.`xxxxxx`") for i in split: if i == '': continue rid = i.split("\n")[2].split("=")[1] -- 暂不需要 rname = i.split("\n")[3].split("=")[1] rmail = i.split("\n")[4].split("=")[1] sql += f"({rname},{rmail})," print(sql[:-1]) ``` 因为涉及到一些敏感数据,这里就打码了。 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏