首先查看是否开启了binlog
show variables like '%log_bin%';

没有开启binlog,就无法使用binlog进行数据找回
查找binlog路径
show variables like '%datadir%';

找到对应的binlog文件
一般为修改时间最近的文件

按误操作时间找到对应的binlog记录,并转换为sql
mysqlbinlog --base64-output=decode-rows -v --database=数据库名称 --start-datetime="2022-11-26 11:32:00" --stop-datetime="2022-11-26 11:33:00" "/usr/local/var/mysql/binlog.000026" > /../mysqllog.sql
将文件中DELETE语句转换为INSERT语句
cat mysqllog.sql | sed -n '/###/p' | sed 's/### //g;'| sed 's/DELETE FROM/);INSERT INTO/g;' |sed 's/WHERE/VALUES(/g;' |sed -E 's/(@17.),/\1;/g' | sed 's/@1=//g'| sed 's/@[1-9]=/,/g' | sed 's/@[1-9][0-9]=/,/g' > mysqllogOK.sql
注意这种替换方式,需要对结果文件的开头和结尾进行处理。
网友评论