1、进入到mysql所在的bin目录
mysql -u root -p -default-character-set=utf8
命令解释:
-default-character-set:设置登录mysql时的编码格式
2、查看是否开启binlog
输入以下命令
show variables like 'log_bin';
显示为on代表已开启
3、查看binlog所在目录
show variables like'log_bin%';
此命令可以查看binlog所在位置
4、查找到最近的日志文件
show binary logs;
查看和自己误删数据最近的文件
5、执行下面命令
mysqlbinlog --base64-output=decode-rows -v --database=test --start-datetime="-01-14 09:00:00" --stop-datetime="-01-14 09:24:00" D:\ProgramData\MySQL\MySQL Server 8.0\Data\LAPTOP-M9PJ7F6N-bin.000148 > mysqllog.sql
命令解释
mysqlbinlog 命令的参数说明--base64-output=decode-rows //数据转换正常的字符,如果不设置这个参数将显示base64的数据--database=DBName //数据库名(一个mysql数据库比较多,指定方便恢复)--start-datetime="-11-26 18:00:00" //恢复起始时间--stop-datetime="-11-26 18:10:00" //恢复结束时间D:\MySQL\Data\mysql-bin_copy.000028 //为数据恢复的日志文件mysqllog.sql //恢复以后我们需要的文件名,在当前mysql的bin目录下面
如果该命令报如下错误,则有可能是登录mysql是没有指定编码格式,按照第一步操作重新登录一下。
6、将生成的mysqllog.sql里面的delete语句转成insert语句
最好是在linux下操作,执行如下命令
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