第一步:先查看binlog功能是否开启
show variables like ‘%log_bin%’;
如果为log_bin为ON说明可以恢复,如果为OFF说明没有开启binlog,也没有预先生成回滚SQL,那可能真的无法快速回滚了;
第二步:查看数据文件存方路径
show variables like ‘%datadir%’;
打开数据库所在路径/data1/mysql_root/data/20155/,查看有mysql-bin.****这样的文件,注意以DELETE删除的时间,对比mysql-bin文件的修改时间,如26日18:00左右删除的,所以找mysql-bin.000028这个文件
第三步:找到mysql安装目录
show variables like “%basedir%”;
/data1/mysql_root/base/mysql-txsql-5.7.18-20210630-linux-x86_64_sh12_25g_1629037502/mysql/
CMD命令符进到Mysql安装目录下,找到mysqlbinlog.exe,如果没有说明你安装的是假mysql.
第四步.通过mysqlbinlog 恢复删除的数据日志记录
mysqlbinlog --base64-output=decode-rows -v --database=DBName
–start-datetime=“2019-11-26 18:00:00”
–stop-datetime=“2019-11-26 18:10:00”
D:/MySQL/Data/mysql-bin_copy.000028 > mysqllog.sql
mysqlbinlog 命令的参数说明
–base64-output=decode-rows //数据转换正常的字符,如果不设置这个参数将显示base64的数据
–database=DBName //数据库名(一个mysql数据库比较多,指定方便恢复)
–start-datetime=“2019-11-26 18:00:00” //恢复起始时间
–stop-datetime=“2019-11-26 18:10:00” //恢复结束时间
D:/MySQL/Data/mysql-bin_copy.000028 //为数据恢复的日志文件
mysqllog.sql //恢复以后我们需要的文件名
打开mysqllog.sql文件,搜索 DELETE 关键字,找到被删除数据,看到这些数据以后总算放心了,如下图:
第五步:把mysqllog的DELETE转换为Insert语句,这个在liunx下操作方便(有人用python转换也可以),把文件mysqllog.sql复制Liunx下
cat mysqllog.sql | sed -n ‘/###/p’ | sed ‘s/### //g;s//./,/g;s/DELETE FROM/;INSERT INTO/g;s/WHERE/SELECT/g;’ |sed -r ‘s/(@17.*),/1;/g’ | sed ‘s/@1=//g’| sed ‘s/@[1-9]=/,/g’ | sed ‘s/@[1-9][0-9]=/,/g’ > mysqllogOK.sql
转换以后打开mysqllogOK.sql文件,因为批量替换前面多个一个分号,去掉以后,把所有生成的Insert语句在navicat下执行即可恢复所有DELETE删除的数据。