这些天正在考虑做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===