Py读取binlog生成insert恢复误删数据

160 阅读1分钟

市场人员前几天说删除某些记录,但是今天又要恢复......

操蛋啊!~!! 还好前辈们早就启用了binlog

进入mysql环境 查询binlog所在目录 exit退出mysql环境 cd到刚刚查询到binlog所在目录 执行 “ll”命令查看日志文件生成的时间 根据需要导出的时间选择文件

# 是否启用binlog日志
show variables like 'log_bin';

# 查看详细的日志配置信息
show global variables like '%log%';

# mysql数据存储目录
show variables like '%dir%';

# 查看binlog的目录
show global variables like "%log_bin%";

查看所有binlog日志列表
show master logs;

利用mysqlbinlog导出日志

mysqlbinlog -v --base64-output=DECODE-ROWS /var/lib/mysql/binlog.000920 
   --start-datetime="2023-02-15 9:21:30"--stop-datetime="2023-02-15 10:30:59" >1.txt

利用pyhton来读取文件 生成insert

```
# mysqlbinlog -v --base64-output=DECODE-ROWS /var/lib/mysql/binlog.000920 --start-datetime="2023-02-15 9:21:30"
#      --stop-datetime="2023-02-15 10:30:59" >1.txt
# 导出的日志文件 从中找出指定表在特定时间段中被删除的数据 并根据脚本生成insert语句

# 你要恢复误删数据的表名 可以从binlog中复制 注意不要多复制空格
TableName = "`njbx_ms_storehouse`.`store_house_order`" 
value = "INSERT INTO " + TableName + " VALUES" 
file = open(r"D:\1.txt", 'r', encoding='utf-8')  # D:\1.txt你复制出的文件路径
line = file.readline()  
# 逐行读取:
while line:
    if line.__contains__("DELETE FROM " + TableName):
        line = file.readline()
        if line.__contains__("### WHERE"):
            value += "\n("
            line = file.readline()
            while line.startswith("###   @"):
                value += line.split("=")[1].rstrip("\n") + ","
                line = file.readline()
            value = value.rstrip(",")+"),"
    line = file.readline()
file.close()
value = value.rstrip(",")+";"
print(value)
```

从控制台复制生成的inset语句 执行sql 完成