2016-06-15 4 views
5

В настоящее время у меня есть старая версия mongo, i.e 2.6, работающая в моей системе. У меня уже есть мой сайт на производстве и у вас много клиентских данных. Я планирую обновление до mongo 3.2.Восстановление дампа базы данных старой версии mongo до новой версии mongo

Итак, мой вопрос, является ли mongorestore из Монго v3.2 работы со сбросом данных v2.6? Или, как известно, создавать проблемы?

Любые ответы будут неоценимы! Thanks

ответ

5

Поскольку у вас есть данные от mongo 2.6, ограничение поля индекса уже выполнено. Mongo 3.2 восстановит эту резервную копию без каких-либо проблем.

Другой путь вы можете обновить БД (если у вас есть набор реплик), чтобы заменить один элемент 2,6 с 3,2 и ждать синхронизации, то другой ... Это даст вам непрерывность бизнеса :-)

+1

Цените его человеком. – SRINI794

+1

Да, я задал этот вопрос в официальном списке рассылки MongoDB, и они сказали, что не будут обновлять более одной основной версии за раз. (Основные версии: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4) https://groups.google.com/d/msg/mongodb-user/cbXeM283iHM/y0QbW1h4BQAJ –

7

Я спросил об этом same question on the official MongoDB mailing list. Они заявили, что не будут обновлять более одной основной версии за раз. (Основные версии: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Я не хотел следовать нормальному процессу обновления каждой версии. Просто чтобы запустить mongod, а затем отключите его. Мне кажется, что он остался бы крутым, и мне нравится, чтобы мое здание инфраструктуры было написано и контролировалось версией. Итак, я решил запустить новые экземпляры EC2 с последним Ubuntu (поскольку мои серверы Mongo v2.4 были также 2 версиями LTS) и последний MongoDB. Я использовал докеры изображений промежуточных версий MongoDB для обновления данных.

https://gist.github.com/RichardBronosky/2d04c7c2e9a5bea67cd9760a35415a3f#file-uat_mongodb_upgrade_from_prod-sh

Основная часть раствора заключается в следующем:

# mongo.conf is using the default dbPath: /var/lib/mongodb 
# this path is for temporary use by the mongo docker container 
mkdir -p /data/db/dump 
# see: https://hub.docker.com/_/mongo/ (search for /data/db) 
# see: https://github.com/docker-library/mongo/blob/30d09dbd6343d3cbd1bbea2d6afde49f5d9a9295/3.4/Dockerfile#L59 
cd /data/db 
mongodump -h prodmongo.int 

# Get major versions from https://hub.docker.com/r/library/mongo/tags/ 
step=0 
for major_version in 2.6.12 3.0.14 3.2.11 3.4.1; do 
    sudo docker stop some-mongo || true 
    sudo docker rm some-mongo || true 
    sudo docker run --name some-mongo -v /data/db:/data/db -d mongo:$major_version 
    false; while [[ $? > 0 ]]; do 
     sleep 0.5 
     sudo docker exec -it some-mongo mongo --eval 'printjson((new Mongo()).getDBNames())' 
    done 
    if (($step == 0)); then 
     sudo docker exec -it some-mongo mongorestore /data/db/dump 
    fi 
    ((step += 1)) 
done 

# Finish up with docker 
sudo rm -rf /data/db/dump/* 
sudo docker exec -it some-mongo bash -c 'cd /data/db; mongodump' 
sudo docker stop some-mongo 
sudo docker rm some-mongo 

# Load upgraded data into latest version of MongoDB (WiredTiger storage engine will be used) 
mongorestore /data/db/dump 
sudo rm -rf /data 
+0

Меня всегда волнует, когда мой ответ получает upvotes и без комментариев. Может ли мой код действительно быть таким ясным? В конце концов, это бах. –

+1

Комментируя только для ума Бруно;) Спасибо, Бруно! Ты спас мой день (или два :)! Он не летал «из коробки», потому что я не получил «mongodump -h » удаленно, также должен был установить новую отдельную EBS на 30 ГБ на Amazon из-за удачи требуемого свободного места на диске «/» (и соответственно изменить пути здесь и там). Также в течение 1-го шага (когда вы делаете mongorestore) появилась ошибка: переход в пространство имен [admin.system.users] утверждение: 17415 Не удается восстановить пользователей с помощью схемы 1 с системой с версией сервера 2.5.4 или выше », обходной путь был для удаления/data/db/dump/admin. –