记一次MySQL数据表误操作修复

记一次MySQL数据表误操作修复

背景

同事在通过SQL直接修改数据库记录时,误更新了表中的所有数据

sql 复制代码
update t_1 set prop1=1, prop2=2;

联系了数据库的同事,表示直接使用BinLog回滚风险比较大,有可能整个库的数据都会出问题。

恢复方式及前提条件

计划恢复方式

介于数据库同事的"恐吓",我们考虑根据BinLog查询出修改前的原值,进行手动恢复。

前提条件

是否开启了BinLog

sql 复制代码
# 值为 ON,说明已开启
SHOW VARIABLES LIKE 'log_bin';

确认BinLog的格式为ROW

sql 复制代码
# 值为 ROW,则可以日志里看到旧数据
SHOW VARIABLES LIKE 'binlog_format';

找到原数据

找到BinLog并导出为SQL日志

BinLog 文件默认在 /var/lib/mysql/目录下

sql 复制代码
SHOW VARIABLES LIKE 'log_bin_basename';
bash 复制代码
cd /var/lib/mysql
# 查询 mysql-bin.xxxx 文件的时间
ls -l 
# 根据误操作的大概时间确定 BinLog 文件范围
# 使用 mysqlbinlog 命令将 BinLog 导出为SQL日志
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.00000X > temp_log.sql
# 如果 BinLog 日志很大,时间跨度很长,可以增加 --start-datetime,--stop-datetime 参数来限定时间范围
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v \
--start-datetime="2025-12-30 15:25:00" \
--stop-datetime="2025-12-30 15:35:00" \
/var/lib/mysql/mysql-bin.00000X > temp_log.sql

解读旧数据

在 temp_log.sql 文件中查询更新语句,比如 UPDATE db1.tab1

比如在 vi 中

bash 复制代码
/UPDATE \`db1\`\.\`tab1\`

注意 ### WHERE 和 ### SET 之间的部分,那是修改前的数据:

text 复制代码
# at 123456
#251230 15:30:01 server id 1  end_log_pos 123567 CRC32 0x12345678     UPDATE mydb.xxx
### UPDATE mydb.xxx
### WHERE
###   @1=1            // 这是修改前的主键ID
###   @2='旧值A'       // 这是修改前 col1 的旧值(你想要找的数据)
###   @3='旧值B'       // 这是修改前 col2 的旧值
### SET
###   @1=1
###   @2='111'        // 这是修改后的新值
###   @3='222'
# at 123567

@1, @2... 代表表中的第 1 列、第 2 列。

WHERE 部分记录的是更新前的快照,这就是你要找回的数据。

相关推荐
·云扬·20 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
霖霖总总20 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
それども21 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·1 天前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb
天空属于哈夫克31 天前
Java 版:利用外部群 API 实现自动“技术开课”倒计时提醒
数据库·python·mysql
luoluoal1 天前
基于深度学习的web端多格式纠错系统(源码+文档)
python·mysql·django·毕业设计·源码
crossaspeed1 天前
MySQL-索引
mysql
这周也會开心1 天前
Redis与MySQL回写中的数据类型存储设计
数据库·redis·mysql
计算机学姐1 天前
基于SpringBoot的民宿预定管理系统【三角色+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·mysql·信息可视化·intellij-idea·推荐算法
qq_336313931 天前
javaweb-web基础(springboot入门)
java·开发语言·mysql