将 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 还有一点建议:检查所有副本集成员上的setFeatureCompatibilityVersiondb.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 时出错的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 从3.0 升级到3.2

记录 MongoDB集群 3.4升级至3.6

将 NHibernate 从 1.2 升级到 3.2 时需要注意啥?

在 Spring Boot 应用程序中将 mongo db 升级到 3.2

将 Mac 上的 Python 从 2.7 升级到 3.6(或最新),用于弹性 beanstalk 客户端 AWS

在 conda 中将 python 从 3.5 更新到 3.6