MySQL 8.0 误update数据后使用mysqlbinlog解析出来的语句将生产库内所有表删除并重建
客户在生产环境误更新了一张表的数据,尝试使用binlog恢复误更新数据的时候误将所有表删除并重建。 MySQL误操作数据修复 MySQL数据库修复 MySQL数据库事务日志恢复
客户名称: 保密
数据类型: MySQL 8.0.33 on Windows
数据库大小: 1 GB
故障检测: 客户执行update语句未加where条件误更新了一张表的一个字段的所有内容,客户MySQL实例开启了log_bin。客户尝试使用mysqlbinlog解析binlog事务日志内容获取回滚语句,但是误操作将生产数据库内所有表删除并重建了。
使用老备份及不全的binlog恢复。
执行mysqlbinlog解析出来的语句时报错:
[ERROR] [MY-013146] [Repl] Replica SQL: Column 17 of table 'supervisor.b_witness_data' cannot be converted from type 'blob' to type 'varchar(300(bytes) utf8mb3)', Error_code: MY-013146
修改表结构:alter table supervisor.b_witness_data modify `witness_res` text DEFAULT NULL COMMENT '见证结论';
[ERROR] [MY-010584] [Repl] Replica SQL: Could not execute Update_rows event on table supervisor.sys_user; Can't find record in 'sys_user', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's source log FIRST, end_log_pos 48491639, Error_code: MY-001032
找不到行数据导致update执行失败,使用脚本将UPDATE语句内容替换为REPLACE INTO。
修复结果: 数据恢复率达90% 客户非常满意。将恢复出来的所有表数据导入客户生产环境使用没有任何问题。
在此提醒大家重要的数据库操作之前务必备份数据库。