MongoDB从3.6升级到4.0:如何解决“集合在kvcatalog中没有uuid”异常? 对于 Docker:

我在Rancher精心策划的容器化环境中运行MongoDB副本集。 推出最新更新后, MongoDB 已从 3.6.x 升级到 4.0.x (最新)。

没有遵循upgrade path,因此,当尝试绑定保存数据库存储的卷时,该服务无法启动,并退出,但出现以下异常:

STORAGE  [initandlisten] exception in initAndListen: MustDowngrade: Collection does not have UUID in KVCatalog. Collection: admin.system.version,terminating

即使尝试使用mongod选项启动--repair,我也会得到相同的结果。 我还尝试将容器回滚到 MongoDB 3.6.16 ,但是日志版本现在不兼容。

我们没有卷的快照,因此,恢复数据不是一种选择(这不是生产环境)。我在网上找到的唯一solution不适用,因为它建议利用mongodumpmongorestore,这需要一个运行中的数据库并附带数据存储。

我没什么主意了,关于如何解决这个问题的任何建议?

abcc2008 回答:MongoDB从3.6升级到4.0:如何解决“集合在kvcatalog中没有uuid”异常? 对于 Docker:

关于此问题的bug report建议遵循完整的升级路径,并且对我有用。遇到此错误后,我能够恢复到旧版本,然后正确升级。

特别是:一次只升级一个主要版本,并仔细检查先决条件和升级步骤。其中最重要的部分是检查您与db.adminCommand( { getParameter: 1,featureCompatibilityVersion: 1 } )的兼容性,并确保它与当前版本匹配,然后再升级到下一个版本。使用db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

之类的命令对其进行更新

https://docs.mongodb.com/manual/release-notes/3.6/#upgrade-procedures https://docs.mongodb.com/manual/release-notes/4.0/#upgrade-procedures等页面上阅读完整的文档

,

我在Mac OS上使用Homebrew将MongoDB从3.6升级到4.2,并遇到了类似情况。

由于公式mongodb已从自制软件核心中删除,因此mongodb团队维护了custom Homebrew tap

以下是我使用Homebrew将MongoDB从3.6升级到4.2的解决方案:

  1. 从Homebrew卸载旧版本的mongodb
# If you run mongodb in background service,stop it first.
brew services stop mongodb
# If you have multiple version of mongodb,you might need to add `--force` option for deleting all of them at once.
brew uninstall mongodb
  1. 从自定义Homebrew水龙头安装新的mongodb
brew tap mongodb/brew
brew install mongodb-community@3.6
  1. 将mongodb-community@3.6添加到您的PATH
echo 'export PATH="/usr/local/opt/mongodb-community@3.6/bin:$PATH"' >> ~/.bash_profile
  1. 重新启动终端,然后运行mongod

  2. 打开另一个标签或终端窗口以运行mongodump

  3. 终止mongod

  4. 卸载mongodb-community@3.6,然后重新安装mongodb-community

brew uninstall mongodb-community@3.6
brew install mongodb-community
  1. 使用旧的mongo数据结构删除旧数据
rm -rf /data/db/*
  1. 运行mongod

  2. 打开另一个标签或终端窗口以运行mongorestore dump/

mongorestore完成后,mongod将终止。 您可以将mongodb作为后台服务运行,也可以再次运行mongod。使用mongo或Robo 3T(以前称为Robomongo)打开MongoDB,您会看到数据像往常一样好。

希望有帮助。

,

经过大约3个小时的尝试完全解决您所描述的问题,这就是我采取的步骤。在这里,我将展示如何在降级到3.6的同时保留数据,以及如何使用保留的数据将其更新为4.0。

对于Mac用户来说,发生这种情况的原因是因为使用brew的人有一个更新,无法再直接从brew下载Mongodb。然后人们倾向于从brew下载而不是较新的社区版本,然后该版本与仍然存在于目录中的3.6 db文件夹的旧版本发生冲突。相反,您需要从实际的mongodb网站下载它:

https://www.mongodb.com/download-center/community

在这里,您要手动下载所有内容。请按照此处的说明进行操作,但请使用3.6版本:

https://medium.com/@saurabhkumar_4718/install-mongodb-without-homebrew-on-mac-os-2a98b68ab09c

注意:复制.bash_profile时,请确保export命令不是

一旦您成功手动安装了3.6版本,就可以mongodump进行安全保护,或者使用mongoexport将所有mongo数据导出到json中,以获取您真正需要保存的所有数据。

之后,您可以按照与以前对3.6完全相同的步骤,重新手动重新安装4.0

这对我有用,而无需执行任何“ mongorestore”,因为“ db”文件夹被单独放置了,我的所有数据都在那里,但是也许需要额外的步骤来还原数据。最糟糕的是,您有需要重写的.jsons。 'mongo --version'也显示了正确的版本:)希望对您有帮助

,
  • 备份所有数据库(使用 mongodump
  • 由于/ data / db中的每个文件与较新版本不兼容,因此删除它们: rm -rf / data / db / *
  • 通过 mongod
  • 重新启动MongoDB服务
  • 还原所有数据库(使用 mongorestore

https://dba.stackexchange.com/a/252393

,

对于 Docker:

我在将使用 Docker 的项目从 3.6 升级到 4.2(和 4.4)时遇到了这个问题。

项目的设置方式意味着我没有要清除的物理 /data/db 目录。

但是,定义了一个卷作为 /data/db 目录。

在这种情况下,您需要做的就是备份您需要的任何数据并删除关联的卷。

如果将 vs 代码与 docker 扩展一起使用,您只需在侧栏中打开 docker 选项卡,展开卷部分,找到有问题的卷(对我来说,它被称为 mongo-4-2-upgrade-test_mongo-data,这取决于您的各种容器以您的项目命名),右键单击并删除。

确保使用此卷的容器已正确关闭,否则您将收到 409 conflict 错误。我做了与上面相同的操作,但找到了我的 mongo 容器(在 docker 选项卡的容器部分)。然后当我重新启动我的 docker-compose 文件时,新版本的 mongo 已安装并按预期运行。

本文链接:https://www.f2er.com/2780973.html

大家都在问