mysql binlog 回滚
------------------------------------------------------------------------------------
先教你两步:查 binlog 是否开启 + 查看你这条 update 的原始记录,一步一步来。
1. 查看 MySQL 是否开启 binlog
登录 MySQL 执行:
sql
show variables like 'log_bin';
- 结果为 ON → 已开启(可以回滚)
- 结果为 OFF → 没开启(这条 update 无法恢复)
顺便查看 binlog 模式(必须是 ROW 才能回滚):
sql
show variables like 'binlog_format';
必须是:ROW
2. 查看 binlog 文件和位置
sql
show master logs;
show variables like 'datadir';
show variables like 'log_bin_basename';
3. 查看你这条 update user set name='xxx' where id=1 的 binlog 记录
假设 binlog 文件是
mysql-bin.000001,在 /var/lib/mysql/ 下:bash
运行
mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/mysql-bin.000001 | grep -A 10 -B 10 "UPDATE"
或者按时间过滤(更精准):
bash
运行
mysqlbinlog -v --base64-output=decode-rows \
--start-datetime="2026-04-10 00:00:00" \
--stop-datetime="2026-04-10 23:59:59" \
/var/lib/mysql/mysql-bin.000001 \
| grep -A 15 -B 5 "user"
你会看到类似结构(ROW 模式下):
plaintext
### UPDATE `test`.`user`
### WHERE
### @1=1 (id)
### @2='原来的值' (name 修改前)
### SET
### @2='被改错的值' (name 修改后)
- @2=' 原来的值' 就是你要回滚的内容
- 直接拼成:
sql
update user set name='原来的值' where id=1;
4. 重要提醒
- 如果
log_bin = OFF:这条 update 永久无法回滚 - 如果
binlog_format = STATEMENT:看不到旧值,也无法回滚 - 只有 log_bin=ON + binlog_format=ROW 才能恢复数据
把下面三条命令的结果发给我,我可以直接帮你定位并生成回滚 SQL:
sql
show variables like 'log_bin'; show variables like 'binlog_format'; show master logs;
------------------------------------------------------------------------------------
三、如果你误更新了 8201 ~ 最大 ID 所有数据
执行这条批量恢复:
sql
UPDATE zygcbusiness.task_info_bak2026
SET title = REPLACE(title, '1', '')
WHERE id > 8200 AND title LIKE '%1';
四、如果你想 用 binlog 完整回滚整个误操作(专业方案)
1. 找到你误操作的 binlog 位置
sql
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000XXX | grep -A 20 "task_info_bak2026"
2. 回滚到误操作之前
bash
运行
mysqlbinlog --stop-position="你的位置" mysql-bin.000XXX | mysql -uroot -p
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
我给你整理 MySQL 最实用、生产环境真正在用的 3 款 binlog 恢复 / 回滚工具,直接告诉你哪个最好用、怎么用、什么时候用,全部是误 update 恢复必备工具。
一、生产首选工具(最简单、最稳)
1. binlog2sql(推荐 99% 场景)
能做:
- 自动生成 回滚 SQL(update/delete/insert 都能回滚)
- 按时间、按库、按表过滤
- 直接生成可执行的 undo 语句
优点:
- 不用停库
- 不用解析复杂日志
- 误 update 一键回滚
2. MyFlash(美团开源,速度极快)
能做:
- 直接反向生成回滚语句
- 性能比 binlog2sql 更快
优点:
- 二进制工具,不用 Python
- 大日志处理更快
3. mysqlbinlog(MySQL 官方自带)
能做:
- 查看 binlog
- 基于位置 / 时间点恢复
缺点:
- 不能自动回滚
- 要手动拼 SQL
二、你现在最需要:binlog2sql(最佳选择)
我直接给你 一键安装 + 一键回滚 命令。
安装(1 分钟)
bash
运行
yum install -y git python3 python3-pip
git clone https://github.com/danfengcao/binlog2sql.git
cd binlog2sql
pip3 install -r requirements.txt
回滚单个 update 命令(直接用)
bash
运行
python3 binlog2sql.py \
-h 127.0.0.1 \
-u root \
-p'你的MySQL密码' \
-P 3306 \
-d 库名 \
-t 表名 \
--start-file mysql-bin.000XXX \
--start-datetime "2026-04-11 09:00:00" \
--stop-datetime "2026-04-11 09:10:00" \
--sqltype UPDATE \
--flashback
输出
直接生成 回滚 update 语句,执行即可恢复!
三、工具对比(你一看就懂)
表格
| 工具 | 难度 | 是否自动回滚 | 生产推荐度 |
|---|---|---|---|
| binlog2sql | 简单 | ✅ 是 | ⭐⭐⭐⭐⭐ |
| MyFlash | 中等 | ✅ 是 | ⭐⭐⭐⭐ |
| mysqlbinlog | 难 | ❌ 否 | ⭐⭐ |
结论:
误 update 恢复 → 直接用 binlog2sql,最简单、最安全、最通用!
四、我可以直接帮你恢复
你只要发给我 3 条信息:
show master status;- 误操作时间(例如 2026-04-11 09:05)
- 库名 + 表名
我直接给你生成可执行的回滚命令,10 秒恢复数据。
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------

浙公网安备 33010602011771号