告别复杂日志解析 用bin2sql轻松实现MySQL数据闪回

mysqlbinlog⼯具使用

use test;
CREATE TABLE `t1` (`id` INT(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO t1(id, name) SELECT 101, 'tome101';
INSERT INTO t1(id, name) SELECT 102, 'tome102';
INSERT INTO t1(id, name) SELECT 103, 'tome103';
INSERT INTO t1(id, name) SELECT 104, 'tome104';
INSERT INTO t1(id, name) SELECT 105, 'tome105';
INSERT INTO t1(id, name) SELECT 106, 'tome106';
INSERT INTO t1(id, name) SELECT 107, 'tome107';
INSERT INTO t1(id, name) SELECT 108, 'tome108';UPDATE t1 SET name = 'jack101' WHERE id = 101;
UPDATE t1 SET name = 'jack103' WHERE id = 103;
UPDATE t1 SET name = 'jack105' WHERE id = 105;DELETE FROM t1 WHERE id = 102;
DELETE FROM t1 WHERE id = 104;
DELETE FROM t1 WHERE id = 106;

此时: 通过命令

show binlog events in 'binlog.000009' \G

 可以看到所有产出的binlog日志:

查看binlog内容

mysqlbinlog --no-defaults --database=test  --start-datetime='2025-3-12 11:37:00'   mysql-bin.000009 | less

按照时间读取

mysqlbinlog --no-defaults --database=test --base64-output=decode-rows -v    
binlog.000009 --start-datetime='2025-3-12 22:45:00'   --stop-datetime='2025-3-12 23:45:00'| less#加上--base64-output=decode-rows –v 选项解析
##base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows选项将把基于行的事件解码成一个SQL语句

按照点位读取

mysqlbinlog --no-defaults --database=test --base64-output=decode-rows -v    
binlog.000009 --start-position=xxxxx   --stop-position=xxxx| less

bin2sql⼯具恢复误删除数据

创建用户并给权限,插入测试数据

create user 'dba'@'%'identified by 'mysql';
GRANT all ON *.* TO 'dba'@'%';
grant super on *.* to 'binlog2sql'@'%';
create table a1(id int,name varchar(10));
insert into a1 values (1,'a');

安装必要的依赖包

yum -y install epel-release 安装一个python3.8,这里我直接上传的软件包
1.上传软件包
2.
sudo yum groupinstall -y "Development Tools"
sudo yum install -y gcc gcc-c++ make zlib-devel bzip2 bzip2-devel readline-devel \sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel
3.
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall

 安装bin2sql

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt 
pip3 install  pymysql 

 说实话安装过程坑极多,给的安装教程又很简单

官网给的安装教程:真心希望能改进一下文档。。。

bin2sql 的使用:

标准用法-解析出执行过的sql
python binlog2sql.py  -h127.0.0.1 -P3306  -udba -pmysql -dtest -ta1 --start-file='binlog.000001'

解析回滚SQL 
python binlog2sql.py --flashback -h127.0.0.1 -P3306  -udba -pmysql -dtest -ta1 --start-file='binlog.000001'

如上图,我执行了一条insert 语句 ,bin2sql 能解析出它的回滚语句是什么。

实战误删整张表数据,需要紧急回滚

表内容如下

 

 恢复步骤

 1.登录mysql,查看目前的binlog文件

2.最新的binlog文件是mysql-bin.000001,我们再定位误操作SQL的binlog位置。误操作人只能知道大致的误操作时间,我们根据大致时间过滤数据。 

 python binlog2sql.py  -h127.0.0.1 -P3306  -udba -pmysql -dtest -tt1 --start-file='binlog.000001' --start-datetime='2025-3-12 17:45:00' --stop-datetime='2025-3-12 17:50:00'

如图,bin2sql 解析出了所有误操作删除的内容。 

python binlog2sql.py  -h127.0.0.1 -P3306  -udba -pmysql -dtest -tt1 --start-file='binlog.000001' --start-datetime='2025-3-12 17:45:00' --stop-datetime='2025-3-12 17:50:00' -B >rollback.sql | cat

 执行sql 文件,数据恢复成功。

mysqlbinlog VS bin2sql

对比维度mysqlbinlog (MySQL 官方工具)bin2sql (第三方开源工具)
核心功能解析二进制日志,生成原始 SQL 或回滚语句从二进制日志中解析出可读 SQL(正向/反向),支持事务拆分
优势1. 官方支持,兼容性高
2. 直接集成于 MySQL,无需安装
3. 支持时间范围、数据库过滤等基础过滤
4. 可生成回滚 SQL(需配合 -v 或第三方脚本)
1. 输出 SQL 可读性更好(直接展示 DML)
2. 支持事务拆分,精准定位操作
3. 提供用户权限解析(可选)
4. 支持生成反向 SQL(数据回滚)
5. 部分工具提供 Web 界面(如 Binlog2SQL)
劣势1. 输出结果含底层细节(如 @1=...),需手动处理可读性
2. 复杂事务解析困难(如大事务)
3. 无原生用户权限信息解析
4. 依赖命令行操作,对新手不友好
1. 依赖 Python 环境
2. 处理超大 binlog 时性能较低
3. 功能局限(仅生成 SQL,无直接恢复功能)
4. 社区支持弱于官方工具
5. 部分场景需手动处理(如 DDL 语句)
典型场景1. 快速查看 binlog 内容
2. 结合脚本实现数据恢复
1. 误操作数据恢复(生成反向 SQL)
2. 审计日志分析
依赖环境仅需 MySQL 客户端需 Python 及依赖库(如 pymysql
输出灵活性支持原始 SQL、ROW 格式解析、时间过滤支持正向/反向 SQL、事务级过滤、表级过滤
用户友好性低(需熟悉命令行参数)中(提供更直观的 SQL 输出和过滤选项)
性能高(C++ 编写,原生工具)中低(Python 解析,大文件处理较慢)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32569.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业三防平板AORO-P300 Ultra,开创铁路检修与调度数字化新范式

在现代化铁路系统的庞大网络中,其设备维护与运营调度的精准性直接影响着运输效率和公共安全。在昼夜温差大、电磁环境复杂、震动粉尘交织的铁路作业场景中,AORO-P300 Ultra工业三防平板以高防护标准与智能化功能体系,开创了铁路行业移动端数字…

Microsoft Dragon Copilot:医疗AI革命开启,用语音终结手写病历时代

微软正式发布全球首个医疗行业一体化语音AI助手Microsoft Dragon Copilot,标志着临床工作流程正式迈入“人机协作”新时代。这款工具通过语音+文本混合架构,将医生口述内容实时转化为结构化病历,并深度整合电子健康记录(EHR)系统,彻底颠覆了传统手写病历模式。根据微软官…

数据库约束

数据库约束 1. NULL约束2. UNIQUE:唯一约束3. DEFAULT:默认值约束4. PRIMARY KEY:主键约束5. FOREIGN KEY:外键约束6. CHECK约束 数据库约束是关系型数据库的一个重要功能,主要作用是保证数据的正确性,也就…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤: 一、基础准备: 工具下载网址页面:https://www.cmsoft.cn/resource/102.html 下载安装好后,根据需要可以创建多个server,双击程序图标运行即可,下面…

ChatGPT课件分享(37页PPT)

资料解读:ChatGPT课件分享 详细资料请看本解读文章的最后内容。 近年来,人工智能技术的迅猛发展引发了全球范围内的广泛关注,尤其是以OpenAI为代表的公司在自然语言处理领域的突破性进展,彻底改变了人机交互的方式。本文将详细解…

【机器学习】主成分分析法(PCA)

【机器学习】主成分分析法(PCA) 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导(梯度上升法求解目标函数)六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法:两个界面分开来写优化写法:两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…

重邮数字信号处理-实验六用 MATLAB 设计 IIR 数字滤波器

一、实验目的 1、加深对 IIR 数字滤波器设计方法和设计步骤的理解; 2、掌握用模拟滤波器原型设计 IIR 数字滤波器的方法; 3、能编写 MATLAB 函数,掌握设计 IIR 数字滤波器的函数调用方法; 4、根据不同的应用场景&#xff0…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上! mv指令 m…

Python文件,模块

一.文件 1.生成一个文件: 2. 提示 : 第二次读时因为之前已经对文件进行了读取操作,文件指针可能已经移动到了文件末尾。在这种情况下,再次调用 read() 方法将不会读取到任何新的内容,因为已经没有未读取的数据了。可以使用 seek() 方法将文…

基于python的升级队列加速决策

a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05:16:20 建筑b升级需要06:06:54 建筑c升级需要00:37:00 建筑d升级需要…

编译OpenSSL

OpenSSL简介 OpenSSL是一个用于加密和安全连接的开源软件库。它提供了一系列的加密算法、密码学功能和安全协议的实现,包括SSL(Secure Sockets Layer)和TLS(Transport Layer Security)等用于网络安全的协议。OpenSSL可…

Win 转 MacBook Pro 踩坑指南

前言 Window 和 macOS 系统的差异还是很大的,我从 Thinkpad 转用 M1 的 Macbook pro 已经一年了,几乎没有任何不适应,整体感受那是真的牛👃,速度和续航惊艳到我了,同时开启 6个 vscode 加几十个浏览器标签…

uniapp uniCloud引发的血案(switchTab: Missing required args: “url“)!!!!!!!!!!

此文章懒得排版了,为了找出这个bug, 星期六的晚上我从9点查到0点多,此时我心中一万个草泥马在崩腾,超级想骂人!!!!!!!!! uniCloud 不想…

数据结构和算法--仅仅用于理解里面的术语,入门级别

数据结构和算法 预先知识:java 黑马前29节 cmd命令: 文件夹路径不区分大小写 E: dir:查看所有文件 cd 目录 :进入 cd… 返回上一级 cd 目录1\目录2 cd\ 回到根目录 cls 清屏 exit 退出 打开文件夹必须用cd 查找,但是文件不用&am…

【设计模式】通过访问者模式实现分离算法与对象结构

概述 定义:封装一些作用于某种数据结构中的各元素的操作(将数据结构于元素进行分离),它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色: 抽象访问者(Visitor)角色&#xff…

低版本 Linux 系统通过二进制方式升级部署高版本 Docker

​ 一、背景: 在一些 Linux 系统中,由于系统自带的软件源版本较低,或者因网络、权限等限制无法直接通过源文件来升级到最新版本的 Docker。这种情况下,采用二进制方式升级部署高版本 Docker 就成为一种有效的解决方案。下面将详…

SpringAI+Ollama+DeepSeek本地大模型调用

前言 大型语言模型(LLM)在自然语言处理领域取得了突破性进展,但其庞大的计算资源需求和高昂的调用成本,使得许多开发者望而却步。如何高效、便捷地调用大模型,并将其应用于实际场景,成为了亟待解决的问题。…

【大模型科普】AIGC技术发展与应用实践(一文读懂AIGC)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…

数据结构与算法:归并排序

目录 归并排序的基本思想 归并排序的特性总结 代码 归并排序的非递归版 归并排序的基本思想 归并排序是建立在归并操作上的一种有效的排序算法。改算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列…