2013-05-14 124 views
2

我很难从版本2.0.6更新到当前的2.4版本。请帮助升级MongoDB的问题

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

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 
+0

https://jira.mongodb.org/browse/SERVER-9029从system.users集合中删除重复的用户,然后尝试升级。 – 2013-05-14 08:47:22

回答

3

在2.4版本中引入的MongoDB需要uniqueness of the user in user privilege documents每个数据库中的基于角色的访问控制。先前版本的MongoDB没有这个要求,因此您的数据库可能在system.users中有重复的用户条目。

您可以:

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

参见:MongoDB 2.4 Upgrade Recommendations and Checklist对此(Ubuntu的

1

小脚本馅饼:
注:取代CAPS由您瓦尔...

  • 如果其分片集群, always make sure balancer is off before this kinda things
  • 运行sudo apt-get install mongodb-10gen=2.2.7 < - 降低版本,可能要2.2.7的最新预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')}) < - 删除罪魁祸首,使用谨慎。如果您不确定,请先创建另一个管理员用户进行备份。
  • 退出蒙戈控制台
  • 运行sudo apt-get install mongodb-10gen < - 将升级回最新2.4.X.不是它不会升级到2.6(这很好,因为你想确保2.4首先工作),因为它是一个2.6(mongodb-org)的不同apt-get包。

HTH

0

如果您不能或不会降级MongoDB的,你也可以使用mongodump然后mongorestore。你将失去所有的蒙戈用户,但得到您的数据备份。

mongodump --dbpath OLD_DB_PATH -d DATABASENAME -o /tmp/dumps 
mongorestore --dbpath NEW_DB_PATH -d DATABASENAME /tmp/dumps/DATABASENAME/ 
  1. 一如既往与蒙戈,小心还原文件的权限,如果你不执行上述命令,MongoDB的用户。如果当前的MongoDB的版本至少为3.0,因为dbpath选项已被删除,迫使你对DBPATH运行的mongod运行这些命令,这恰恰是不是现在的工作
  2. 这将不会工作。 。
  3. 如果你有问题,你可以尝试运行mongod --dbpath NEW_DB_PATH --repair