【江湖救急】通过mysqlbinlog恢复误删除数据
🐬数据库版本:MySQL 8.0.30
问题与解决思路
应用用户误操作使用DELETE语句删除了某张表中的几十万条数据,需要进行数据恢复。数据库备份场景为每天凌晨做一次全量备份。应用没有当天的应用库数据备份。
实际的恢复场景中,通常是搭一个新库,拿前一天的全备在新库做一个全量恢复,然后从原库拷贝当天的binlog文件进行增量恢复。等到新库恢复到数据删除时间点前时,对数据进行对比校验,再将被误删除的数据单独导出来,导入生产环境的原库即可。
生产环境不建议在原库直接进行恢复。因为同一个库中,同一个GTID号只能对应一个事务,因此直接执行下面的语句什么也不会发生:
mysqlbinlog --start-position=1927 --stop-position=2298 -d testdb /mysql/data/binlog/mysql-bin.000509 | mysql -uroot -h127.0.0.1
指定skip-gtids=true
参数可以把binlog日志中已经执行