mysql通过binlog恢复数据

原文地址

一、查看是否开启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")
相关推荐
麦聪聊数据1 小时前
利用实时数据管道与 SQL2API 重构企业自动化审计架构
数据库·sql·低代码
麦聪聊数据1 小时前
重构开放生态:利用 QuickAPI 跨越遗留系统与敏捷交付的工程实践
数据库·sql·低代码·restful
百结2145 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY6 小时前
时区问题解决
数据库
Leinwin6 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695056 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水6 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat6 小时前
MySQL 服务基础
数据库·mysql
Maverick068 小时前
Oracle Redo 日志操作手册
数据库·oracle
攒了一袋星辰8 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql