Обновление MongoDB с 3.6 до 4.0: как исправить исключение «коллекция не имеет uuid в kvcatalog»? - PullRequest
4 голосов
/ 13 января 2020

Я запускаю набор реплик MongoDB в среде контейнеризации, организованной Rancher . После выпуска последнего обновления MongoDB было обновлено с 3.6.x до 4.0.x (самое последнее).

Нет путь обновления был выполнен, и в результате при попытке связать том, содержащий хранилище базы данных, служба не запускается, выходя со следующим исключением:

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

Я получаю тот же результат даже при попытке запустить mongod с опцией --repair. Я также попытался откатить контейнер до MongoDB 3.6.16 , но версия журнала теперь несовместима.

У нас нет снимков тома, поэтому восстановление данных не вариант (это не производственная среда). Единственное решение , которое я нашел в Интернете, неприменимо, поскольку предлагает использовать mongodump и mongorestore, требуя работающей базы данных с подключенным хранилищем данных.

I'm Исчезли идеи, какой-нибудь совет, как это исправить?

Ответы [ 3 ]

1 голос
/ 22 февраля 2020

A отчет об ошибке по этому вопросу рекомендуется следовать по пути полного обновления, и это сработало для меня. Я смог go вернуться к своей старой версии, когда столкнулся с этой ошибкой, а затем выполнить обновление должным образом.

В частности: обновлять только одну основную версию за раз, тщательно проверять предварительные условия и этапы обновления. Наиболее важной частью этого является проверка вашей совместимости с db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) и убедитесь, что она соответствует текущей версии перед обновлением до следующей версии. Обновите его с помощью команды, например db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

Считайте полные документы на страницах, таких как https://docs.mongodb.com/manual/release-notes/3.6/#upgrade -процедуры https://docs.mongodb.com/manual/release-notes/4.0/#upgrade -процедуры et c

0 голосов
/ 05 мая 2020

Я обновлял MongoDB с 3.6 до 4.2 с Homebrew на ОС Ma c и столкнулся с подобной ситуацией.

Поскольку формула mongodb была удалена из homebrew-core, команда mongodb продолжала пользовательский кран Homebrew .

Следующие шаги - мое решение для обновления MongoDB с 3.6 до 4.2 с помощью Homebrew:

1) Удаление старой версии mongodb из Homebrew

# 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 из пользовательского крана Homebrew

brew tap mongodb/brew
brew install mongodb-community@3.6

3) Добавьте mongodb-community@3.6 в вашу PATH

echo 'export PATH="/usr/local/opt/mongodb-community@3.6/bin:$PATH"' >> ~/.bash_profile

4) Перезапустите терминал и запустите mongod

5) Откройте другую вкладку или терминал windows для запуска mongodump

6) Завершите mongod

7) Удалите mongodb-community@3.6 и переустановите mongodb -community

brew uninstall mongodb-community@3.6
brew install mongodb-community

8) Удалить старые данные со старым mon go структура данных

rm -rf /data/db/*

9) Выполнить mongod

10) Открыть еще одну вкладку или терминал windows для запуска mongorestore /dump

После завершения mongorestore, mongod будет прерван. И вы можете запустить mongodb в качестве фоновой службы или просто запустить mongod снова. Откройте MongoDB с помощью mongo или Robo 3T (ранее Robomon go), и вы увидите, что ваши данные работают как обычно.

Надеюсь, это поможет.

0 голосов
/ 14 марта 2020

Хорошо, примерно через 3 часа попыток исправить то, что вы описываете, вот шаги, которые я предпринял. Здесь я покажу, как сохранить данные при понижении до 3.6, а также как обновить их до 4.0 с сохраненными данными.

Причина, по которой это происходит для пользователей ma c, заключается в том, что для людей, использующих обновление, произошло обновление brew больше не может загружать Mongodb напрямую с brew. Тогда люди склонны загружать более новую версию сообщества вместо brew, которая затем вступает в конфликт со старой версией папки 3.6 db, все еще присутствующей в каталоге. Вместо этого вам необходимо загрузить его с реального веб-сайта mongodb:

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

Вот что вы хотели бы сделать, это загрузить все вручную. Следуйте этим инструкциям здесь, но сделайте это с версией 3.6:

https://medium.com/@saurabhkumar_4718 / install-mongodb-без-homebrew-on-ma c -os-2a98b68ab09 c

ПРИМЕЧАНИЕ: при копировании .bash_profile убедитесь, что export команды не

. После успешной установки 3.6 вы можете mongodump, чтобы быть в безопасности, или экспортировать все свои файлы. go данные в json с mongoexport для любых данных, которые вы действительно должны сохранить.

После этого вы можете sh снова установить 4.0 вручную, выполнив в точности те же шаги, что и ранее для 3.6

Это сработало для меня без необходимости выполнять какие-либо операции «mongorestore», поскольку папка «db» осталась одна и все мои данные были там, но, возможно, для восстановления данных могут потребоваться дополнительные шаги. Хуже всего то, что у тебя есть .jsons, которые нужно переписать. 'mon go --version' также показал правильную версию :) Надеюсь, это поможет

...