MYSQL-BINLOG-误删数据恢复
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导入数据库中。
级联删除的记录并不记在binlog上