放牧代码和思想
专注自然语言处理、机器学习算法

mysql恢复drop掉的表

手贱drop了几个表,以为能从昨天的备份中恢复,结果发现最近两个月的备份都是空文件,因为备份脚本在两个月前改错了!难道就这样丢失两个月的数据?镇定镇定——

莫慌.jpg

先看看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即可。

凡事有好有坏,如果不是这次误删,我就不会发现备份脚本出了问题。等到下次真正出事的时候,就为时晚矣。

转载须注明:码农场 » mysql恢复drop掉的表

分享到:更多 ()

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机