将 Mongodb 从 3.2 升级到 3.6 时出错
Posted
技术标签:
【中文标题】将 Mongodb 从 3.2 升级到 3.6 时出错【英文标题】:Error while upgrading Mongodb from 3.2 to 3.6 【发布时间】:2018-06-27 08:38:12 【问题描述】:我需要在我的环境中将 mongodb 从 3.2 升级到 3.6。对于这个过程,我首先按照建议从 3.2 迁移到 3.4。成功迁移到 3.4 后,我开始迁移到 3.6,但无法启动 mongod。检查日志文件时,我发现如下错误: 重要提示:升级问题:在尝试升级到 3.6 之前,数据文件需要完全升级到 3.4 版;有关详细信息,请参阅http://dochub.mongodb.org/core/3.6-upgrade-fcv。
我的 Mongod.conf
系统日志: 目的地:档案 日志附加:真 路径:/var/log/mongodb/mongod.log
存储: dbPath:/var/lib/mongo 杂志: 启用:真
流程管理: fork: true # fork 并在后台运行 pidFilePath: /var/run/mongodb/mongod.pid #pidfile的位置
网络: 港口:27017 绑定IP:127.0.0.1
【问题讨论】:
【参考方案1】:我有类似的问题,我已经在 Ubuntu 16.04 上从 MongoDB 3.4 升级到 3.6,但我错过了这重要的一步
db.adminCommand( setFeatureCompatibilityVersion: "3.4" )
然后我必须降级到 3.4 才能做到这一点,然后再次升级到 3.6。以下是详细步骤:
1.卸载 3.6
备份/etc/mongod.conf
备份/etc/apt/sources.list.d/mongodb-org-3.6.listed
(重命名或移动到另一个文件夹)
sudo apt-get update
sudo apt-get remove mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools
2。重新安装 3.4
检查文件夹 /etc/apt/sources.list.d/
以查看此文件是否存在:mongodb-org-3.4.list
。
如果不存在,可以通过这个命令重新创建:
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
然后通过apt-get
安装
sudo apt-get update
sudo apt-get install -y mongodb-org
mongod --version
sudo systemctl start mongod
在我的情况下,命令systemctl start mongod
返回错误Failed to start mongod.service: Unit mongod.service not found
我通过这些命令解决了:
sudo systemctl enable mongod
sudo service mongod restart
sudo service mongod status
3.执行非常重要的命令 降级到 3.4 后,运行这个
mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.10
> db.adminCommand( setFeatureCompatibilityVersion: "3.4" )
"featureCompatibilityVersion" : "3.4", "ok" : 1
> exit
4.再次升级 3.6
恢复这个文件/etc/apt/sources.list.d/mongodb-org-3.6.listed
sudo apt-get update
sudo apt-get install mongodb-org-mongos mongodb-org-server mongodb-org-shell mongodb-org-tools
恢复/etc/mongod.conf
。现在,MongoDB 3.6 启动没有任何问题
【讨论】:
只是一个小修正,这些命令缺少 apt-get: sudo remove mongodb-org-mongos sudo remove mongodb-org-server sudo remove mongodb-org-shell sudo remove mongodb-org-tools 还有一点建议:检查所有副本集成员上的setFeatureCompatibilityVersion
:db.adminCommand( getParameter: 1, featureCompatibilityVersion: 1 )
(docs.mongodb.com/manual/release-notes/3.6-upgrade-replica-set/…)
我必须在步骤“2。重新安装 3.4”sudo apt-get install -y mongodb-org --allow-unauthenticated
中添加 --allow-unauthenticated
我必须为 mongodb-org 添加 repo-key:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
非常有帮助 - 我错过了同样的步骤,这让我恢复了【参考方案2】:
当您的 db 文件夹包含旧的 mongoDB 数据库格式(如 3.4)时,可能会出现这种情况
这是一个有用的技巧如果您不介意丢失所有数据
保存后可以删除/data/db
文件夹的内容(ubuntu/linux mint)
然后重启mongod
,应该就可以正常工作了
【讨论】:
这很好用,因为不需要文件夹中托管的数据,因此可以删除。 但这并不能解决旧数据存储的问题,我想要旧数据回来 无法删除 /data/db 文件夹,因为您将丢失所有数据。这是一种解决方法而不是解决方案 哦,不,这将删除所有现有数据。请注意此类情况以上是关于将 Mongodb 从 3.2 升级到 3.6 时出错的主要内容,如果未能解决你的问题,请参考以下文章
将 NHibernate 从 1.2 升级到 3.2 时需要注意啥?
在 Spring Boot 应用程序中将 mongo db 升级到 3.2