MySQLbinlog反解析
反解析delete语句
背景:delete table忘了加条件导致整张表被删除
恢复⽅式:直接从binlog⾥反解析delete语句为insert进⾏恢复
导出删指定表的DELETE语句:
mysql中delete语句# mysqlbinlog -vv -d dbname mysql-bin.000048 | awk '/DELETE FROM/ && (/dbname.tbname/ || /\`dbname\`.\`tbname\`/){ while(1){
print $0;
getline;
if($0 !~ /^###/){
break;
};
}
}' > dbname.
去掉binlog每⾏开头的#
# sed -i 's/^### //g' dbname.
语句转换 DELETE --> INSERT
# sed -i "s/^DELETE FROM/INSERT INTO/g" dbname.
# sed -i "s/^WHERE/VALUES(/g" dbname.
# sed -i '/@13=.*/a );' dbname.
字段处理
# cat dbname. | awk -F"=|/*" '{
if($0 ~ /^INSERT|^VALUES|^);/){
print $0;
}else{
printf $2",";
};
}' > dbname.tbname.insert.sql
去掉values()最后⼀个逗号
# sed -i "s/,);$/);/g" dbname.tbname.insert.sql
⾄此就将delete语句反解析为insert语句了
重新导⼊数据库
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论