手贱drop了几个表,以为能从昨天的备份中恢复,结果发现最近两个月的备份都是空文件,因为备份脚本在两个月前改错了!难道就这样丢失两个月的数据?镇定镇定——
先看看mysql的配置文件
cat /etc/my.cnf
发现如下字样说明有救:
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
log-bin顾名思义,就是对数据库任何操作的日志。虽然它只是增量日志,没有办法直接undo drop,但两个月前的备份+这两个月的日志=完整的数据库呀。
找找这文件在哪里,对centos来讲,一般位于
/usr/local/mysql/var
cd进入,ll一下,确定最近修改过的日志的文件名:
-rw-rw---- 1 mysql mysql 27687 Oct 29 08:12 mysql-bin.000001
-rw-rw---- 1 mysql mysql 1113246 Oct 29 08:12 mysql-bin.000002
-rw-rw---- 1 mysql mysql 264 Oct 29 08:13 mysql-bin.000003
-rw-rw---- 1 mysql mysql 1112 Oct 29 08:13 mysql-bin.000004
-rw-rw---- 1 mysql mysql 126 Oct 29 08:13 mysql-bin.000005
-rw-rw---- 1 mysql mysql 126 Oct 29 08:26 mysql-bin.000006
-rw-rw---- 1 mysql mysql 126 Oct 29 08:32 mysql-bin.000007
-rw-rw---- 1 mysql mysql 126 Oct 29 08:38 mysql-bin.000008
-rw-rw---- 1 mysql mysql 651639170 Dec 28 07:01 mysql-bin.000009
一般最后一个就是了。
然后利用此日志文件导出sql:
/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-date='2016-10-28 05:00:00' --stop-date='2016-12-25 05:30:00' mysql-bin.000009 > restore.sql
接着先恢复两个月前的备份,然后导入此sql即可。
凡事有好有坏,如果不是这次误删,我就不会发现备份脚本出了问题。等到下次真正出事的时候,就为时晚矣。