MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Възстановяване на дъмпа на базата данни на по-стара версия на mongo в нова версия на mongo

Попитах това същия въпрос в официалния пощенски списък на MongoDB . Казаха да не се надгражда повече от 1 основна версия наведнъж. (Основните версии са: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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изключете специфични полета в индекса на заместващи символи в MongoDB

  2. Как да добавите автоматично увеличение към съществуваща колекция в mongodb/node.js?

  3. Може ли mongodb да се използва като вградена база данни?

  4. Преброяване на различни полета на поддокумент и извеждане като именувани ключове

  5. Как внедрявате автоматично увеличаващ се първичен идентификатор в MongoDB?