一、查看是否开启binlog
是否开启
sql
SHOW VARIABLES LIKE 'log_bin';
开启的模式
sql
SHOW VARIABLES LIKE 'binlog_format';

查看当前使用的哪个文件
sql
show master status
查看所有
我们通过文件的最后修改时间,可以看出binlog覆盖的时间范围。一般后缀的数字越大,表示越新。
sql
show master logs
查看保存位置
sql
SHOW VARIABLES LIKE 'log_bin_basename';
查看内容分析
shell
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

二、删除命令恢复python脚本
自己改下脚本的表什么的
py
import re
if __name__ == '__main__':
# 读取文件
with open(r'D:\pythonTools\Models\test.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 分割每条 DELETE 记录
blocks = content.split('DELETE FROM `dhgx_cloud_test`.`sys_user`')[1:]
inserts = []
for block in blocks:
# 提取所有 @N=xxx 行
matches = re.findall(r'###\s+@(\d+)=(.*)', block)
if not matches:
continue
# 构建字典 {位置: 值}
values = {}
for pos, val in matches:
pos = int(pos)
val = val.strip()
if val == 'NULL':
values[pos] = 'NULL'
elif val.startswith("'") and val.endswith("'"):
values[pos] = val # 保留引号
else:
values[pos] = f"'{val}'" # 非 NULL 且非字符串(如数字)也加引号更安全(MySQL 允许)
# 确保有26个字段(缺失的设为 NULL)
row = []
for i in range(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)
# 输出到文件
with open('./recover_sys_user.sql', 'w', encoding='utf-8') as f:
f.write('\n'.join(inserts))
print(f"已生成 {len(inserts)} 条 INSERT 语句,保存至 recover_sys_user.sql")