【问题标题】:MongoDB db.copyDatabase fail on unauthorizedMongoDB db.copyDatabase 在未经授权的情况下失败
【发布时间】:2014-10-26 16:48:47
【问题描述】:

我正在尝试使用 mongo CLI 在 MongoLab 上的两个不同数据库之间进行复制。 我关注了文档 - http://docs.mongodb.org/manual/reference/method/db.copyDatabase/

  1. 已连接到目标数据库。
  2. 运行以下:

    db.copyDatabase('source-db', 'target-db', 'source-host', 'source-user', 'source-pwd')

但我总是得到:

{ "ok" : 0, "errmsg" : "unauthorized" }

【问题讨论】:

  • 您是否采用共享计划?我不认为你可以copyDatabase() 到那里的共享目标数据库。
  • 双方不共享
  • 那么不,我不知道,只有一个共享的测试计划:)
  • 愚蠢的问题:您是否使用具有运行此命令的适当权限的用户名对数据库进行了身份验证?
  • MongoLab 有两个选项用户和只读用户。 IC如何检查权限?

标签: mongodb


【解决方案1】:

我遇到了同样的错误,但是在尝试复制集合时:

> db.coll1.copyTo("coll2");
Wed Jul 24 13:32:05 uncaught exception: { "ok" : 0, "errmsg" : "unauthorized" }

我的数据库在 MongoHQ 管理的共享服务器上,所以肯定存在权限问题,服务不允许copyTo 或其他命令运行。

一个简单的解决方法是手动获取集合中的所有对象并将它们插入到第二个集合中。这是copyTo 实施之前的工作方式:

db.coll1.find().forEach(function(o) { db.coll2.insert(o); });

【讨论】:

  • 是的,这就是我解决它的方法,但我认为这不是最有效的方法。
  • 效率不高,是的,但可以完成工作。这才是最重要的:)
【解决方案2】:

您可以改用 mongodump 和 mongorestore 命令。

mongodump -h <source_host>:<source_port> -d <source_db> -o ~/tmp/mongodump

mongorestore -h <destination_host>:<destination_port> -d <destination_db> -u <username> -p <password> ~/tmp/mongodump/<source_db>

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2016-03-07
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多