不久前发生一起严重的事故,误删了生产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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐