mysql通过binlog恢复数据
原文地址
一、查看是否开启binlog
是否开启
SHOWVARIABLESLIKE'log_bin';开启的模式
SHOWVARIABLESLIKE'binlog_format';查看当前使用的哪个文件
showmasterstatus查看所有
我们通过文件的最后修改时间,可以看出binlog覆盖的时间范围。一般后缀的数字越大,表示越新。
showmaster logs查看保存位置
SHOWVARIABLESLIKE'log_bin_basename';查看内容分析
mysqlbinlog --base64-output=decode-rows-v--start-datetime="2024-09-12 11:59:00"--stop-datetime="2024-09-12 12:01:00"mysql-bin.000213>binlog.sql
mysqlbinlog命令即可直接恢复等
二、删除命令恢复python脚本
自己改下脚本的表什么的
importreif__name__=='__main__':# 读取文件withopen(r'D:\pythonTools\Models\test.txt','r',encoding='utf-8')asf:content=f.read()# 分割每条 DELETE 记录blocks=content.split('DELETE FROM `dhgx_cloud_test`.`sys_user`')[1:]inserts=[]forblockinblocks:# 提取所有 @N=xxx 行matches=re.findall(r'###\s+@(\d+)=(.*)',block)ifnotmatches:continue# 构建字典 {位置: 值}values={}forpos,valinmatches:pos=int(pos)val=val.strip()ifval=='NULL':values[pos]='NULL'elifval.startswith("'")andval.endswith("'"):values[pos]=val# 保留引号else:values[pos]=f"'{val}'"# 非 NULL 且非字符串(如数字)也加引号更安全(MySQL 允许)# 确保有26个字段(缺失的设为 NULL)row=[]foriinrange(1,27):row.append(values.get(i,'NULL'))sql=f"""INSERT INTO `dhgx_cloud_test`.`sys_user` ( `user_id`, `dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`, `version`, `custom_id`, `is_ent_admin`, `ent_id`, `ent_name`, `position`, `enti_identity` ) VALUES ({', '.join(row)});"""inserts.append(sql)# 输出到文件withopen('./recover_sys_user.sql','w',encoding='utf-8')asf:f.write('\n'.join(inserts))print(f"已生成{len(inserts)}条 INSERT 语句,保存至 recover_sys_user.sql")