网站首页 > 经典案例

MySQL 8.0数据库被之前备份文件覆盖 误操作恢复 MySQL数据库恢复 MySQL数据库事务日志恢复

客户在生产环境导入了2023-03-03的全量备份文件 MySQL误操作数据修复 MySQL数据库修复 MySQL数据库事务日志恢复

客户名称: 某律师事务所

数据类型: MySQL 8.0.23 on CentOS 7

数据库大小: 900 MB

故障检测: 误操作导入了2023-03-03的数据库全量备份文件,覆盖了当前生产数据库yl_user的所有表的数据。客户MySQL实例开启了log_bin。


系统参数binlog_expire_logs_seconds默认值为2592000,MySQL会自动清理30天之前的binlog文件。

最早的binlog日志文件binlog.000094中只包含自230523 16:23:40以来的所有事务日志记录。

幸运的是,客户还有在2023-05-31使用Navicat备份的数据库全量备份文件。

使用Navicat恢复2023-05-31的全量备份文件,恢复数据库yl_user从2023-05-31 14:00:12以来的所有增量日志数据。

mysqlbinlog --no-defaults --skip-gtids --start-datetime='2023-05-31 14:00:12' -d yl_user binlog.000094 > bin.sql

1)表结构不一致时,mysqlbinlog解析出来的事务日志导入mysql报错:

ERROR 1105 (HY000) at line 481577: Unknown error

错误日志文件中显示:

[ERROR] [MY-013146] [Repl] Slave SQL: Column 30 of table 'yl_user.sys_case_management' cannot be converted from 

type 'int' to type 'bigint', Error_code: MY-013146

解决方法:

alter table yl_user.sys_case_management modify `entrust_id` int DEFAULT NULL;


2)存在重复数据时,mysqlbinlog解析出来的事务日志导入mysql报错:

ERROR 1062 (23000) at line 12747256: Duplicate entry '29' for key 'sys_service.PRIMARY'

错误日志文件中显示:

[ERROR] [MY-010584] [Repl] Slave SQL: Could not execute Write_rows event on table yl_user.sys_case_management; 

Duplicate entry '1664168235940970496' for key 'sys_case_management.PRIMARY', Error_code: 1062; 

handler error HA_ERR_FOUND_DUPP_KEY; the event's master log FIRST, end_log_pos 247390894, 

Error_code: MY-001062

重复数据处理:

delete from sys_service where id = 29;


修复结果: 数据恢复率达99% 客户非常满意。将恢复出来的所有表数据导入客户生产环境使用没有任何问题。

在此提醒大家重要的数据库操作之前务必备份数据库。

 
上一篇:MySQL 5.7误删除表数据恢复 误操作恢复 MySQL数据库恢复 MySQL误删除数据恢复 下一篇:MySQL 8.0误update数据后使用mysqlbinlog解析出来的语句将生产库内所有表删除并重建