27 May 2014

Проблема с mongorestore между mongodb2.4 и mongodb2.6

MongoDB

Всем доброго времени суток!


Не так давно пересобрал world в gentoo, что повлекло обновление mongoDB. Запустил консольку, выполнил привычные mongodump и mongorestore. Открываю свое приложение и вижу кучу ошибок о том, что часть коллекций не существуют. Перезапустил mongodump, mongorestore, проверяю список колекций и вижу, что из 50 коллекций существует только ~30.

Начал разбираться и пришел к выводу, что проблема таилась в следующем: на сервере установлена mongodb2.4, а у меня установлена mongodb2.6. Первой мыслью было: быстро пересобрать у себя монгу с версией 2.4 и радоваться жизни. Это, как говорится, не кошерно. Обратился за помощью к гуглу, но выяснить удалось лишь то, что в mongo2.6 изменили логику работы команды создания коллекции. Теперь нельзя использовать «size=null» and «max=null». Но решения этой проблемы не было предоставлено.

И вот сегодня, благодаря подсказке Хабраюзера kuzma решение было найдено. Все получилось и заработало. Поэтому решил поделиться им со всеми, возможно оно будет полезно еще кому-нибудь.

Если база данных how-it-will-be-called-locally (смотреть ниже) еще не существует то выполнить следующую команду:

mongo --eval "db.copyDatabase('remote-db-name','how-it-will-be-called-locally','server-address','user','password')"


Если база данных уже существует, она должна быть удалена перед созданием

mongo how-it-will-be-called-locally  --eval "db.dropDatabase(); db.copyDatabase('remote-db-name','how-it-will-be-called-locally', 'server-address','user','password')"


Выше приведенный код скопирует удаленную базу данных remote-db-name и создаст ее копию локально с именем how-it-will-be-called-locally

Вот и все.
Tags:mongodbmongodb 2.4mongodb 2.6mongorestoremongodump
Hubs: MongoDB
+21
3.6k 37
Comments 1
Ads