MongoDB 如何成为高手

MongoDB how to become master

我正在通过 linux 终端创建一个 MongoDB 数据库,我正在尝试为该数据库创建一个集合。

但是当我 运行 命令时:db.createCollection("mainCollection") 我收到以下错误消息:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

我不太清楚这是什么意思。我怎样才能使数据库成为主人?

谢谢

这是预期的行为 "Viratan" 如果您正在查询副本集并且您连接的 shell 不是主节点。

这两件事你都可以做。

  1. 断开与当前 shell 的连接并与主连接。在 mongo shell 中,您会看到它写成 "PRIMARY" 或 "SECONDARY"。

  2. 如果您想要与主成员相同的成员,那么您可以增加该特定成员的优先级and/or强制 formar 主成员降级。一旦主要成员下台,就会进行选举,因为所需成员具有更高的优先级,将成为主要成员。 您可以按照以下link更改成员的优先级http://docs.mongodb.org/manual/tutorial/force-member-to-be-primary

一旦您以任何一种方式连接到 Primary,您就可以查询数据库并执行您的操作。

快乐的 Mongoing..:-)

-$

您已经使用 --replSet 选项(或等效的配置文件选项)启动了 mongod。这将 mongod 置于一种模式,在该模式下它将不允许 任何 写入,直到它收到副本集配置。

对于现有的副本集,这是通过在副本集的现有主副本上执行 rs.add("<host>:<port>") 来完成的。

根据围绕这个问题的讨论,我认为您只有一个 MongoDB 实例,不打算拥有一个真正的多成员副本集。如果是这种情况,您有两个选择:

  • 停止尝试 运行 副本集
    1. 停止 mongod
    2. 擦除 mongod 进程的数据目录。
    3. 在命令 line/config.
    4. 中不使用 --replSet 选项重新启动 mongod 进程
  • mongod初始化为单节点副本集。
    1. 运行 rs.initiate() 来自 shell(不需要配置)。您将断开连接,但 shell 会自动重新连接,然后您可以创建集合并进行其他写入。

您正在尝试在 secondary.thats 上创建一个新集合,为什么它给出错误请使用主要创建新集合