跳到主要内容

正确关闭mongodb 防止数据丢失

· 阅读需 2 分钟
一介布衣
全栈开发者

mongodb不正确关闭会导致非常严重的问题,

比如 使用 kill -9 pid 方式来关闭,如果没有开启日志的情况下,可能造成数据丢失,数据库瘫痪.

运行错误:Error: error doing query: failed

登录Mongodb数据库后关闭服务.

>use admin;
switched to db admin
>db.shutdownServer();
Tue Nov 18 11:03:24.164 DBClientCursor::init call() failed
server should be down...
Tue Nov 18 11:03:24.169 trying reconnect to 127.0.0.1:27017
Tue Nov 18 11:03:24.171 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017
> exit
bye

另外一种安全关闭方法:

kill -15,killall mongod

ok,mongodb 服务成功关闭.

为什么不能随手 kill -9

因为 kill -9 属于强制终止,进程没有机会执行自己的收尾逻辑。对数据库这种需要把内存状态、日志和磁盘文件保持一致的服务来说,这种粗暴终止方式非常危险。看起来只是“快一点关掉”,实际上可能把恢复成本推到后面。

更值得养成的习惯

数据库服务类程序,优先考虑它自己提供的正常关闭方式;实在不行,再退到较温和的信号。真正成熟的运维习惯,不是图省事把进程直接打掉,而是尽量让服务按它设计的方式完整退出。