一、背景
因为在一次上线的过程中,由于上线给的数据库表表明相同,而数据库名不同,由于同事给的sql语句没有评审,并未给创建数据库语句,导致已存在生产的数据库表被重建了,被重建表的数据库表数据完全丢失。基于这种情况需要紧急恢复数据。但是,郁闷的是AWS的快照在20天前就停止了,最近的数据也只能从20天前数据为基点。恢复过程中,没有想象的恢复那么顺利,总结如下:
二、方法一 基于通用方法恢复数据
基于下面这些命令,都没有成功恢复数据。
$> /usr/bin/mysqlbinlog --no-defaults ‐‐stop‐position=123 ‐‐stop‐position="1493923" /db/mysql/mysql-bin.000022|mysql ‐uabc ‐p test
或导出SQL,再导入到库。
$> /usr/bin/mysqlbinlog -v --base64-output=decode-rows \
--start-datetime "2020-12-09 00:00:00" \
--stop-datetime "2020-12-29 00:00:00" \
-vv \
/db/mysql/mysql-bin.000020 >> /home/centos/binlog20-2020-12-29.sql
mysql> source /home/centos/binlog20-2020-12-29.sql;
三、 方法二 从binlog文件提出标准SQL语句
使用binglog2sql前提是MySQL必须配置了binlog,并且是row处理如下: