web-dev-qa-db-ja.com

MongoDB 3.6から4.0へのアップグレード:「コレクションのkvcatalogにuuidがないコレクション」例外を修正する方法

Rancher によってオーケストレーションされたコンテナー化環境でMongoDBレプリカセットを実行します。最新の更新をロールアウトした後、MongoDB3.6.xから4.0.xにアップグレードされました(最新)。

いいえ アップグレードパス が続いているため、データベースストレージを保持しているボリュームをバインドしようとすると、サービスは開始できず、次の例外で終了します。

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

--repairオプションを指定してmongodを起動しようとしても、同じ結果が得られます。また、コンテナーをMongoDB 3.6.16にロールバックしようとしましたが、ジャーナルバージョンは互換性がありません。

ボリュームのスナップショットがないため、データを復元することはできません(これは本番環境ではありません)。オンラインで見つけた唯一の solutionmongodumpmongorestoreを活用することを示唆しており、データストレージが接続された実行中のデータベースを必要とするため、該当しません。

私はアイデアが不足しています、これを修正する方法についてのアドバイスはありますか?

5
hyperd

約3時間、あなたが説明している内容を正確に修正しようとした後、これが私がとったステップです。ここでは、3.6にダウングレードするときにデータを保持する方法と、保持されたデータで4.0を更新する方法を示します。

これがMacユーザーに発生する理由は、brewを使用しているユーザーがbrewから直接Mongodbをダウンロードできなくなったためです。次に、brewから新しいコミュニティエディションをダウンロードする傾向があります。brewは、ディレクトリにまだ存在する古いバージョンの3.6 dbフォルダと競合します。代わりに、実際のmongodb Webサイトからダウンロードする必要があります。

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を安全に使用できます。または、本当に保存する必要があるすべてのデータについて、すべてのmongoデータをmongoexportを使用してjsonにエクスポートできます。

その後、以前に3.6で行ったのとまったく同じ手順に従って、4.0を手動で再インストールできます。

これは「mongorestore」を実行しなくても機能しました。「db」フォルダーがそのままにされ、すべてのデータがそこにありましたが、データを復元するには追加の手順が必要になる場合があります。最悪の場合、書き換えが必要な.jsonsがあります。 「mongo --version」も正しいバージョンを表示しました:)それが役に立てば幸い

0

Mac OSのHomebrewでMongoDBを3.6から4.2に更新していたところ、このような状況に遭遇しました。

mongodbがhomebrew-coreから削除されたため、mongodbのチームは カスタムHomebrewタップ を維持しました。

次のステップは、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

2)カスタムの自作タップから新しいmongodbをインストールする

brew tap mongodb/brew
brew install [email protected]

3)[email protected]をパスに追加します

echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile

4)端末を再起動し、mongodを実行します

5)別のタブまたはターミナルウィンドウを開いてmongodumpを実行します

6)終了mongod

7)[email protected]をアンインストールし、mongodb-communityを再インストールします

brew uninstall [email protected]
brew install mongodb-community

8)古いmongoデータ構造を持つ古いデータを削除する

rm -rf /data/db/*

9)mongodを実行します

10)実行する別のタブまたはターミナルウィンドウを開きますmongorestore /dump

mongorestoreが完了すると、mongodは終了します。そして、mongodbをバックグラウンドサービスとして実行するか、単にmongodを再度実行することができます。 mongoまたはRobo 3T(以前のRobomongo)を使用してMongoDBを開くと、通常どおりデータが良好であることがわかります。

それが役に立てば幸い。

0
George