引言
⚠前提是在数据删除前,需要开启binlog,并且是raw格式的

ℹ清楚当时的操作时间
⚠执行的 DELETE 语句
找到binlog文件
这里可以通过my.cnf或者my.ini来确定binlog保存的路径,可以通过文件创建时间来简单的判断,也可以通过mysqlbinlog来判断

查找相应时间段数据
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文件了。
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

转换SQL
因为那里全部都是delete,接下来需要转换成INSERT,这里可以简单的使用一下脚本来处理下,先把delete那部分文本提取出来,保存到一个新的文件中。
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])
因为涉及到一些敏感数据,这里就打码了。


评论 0
还没有评论,来说点什么吧。