告别复杂日志解析 用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 1
 1: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='20
 25-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 解析,大文件处理较慢)
相关推荐
小陈phd17 分钟前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
2401_8384725125 分钟前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
知识即是力量ol43 分钟前
基于 Redis 实现白名单,黑名单机制详解及应用场景
数据库·redis·缓存
zhihuaba1 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
u0109272711 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
小光学长1 小时前
基于ssm的农业管理系统8y15w544(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
Mr_Xuhhh1 小时前
MySQL表的增删改查(CRUD)操作详解
数据库·windows
定偶2 小时前
MySQL安装
数据库·mysql
Zzzzmo_2 小时前
【MySQL】数据库约束 及 表的设计
数据库·mysql
码云数智-大飞2 小时前
Oracle RAS:AI时代守护企业数据安全的智能盾牌
数据库·人工智能·oracle