2

我很难将 mongodb 从 2.0.6 版更新到当前的 2.4 版。请帮忙

下面是我得到的日志文件:

Tue May 14 08:02:03.339 [initandlisten] MongoDB starting : pid=1906 port=27017 dbpath=/mnt2/var/lib/mongodb/ 64-bit host=ip-10-131-65-73
Tue May 14 08:02:03.339 [initandlisten] db version v2.4.3
Tue May 14 08:02:03.339 [initandlisten] git version: fe1743177a5ea03e91e0052fb5e2cb2945f6d95f
Tue May 14 08:02:03.340 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue May 14 08:02:03.340 [initandlisten] allocator: tcmalloc
Tue May 14 08:02:03.340 [initandlisten] options: { dbpath: "/mnt2/var/lib/mongodb/" }
Tue May 14 08:02:03.347 [initandlisten] journal dir=/mnt2/var/lib/mongodb/journal
Tue May 14 08:02:03.347 [initandlisten] recover : no journal files present, no recovery needed
Tue May 14 08:02:03.554 [initandlisten] build index backendtemp.system.users { user: 1, userSource: 1 }
Tue May 14 08:02:03.557 [initandlisten] Duplicate key exception while trying to build unique index on backendtemp.system.users.  You most likely have user documents with duplicate "user" fields.  To resolve this, start up with a version of MongoDB prior to 2.4, drop the duplicate user documents, then start up again with the current version.
Tue May 14 08:02:03.557 [initandlisten] exception in initAndListen: 11000 E11000 duplicate key error index: backendtemp.system.users.$user_1_userSource_1  dup key: { : "ad", : null }, terminating
Tue May 14 08:02:03.557 dbexit: 
Tue May 14 08:02:03.557 [initandlisten] shutdown: going to close listening sockets...
Tue May 14 08:02:03.557 [initandlisten] shutdown: going to flush diaglog...
Tue May 14 08:02:03.557 [initandlisten] shutdown: going to close sockets...
Tue May 14 08:02:03.558 [initandlisten] shutdown: waiting for fs preallocator...
Tue May 14 08:02:03.558 [initandlisten] shutdown: lock for final commit...
Tue May 14 08:02:03.558 [initandlisten] shutdown: final commit...
Tue May 14 08:02:03.572 [initandlisten] shutdown: closing all files...
Tue May 14 08:02:03.573 [initandlisten] closeAllFiles() finished
Tue May 14 08:02:03.573 [initandlisten] journalCleanup...
Tue May 14 08:02:03.573 [initandlisten] removeJournalFiles
Tue May 14 08:02:03.575 [initandlisten] shutdown: removing fs lock...
Tue May 14 08:02:03.575 dbexit: really exiting now
4

3 回答 3

3

在 2.4 版本中,MongoDB 引入了基于角色的访问控制,该控制要求用户在每个数据库的用户权限文档中具有唯一性。以前版本的 MongoDB 没有此要求,因此您的数据库可能在system.users中有重复的用户条目。

您可以:

  1. 将 MongoDB 降级到旧版本,删除重复条目并再次升级 MongoDB,或者:
  2. 如果您在开发环境中和/或不关心您的数据(即丢失整个数据库),您可以通过文件系统手动删除数据库文件。在 Linux 上,它们通常位于“/var/lib/mongodb/name-of-the-database”。之后尝试启动 MongoDB,你很酷。

请参阅:MongoDB 2.4 升级建议和清单

于 2013-10-19T13:32:52.033 回答
1

关于这个( ubuntu)的小脚本馅饼:
注意:用你的vars替换CAPS ...

  • 如果它是一个分片集群,请始终确保平衡器在这种事情之前关闭
  • 运行sudo apt-get install mongodb-10gen=2.2.7<- 减少版本,可能需要 2.2.7 其最新的 pre-2.4(截至 2014 年 5 月)
  • 记得重启 mongod 配置服务器
  • 使用mongoCONFIG_SERVER_HOST:CONFIG_SERVER_PORT/admin # <- 连接到 mongo 配置服务器,
    • db.system.users.find().sort({_id:1})<- 将显示按 id 排序的管理员用户,就像在这里按时间升序排序一样,因为它的 bson。
    • db.system.users.remove({_id : ObjectId('ID_TO_BE_REMOVED')}) <- 删除罪魁祸首,小心使用。如果您不确定,请先创建另一个管理员用户进行备份。
  • 退出 mongo 控制台
  • 运行sudo apt-get install mongodb-10gen<- 将升级回最新的 2.4.X。不是它不会升级到 2.6(这很好,因为你想确保 2.4 首先工作),因为它是 2.6 的不同 apt-get 包(mongodb-org)。

高温高压

于 2014-04-17T15:57:08.720 回答
0

如果你不能或不会降级 mongodb,你也可以使用mongodumpthen mongorestore。您将失去每个 mongo 用户,但会取回您的数据。

mongodump --dbpath OLD_DB_PATH -d DATABASENAME -o /tmp/dumps
mongorestore --dbpath NEW_DB_PATH -d DATABASENAME /tmp/dumps/DATABASENAME/
  1. 与 mongo 一样,如果您不以 mongodb 用户身份运行上述命令,请注意恢复文件的权限。
  2. 如果您当前的 mongodb 版本至少为 3.0,这将不起作用,因为该dbpath选项已被删除,迫使您在 dbpath 上有一个正在运行的 mongod 来运行这些命令,而这正是现在不起作用的......
  3. 如果你有问题,你可以尝试运行mongod --dbpath NEW_DB_PATH --repair
于 2016-03-20T13:49:38.977 回答