Проблема з mongorestore між mongodb2.4 і mongodb2.6

    

Всім доброго часу доби!

 
Не так давно пересобран 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
 
Ось і все (:
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.