mongodb关闭选项不可用

Lev*_*rts 6 database mongodb node.js

我当前的问题:我有一个生产服务器,只是更新了mongod但丢失了一些功能.

在早期版本(v2.0.6)中,我能够mongod使用该--shutdown选项运行,它会杀死所有其他实例.

现在有版本v2.4.5- 如果我运行:

mongod --shutdown
Run Code Online (Sandbox Code Playgroud)

结果是:

error command line: unknown option shutdown
use --help for help
Run Code Online (Sandbox Code Playgroud)

版本信息: mongod --version

db version v2.4.5
Mon Sep 16 14:09:38.994 git version: a2ddc68ba7c9cee17bfe69ed840383ec3506602b
Run Code Online (Sandbox Code Playgroud)


重要的是我有这个选项或类似的东西,因为我有一个管理新实例的服务器进程.

例如:

var spawn = require('child_process').spawn,
result    = spawn('mongod', ['--quiet', '--shutdown', '--directoryperdb', '--dbpath', __dirname + '/database']);
Run Code Online (Sandbox Code Playgroud)


编辑:
Mongodb文档仍然有--shutdown命令选项.
链接:http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

Alternately, you can shut down the mongod instance:

using the --shutdown option
from a driver using the shutdown. For details, see the drivers documentation for your driver.
Run Code Online (Sandbox Code Playgroud)


编辑:
我觉得我应该更新这个问题.从v0.9.6开始,mongojs包装器中已修复此问题.但是,仍然存在一些问题需要解决,如问题#97所列,但应该适用于大多数要求.

Sco*_*ott 10

由于"--shutdown"选项在较新版本的mongo中不可用,因此您现在必须手动终止该进程或登录并运行:

use admin;
db.shutdownServer();
Run Code Online (Sandbox Code Playgroud)

但是,您可以通过以下方式在一行中完成此操作:

mongo 127.0.0.1/admin --eval "db.shutdownServer()"
Run Code Online (Sandbox Code Playgroud)

假设您在127.0.0.1连接到本地数据库.您只能使用--eval参数运行1行,因此use admin; db.shutdownServer();不是一个选项,但是您可以通过在IP之后添加"/ admin"来完成与admin db的连接.


Jim*_*agg 3

您是否尝试过在 mongo shell 中使用 db.shutdownServer() ?

从文档中:

要停止在后台或前台运行的 mongod 实例,请在 mongo shell 中发出 db.shutdownServer() 帮助程序。使用以下顺序:

要打开在默认端口 27017 上运行的 mongod 实例的 mongo shell,请发出以下命令:

mongo
Run Code Online (Sandbox Code Playgroud)

要切换到管理数据库并关闭 mongod 实例,请发出以下命令:

use admin
db.shutdownServer()
Run Code Online (Sandbox Code Playgroud)

您只能在通过管理数据库身份验证连接到 mongod 时使用 db.shutdownServer() ,或者在没有通过 localhost 接口连接身份验证的系统上使用 db.shutdownServer() 。


根据您的评论,您可以通过对驱动程序中的管理数据库运行shutdown 命令 来执行相同的操作:

{shutdown : 1}
Run Code Online (Sandbox Code Playgroud)

我对 node.js 驱动程序不是最熟悉,但一般来说,在驱动程序中运行命令有两种选择,其中一种应该始终有效:

  1. 使用驱动程序的 runCommand 包装器(您可以在 mongo shell 中使用它,如下所示:)

    db.runCommand({关闭: 1});

  2. 使用内置的$cmd伪集合来运行命令。命令的包装器实际上使用此方法,如果您没有其他选项,您可以对 $cmd 运行查询来关闭服务器:

    db.$cmd.findOne({"shutdown":1})

如果您没有运行驱动程序,则可以使用公开的REST 接口--rest(运行时使用命令行选项mongod)。通过发出 POST 请求,您可以针对管理数据库运行命令:

http://localhost:28017/admin/$cmd/?filter_shutdown=1&limit=1
Run Code Online (Sandbox Code Playgroud)

这相当于针对 运行前面的查询$cmd