据悉,顺丰科技数据中心的一位邓某因误删生产数据库,导致某项服务无法使用并持续590分钟。事发后,顺丰将邓某辞退,且在顺丰科技全网通报批评。真实地玩了一把“从删库到跑路”。
毫无疑问地,我们又突然象被打了鸡血般,整了整衣领,挺了挺胸,存在感立马爆棚,拉个小板凳,就着中秋节的月光,絮絮叨叨地讲讲想当年。
我想当年,国那啥机构,设备升级改造,生产库在线热迁,脚本写错,rm掉了,然后,我们XXX,全部恢复所有数据(此处省略几万字,包含数十个自我标榜的“牛X”助词)。可惜,得替用户保密。
想当年,那啥机构,因为那啥,然后,……,算的了,不能说,反正老传奇了。
啥也不能说,就从技术角度聊一聊,论删库到恢复,再到跑不了路的作死人生。
我肯定不会聊找个收费或开源数据恢复软件恢复,丢不起那人。
不聊窗口,因为基本和它无关。
仅限Unix, Linux上删除oracle、db2、mysql, Hadoop等的情况,就以rm - f为例吧。
数据库的载体有多种实现方式,文件或裸设备。多数情况下,系统会以文件的方式(一切皆为文件)对数据库数据文件进行管理。一套数据库,简单地看,物理上可以理解为一个或多个文件。删库,也就是删一个或多个文件了。
文件是存储在文件系统内的.Unix和Linux上有很多种文件系统,这些文件系统保留相同的VFS文件访问接口,确保用户透明地使用每种文件系统(当然,也会有一些小差异,但一般都会遵循POSIX之类的标准)。但实际上,不同的文件系统在内核设计上千差万别,这也导致了rm - f的不同底层表现,再导致每个文件系统在rm - f后恢复的可能性,难度的不同。简单地说,删除文件后的恢复,并不是文件系统规范中约定的技术细节,文件系统设计人员压根就没考虑过。
在文件系统上恢复一个删除的库,大概的思路应该是这样的:
顺丰删库事件有感——数据库数据恢复方法分享