恢复误删除的表

案例说明:
每天2:30做完全备份,早上10:00误删除表students,10:10才发现故障,现需要将数据库还原到10:10的状态,且恢复被删除的students表。
第一步:通过完全备份提供的二进制日志的结束点,开始转储二进制日志文件(其中包含了2:30以后到10:10分的用户操作)。

mysqlbinlog --start-position=156 /data/binary_logs/mysql-bin.000002 >/data/binary_logs/inc.sql

 

第二步:转储出来的二进制日志文件 inc.sql 如果内容很大不要用vim打开会卡顿,先通过 grep 搜索出删表的操作然后使用sed删除这一条记录。

grep 'DROP' ./binary_logs/inc.sql
sed -ri.bak 'DROP TABLE `students`' ./binary_logs/inc.sql

第三步,关闭二进制日志功能后再进行还原,否则二进制日志会记载还原的操作。

set sql_log_bin=off;

 第四步:因为其本质是修改了通过二进制日志转储的增量备份文件,因此要先还原 完全备份 然后才到增量备份

 source /data/binary_logs/inc.sql;

 结果:可以看到students表已经恢复并且删除students表后用户对teachers表的操作也恢复了过来。

 最后一步:将还原前关闭的二进制日志功能开启,莫忘!!!

set sql_log_bin=on;

 总结:二进制日志文件严禁与数据库文件放再同一目录,否则崩则一起崩

posted on 2021-06-19 01:02  1251618589  阅读(4)  评论(0编辑  收藏  举报

导航