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")
相关推荐
广州灵眸科技有限公司12 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒15 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手15 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学15 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh17 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户713335851562418 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898618 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD18 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo18 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
用户713335851562419 小时前
MySQL - InnoDB 的 Buffer Pool
mysql