如何将2.6 mongo shell连接到2.4.9 mongod?

时间:2015-01-03 12:52:20

标签: mongodb linuxmint

环境

  • Linux Mint 17.1
  • localhost
  • 默认MongoDB端口27017
  • 从脚本连接无需用户名或密码。

背景

我安装了MongoDB

apt-get install mongodb-10gen=2.4.9

然后我固定了#39;包,以便不会对其应用更新:

echo "mongodb-10gen hold" | sudo dpkg --set-selections

渴望的行为 r

我想升级到最新版本的MongoDB,并且正在查看此过程的官方指南:

http://docs.mongodb.org/manual/release-notes/2.6-upgrade

早期就说明了:

  

要开始升级过程,请将2.6 mongo shell连接到MongoDB 2.4 mongos或mongod并运行db.upgradeCheckAllDBs()以检查数据集的兼容性。

问题

我如何connect a 2.6 mongo shell2.4.9 mongod

我猜我只需要安装2.6 mongo shell并运行它,但是:

  • 我不知道该怎么做和
  • 我不想破坏任何东西。

我已完成所有数据库的mongodump,因此请备份。

2 个答案:

答案 0 :(得分:3)

我尝试单独安装mongo 2.6,但这导致其他软件包被标记为删除。我最后只是卸载旧的软件包并重新安装新软件包,并在此处包含该过程以供参考。

下面的一些步骤不起作用,但我已将它们及其结果作为所尝试内容的文档包含在内。我以前做了mongodump所有数据库,所以有备份。

最终结果是,目前似乎所有工作都是“工作”。除了admin数据库还原。

01。关闭mongod

mongo
use admin
db.shutdownServer()

来自:http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

02。删除了'固定包裹' mongodb-10gen的状态:

echo "mongodb-10gen install" | sudo dpkg --set-selections

来自:https://help.ubuntu.com/community/PinningHowto

03。我随后尝试安装最新的mongo

sudo apt-get install -y mongodb-org-shell

来自:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

04。 shell版本似乎已更新:

mongo --version
MongoDB shell version: 2.6.6

05。但是我无法与mongo建立联系:

mongo
connecting to: test
2015-01-04T00:08:50.482+1000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-01-04T00:08:50.483+1000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed

mongod

mongod
The program 'mongod' is currently not installed. You can install it by typing:
sudo apt-get install mongodb-server

06。我运行以下内容查看apt-get安装/删除的历史记录:

less /var/log/apt/history.log

得到了:

Start-Date: 2015-01-04  00:02:08
Commandline: apt-get install -y mongodb-org-shell
Install: mongodb-org-shell:amd64 (2.6.6)
Remove: mongodb-10gen:amd64 (2.4.9)
End-Date: 2015-01-04  00:02:21

07。我跑了:

dpkg --get-selections

并且看到了:

mongodb-10gen deinstall

我认为' deinstall'意味着它被标记为删除。

08。我决定删除所有mongodb-10gen个软件包:

sudo apt-get purge mongodb-10gen

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gir1.2-clutter-gst-2.0 gir1.2-ges-1.0 gstreamer1.0-gnonlin libav-tools
  libavdevice53 libavfilter3 libavresample1 libges-1.0-0 libgoocanvas-common
  libgoocanvas3 libmlt++3 libmlt-data libmlt6 libqjson0 libquicktime2
  libsoprano4 melt python-dateutil python-gst-1.0 python-matplotlib
  python-matplotlib-data python-mlt python-pygoocanvas python-pyparsing
  python-tz python3-bs4 python3-markdown shared-desktop-ontologies
  soprano-daemon wkhtmltopdf
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  mongodb-10gen*
0 to upgrade, 0 to newly install, 1 to remove and 3 not to upgrade.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] 

Y

(Reading database ... 246460 files and directories currently installed.)
Removing mongodb-10gen (2.4.9) ...
Purging configuration files for mongodb-10gen (2.4.9) ...
dpkg: warning: while removing mongodb-10gen, directory '/var/lib/mongodb' not empty so not removed

来自:https://askubuntu.com/a/147177

09。我对无法删除的目录进行了备份,即/var/lib/mongodb

sudo cp -avr /var/lib/mongodb/ /home/

10。然后将其删除。

cd /var/lib/
sudo rm -rf mongodb/

11。我搜索了是否剩余任何mongodb-10gen个包裹:

dpkg --get-selections | grep "mongodb-10gen"

没有返回任何内容。

12。我通过Synaptic Package Manager在版本2.6.6上安装了mongodb-org

13。我检查了所有mongodb软件包的版本是否相同:

mongodump --version
mongorestore --version
mongo --version
mongod --version
mongos --version
# all returned 2.6.6

14. 然后,我为每个数据库转储执行了mongorestore,例如:

mongorestore --db dname_01 /path/to/dump/dbname_01/
mongorestore --db dname_02 /path/to/dump/dbname_02/

它似乎适用于所有数据库,但在admin数据库上失败了:

assertion: 17415 Cannot restore users with schema version 1 to a system with server version 2.5.4 or greater

users数据库引发了一些异常,例如:

Restoring to users.pending_registrations without dropping. Restored data will be inserted without raising errors; check your server log
Restoring to users.roles without dropping. Restored data will be inserted without raising errors; check your server log
Restoring to users.users without dropping. Restored data will be inserted without raising errors; check your server log

15。我跑了db.upgradeCheckAllDBs()

mongo
use admin

db.upgradeCheckAllDBs()

Checking database local
Checking collection local.startup_log
Checking collection local.system.indexes
Checking database dname_01
...
Checking database admin
Everything is ready for the upgrade!
true

来自:http://docs.mongodb.org/manual/release-notes/2.6-upgrade/#preparedness

答案 1 :(得分:3)

我知道你已经设法解决了你的问题,但以下链接帮助了我,我想我可以在这里发布以供将来参考,以防其他人发现很难升级mongodb:

http://blog.lecstor.com/mongodb-upgrade-24-to-26-in-debian

编辑:更合适的答案,引用上面的链接:

您必须下载MongoDB的tar版本并直接从那里运行shell:

$ curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz $ tar -zxvf mongodb-linux-x86_64-2.6.1.tgz $ ./mongodb-linux-x86_64-2.6.1/bin/mongo

要运行检查,您还需要使用admin数据库,所以..

>use admin
switched to db admin
>db.upgradeCheckAllDBs()

Checking database mydb1

Checking collection mydb1.coll1

Checking collection mydb1.coll2

Checking database mydb2

Checking collection mydb2.coll1

Checking collection mydb2.coll2

Everything is ready for the upgrade!
true