不久前发生一起严重的事故,误删了生产MongoDB服务器上的一个collection,由于没有定时备份,导致几天的数据丢失。认真反省之后,写下这篇文章,希望能给大家一些警示。
过程
当时我正双开两个终端窗口,分别用mongo连接开发环境和生产环境的MongoDB。由于本地的数据库因为不断的开发测试已经被污染了,我从生产环境dump了最新的数据并下载到本地。接下来要做的是把本地MongoDB中的对应collection给drop掉,然后restore回去。
这时我不知道被什么事情打断了,当我继续这个过程时,由于Mongo Shell中没有像Redis那样显示服务器的IP,我并没有注意到自己点开的是生产服务器的终端,并执行了drop命令……
反省
1、在对生产数据库做删除之类的危险操作时,一定要两个人double check;
2、明确区分生产环境和开发环境,在执行各种删除操作前对所在的环境进行确认;
3、在执行重要操作时,不接受其他事务的打断;
措施
在生产环境和开发环境都建立一个~/.mongorc.js文件,内容如下:
var prompt = function ( ) {
var host = db.getMongo().toString().replace( 'connection to ', '' );
var database = db.getName();
return host + '/' + database + '> ';
}
然后连接到Mongo Shell时就会显示服务器IP了,如:
[zhangshenjia@mac: ~]$mongo
MongoDB shell version: 2.4.4
connecting to: test
127.0.0.1/test>
本文地址:http://www.it300.com/article-15295.html