记一次mysql 误删后的恢复记录
本文简单记录基于window环境下的MySQL误删后恢复的记录。
本人由于一时疏忽大意,用Navicat导出的某张表的表结构(a.sql文件中),原本想打开这个文件,修改表明后,在创建一张新表,
奈何,手速有点控制不住,直接拖到了Navicat中,瞬间,懵逼了,表被删除重建了。这张表记录着收费的明细,重要性不言而喻。
不一会客户电话就狂轰乱炸,虽然知道知道MySQL有备份文件+binglog可以恢复,但是从来没有试验过,这时手心已冒汗。只能找度娘来帮忙。
本文将恢复过程的做一次记录。
Binlog数据恢复是应用于数据库自最后一次备份后,期间由于某种原因,引起数据丢失后的恢复。
当引起数据丢失的时候,为了保险起见,应立即停止对外服务。
Mysql Binlog恢复步骤:
一、数据库停止对外服务
二、查看日志文件
show master logs;
三、刷新binlog,让后续的日志写入新的日志件,避免当前日志数据太多,查找关键点费时。
flush logs;
四、flush logs后,查看日志文件,就会比上次多了最后一个文件,那么数据丢失的操作应该在倒数第二个文件
show master logs;
五、使用mysqlbinlog查看日志,查找误操作的时间点
由于日志文件是二进制文件,所以需要用到mysqlbinlog导出转换人眼能够看懂的记录。
mysqlbinlog 在MySQL安装的目录bin
通过以下命令将日志导出,在E盘test.sql文件
C:\Program Files\MySQL\MySQL Server8.0\bin>mysqlbinlog.exe E:\\WINDOWS-4561231H-bin.000074 >E:\\test.sql
执行完成后。
打开E:\\test.sql 文件Ctr+F,通过关键语句,查找误操作的时间戳,如下:
同理,查找自上次备份时间戳,我们是当天23点备份,所以可以通过时间字符(下图高亮部分是我们要找的时间字符)查找,通过人工判断找到时间戳
六、时间戳转换
通过上一步找到上次备份的时间戳和误操作的时间戳,那就可以根据这个时间范围,进行恢复。
在进行恢复之前,可以通过下面的语句进行转换成年月日格式的时间。
SELECT from_unixtime(‘1625385170’);
误操作时间点
最后备份时间点
七、数据恢复
1、首先将备份还原
2、使用binlog文件,通过以上步骤找到的时间范围,来恢复未备份的数据
mysqlbinlog --start-datetime="2021-07-03 23:02:12" --stop-datetime="2021-07-04 15:52:50" -d testdb D:\\WINDOWS-4561231H-bin.000074 >mysql -uroot -pXXX testdb
这次血淋淋的教训,到此完结。