sql >> データベース >  >> NoSQL >> MongoDB

古いバージョンのmongoのデータベースダンプを新しいバージョンのmongoに復元する

    私はこれを公式のMongoDBメーリングリストで同じ質問 。彼らは一度に複数のメジャーバージョンをアップグレードしないと言った。 (主なバージョンは2.2、2.4、2.6、3.0、3.2、3.4)

    私は、mongodを起動してからシャットダウンするためだけに、すべてのバージョンをインストールするという通常のアップグレードプロセスには従いたくありませんでした。それは、それが残酷なものを残すだろうと私には感じます、そして、私は私のインフラストラクチャ構築をスクリプト化してバージョン管理させたいです。そこで、最新のUbuntu(Mongov2.4サーバーも2LTSバージョン遅れていたため)と最新のMongoDBを使用して新しいEC2インスタンスを起動することにしました。 MongoDBの中間バージョンのDockerイメージを使用して、データのアップグレードを行いました。

    https://gist.github.com/RichardBronosky/2d04 -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. Node.jsでfindOneをループで使用するには時間がかかりすぎる

    2. javascriptを使用してバイナリファイルをmongodbに挿入するにはどうすればよいですか?

    3. Mongoid-参照ドキュメントによるクエリ

    4. 最もよく知られているNoSQLシステム間の主な違い/機能