1、1.binlog必须开启,并且必须是ROW模式。如果这个前提不满足,那么下面这种方法恢复不了数据。
查看binlog是否开启 show variables like '%log_bin%'
查看binlog的模式 show variables like '%binlog_format%'
2、查看binlog文件的更新时间,确认删除数据日志存在于哪个binlog中。

3、找到binlog中删除语句放入新建delete.txt文本中。
/opt/local/mysql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000083|sed -n '/### DELETE FROM cop.sys_dept_post_detail/,/COMMIT/p'>/opt/delete.txt
4、将delete语句反转为insert语句,输出到sql文本中。
cat /opt/delete.txt|sed -n '/###/p'|sed 's/###//g;s/\/*./,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;'|sed -r 's/(@6.),/\1;/g'|sed 's/@[1-6]=//g'>/opt/insert.sql

注意:命令中的@3需要根据当前表字段的数量进行修改,例如你要恢复的表字段有20个,则此处要改为@20;
5、将生成的insert.sql导入数据库中。

1 对 “MYSQL-BINLOG-误删数据恢复”的想法;

回复 admin 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code