抱歉各位,我今天手误,在服务器上面测试 Markdown 效果的时候,误将线上数据库删除了....(被删除的原因是 RAILS_ENV=production 的环境变量下面执行了 rspec spec 跑测试,结果里面的删除数据库的代码直接把线上数据库给删除了....)
由于最近的一次数据库备份只有在 2012 年 12 月 21 日,所以以后的数据都掉了
#1 楼 @diudiutang 倒是和那个没关系
我本来打算在服务器上面跑一下 rspec 看看测试用例在线上服务器上面能否跑通的,但没预料到服务器上面以及将 RAILS_ENV 固定设置成了 production
,而 ruby-china 里面正好又那么一处漏洞代码
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
....
用了 ENV["RAILS_ENV"]
,结果当我执行 rspec spec
的时候,后面的 DatabaseCleaner
就将数据库咔嚓了...
关键数据光靠 cron jobs 是不够的,时不时的人肉冷备份,最好还有文件系统 snapshot
快照备份。好的备份策略至关重要!
没备份,神也回天乏力。
这里码农居多,做不好 SA / SRE 的活儿也正常(否则要 DevOps
作甚?!),权当是个教训吧。Learn from your mistakes.
@huacnlee 想问个问题,我看 ruby-china 的源代码,rspec 好像没有在 production 环境下面安装啊,怎么跑得了 rspec spec
的?
好吧,我要讲一下我的两个经历: 1.那时,我还完全是个 java 程序员,因为要确定一下测试那边所说问题的原因,就在本地连上了测试那边的数据库,后来清理数据,不知不觉就把人家的测试数据都清理了,不知道给人家造成了多大的影响,不过测试的同事脾气都很好,对我算是宽大处理了… 2.因为经常要查看生产环境数据库 (也是查问题原因),就在 pgAdmin 中保存了一个连接信息,有一次查看了问题后,又马上要改 bug,要删除一个表的数据时,就把生产环境下的数据给干掉了,而且连备份都没有!幸好数据都是从远程数据库同步过来,于是可以同步一遍,但丢了部分后续业务处理却是无法挽回了!从后续的测试问题看,也造成了很大的影响…
于是从此以后,每当连完生产环境数据库,都马上断开 pgAdmin 的链接,或者直接去删除链接……
哎,其实 2012 我也不小心 drop 了一次生产库,不过唯一庆幸的是用的 Oracle,然后有 archive log 可以 restore database 到之前的一个时间点……
讲风险管理其中有一类就是这种,以这个习惯或者方式很少会有问题,可能几年出现一次的概率,但是这一次足以让你记忆很多年。
国人总是做不好第四象限的事情。
所以要认可公司的 ppqa,epg,信息安全,pmo 等等程序员认为闲杂的人员。在没有这些人员的小团对,某个人心里得照顾到这些事。
我的那帖:印式英语的帖子好像没了,那个伙计的学英语的热帖也没了。 crontab 30 3 * * * mysqldump -uroot -ppassword "一群傻逼" >/usr/local/的梦话{#date}.sql.bak 可以有
另外吐槽一下,盛大云不提供数据回滚功能吗?或是 mongodb 没有回滚功能吗?我知道关系型数据一般都可以按照 log 回滚数据。之前开发过程中经常用 oracle 的快照恢复数据。