【分享】误删mysql某表数据,通过binlog日志进行数据恢复
【理解:binlog日志】记录的是mysql客户端对数据库server的修改操作,包括DML DDL语句
【时间】误删时大概是那个时间范围
【位置】查看binlog日志的位置及时那个日志文件
【输出】命令解密binlog日志,截取对应时间点日志记录并输出到文件(a.txt)
mysqlbinlog --no-defaults --base64-output=decode-rows -v -v --start-datetime="2020-11-11 16:46:50" --stop-datetime="2020-11-11 16:53:10" /application/mysql/data/mysql-bin.000043 >> /application/a.txt
【过滤并替换】暂分为2步:
第一步:过滤非DELETE操作的文本输出到b.txt文件
命令:
sed -n '/### DELETE FROM `mes`.`prod_line_sn`/,/COMMIT/p' a.txt >> b.txt
注:
1.注意命令中的引号;
2.mes为数据库名字;
3.prod_line_sn为表名
第二步:多次过滤,并将delete语句替换为insert语句,得到数据库可直接执行的sql文件
命令:
cat b.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@23.*),/\1;/g' | sed 's/@[0-9][0-9]=//g' | sed 's/@[1-9]=//g' > source.sql
注:
1.@23代表当前表最大列的数量;
2.@[0-9][0-9]过滤两位列的字符(第10列-第99列);
3.@[0-9]过滤一位列的字符(第1列-第9列)
【恢复】
1,登录mysql数据库,mysql /source文件目录/source.sql
2,通过数据库操作工具,执行sql文件即可恢复
推荐使用:【数据误删闪回工具】
https://www.jb51.net/article/172030.htm