Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  • 深圳市
  • 菜鸟工程师

可爱的留言者

记一次删库跑路

2018年11月09 14:07 294 6

01bb2d3fb80e7bec1445c3ab282eb9389a506b13.jpg

这些天正在考虑做LinkNemo程序迁移的工作,于是乎准备把目前LinkNemo生产的数据库导一份到本地,用来做测试迁移。

几个终端同时操作,一时操作失误,然后:

drop database cynthia

emmmmmmm...

没错,LinkNemo的数据库就这样被删掉了。

我误把当前操作的终端机器认为是本地机器。回车的那一瞬间就感觉出事情了。


====


以上是前因。

也是从11月8日下午至11月9日LinkNemo一直显示维护中的原因。


====


既然已确认数据库被删,当务之急还是要赶紧恢复数据。

1、记下删库的时间:2018/11/08/ 15:55

2、停下LinkNemo以及其他在使用数据库的程序。

3、检查每日数据库备份文件是否完整。目前LinkNemo的程序数据每天都会在凌晨三点做一次备份,索性备份一切正常。11月07日的备份完整。


====


所以备份数据还是在的,至多只会丢掉11月8日凌晨三点以后的数据。



====



不过还是想要把数据都完整恢复。考虑从binlog入手。

在mysql的指令界面检查binlog的状态:

mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | ON    |
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
2 rows in set (0.00 sec)

万幸的是,binlog是开启的。

所以从binlog恢复数据应该不是问题。



====


所以从binlog恢复下数据好了。

binlog是对于数据库所有操作的记录,也就是这个数据库做的数据修改相关的操作,都会记录在上面。

检查mysql中data目录下的文件,其中mysql-bin.*****便是binlog文件。

xxx@Kira:/opt/mysql/data$ ls
AY140612145618693904Z.pid  ib_logfile1  mysql             mysql-bin.000003  mysql-bin.000006 performance_schema
ibdata1                    kira         mysql-bin.000001  mysql-bin.000004  mysql-bin.000007 store
ib_logfile0                Kira.pid     mysql-bin.000002  mysql-bin.000005  mysql-bin.000008 mysql-bin.index

可以看到,LinkNemo程序已经在线上好久了,所以binlog文件已经迭代到了第8个(每个binlog文件设置最大为1G)。

从这8个binlog文件就可以恢复完整的数据。



====



尝试从第8个文件入手。不过考虑到目前数据库已经没了,所以应该光是第8个binlog文件应该是行不通的。

$ mysqlbinlog  --stop-datetime="2018-11-08 15:54:00" /opt/mysql/data/mysql-bin.000002 | mysql -u xxx -p

这里的stop-datetime参数是指定执行binlog的结束位置,咱们的数据库是15:55删掉的,所以只需要恢复到这之前即可。

不过果然提示:

database cynthia not exits

数据库不存在。因为已经被删掉了。而创建数据库以及建表的执行过程应该在前面某个binlog上。



====



既然如此,那就只能从最开始的binlog开始了。

数据库已被删除,就按序从binlog恢复即可。

$ mysqlbinlog  --stop-datetime="2018-11-08 15:54:00" /opt/mysql/data/mysql-bin.000001 | mysql -u xxx -p

$ mysqlbinlog  --stop-datetime="2018-11-08 15:54:00" /opt/mysql/data/mysql-bin.000002 | mysql -u xxx -p

$ mysqlbinlog  --stop-datetime="2018-11-08 15:54:00" /opt/mysql/data/mysql-bin.000003 | mysql -u xxx -p
...
...

依次执行,共8个。

数据较多,服务器配置比较差,所以每个文件的恢复都要等好久。耐心等待即可。


====



从11月8日 15:55至11月9日中午,LinkNemo一直处于维护状态,而后数据历时十几个小时方始全部回复完毕。



====


最后说几句句:

1、定时备份真的很重要...

2、还有就是,用完的终端,要及时清理...

3、数据被误删后,不要惊慌胡乱操作,不然很可能加大数据恢复难度。



===end===

点赞(1)
本文标签数据库 database
点了个评