2016-06-15 19 views
5

現在、古いバージョンのmongo、つまり2.6が自分のシステムで動作しています。私はすでに本場のサイトを運用しており、多くのクライアントデータを持っています。 mongo 3.2へのアップグレードを予定しています。古いバージョンのmongoのデータベースダンプを新しいバージョンのmongoに戻す

だから、私の質問は、V2.6のデータダンプとモンゴV3.2仕事のmongorestoreかどうか?それとも問題を引き起こすことが知られていますか?

すべての回答は非常に貴重です!ありがとう

答えて

5

mongo 2.6のデータがあるので、インデックスフィールドの制限は既に満たされています。 Mongo 3.2は問題なくこのバックアップを復元します。あなたは(あなたがレプリカセットを持っている場合)あなたのDBをアップグレードすることができ

他の方法は、3.2と1人の2.6メンバーを交換し、同期を待つことである、そしてもう一つは...これはあなたのビジネスの継続性を与える

+1

は男、それを感謝しています。 – SRINI794

+1

ええ、私はこの質問をMongoDBの公式メーリングリストで尋ねました。彼らは一度に1つ以上のメジャーバージョンをアップグレードしないと言いました。 (メジャーバージョン: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。彼らは一度に1つ以上のメジャーバージョンをアップグレードしないように言った。 (メジャーバージョン:2.2,2.4,2.6,3.0,3.2,3.4)

すべてのバージョンをインストールする通常のアップグレードプロセスに従わず、mongodを起動してシャットダウンするだけです。それは私にはひどいことが残っているような気がします。私は自分のインフラストラクチャをスクリプト化してバージョン管理することが好きです。そこで、最新のUbuntu(私のMongo v2.4サーバーも2 LTSバージョン以降)と最新のMongoDBで新しいEC2インスタンスを起動することにしました。 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

私の答えがアップヴォートを取得し、コメントはありません。私のコードは本当に明白でしょうか?結局のところbashです。 –

+1

ブルーノの心のためだけにコメントする;)ありがとう、ブルーノ!あなたは私の1日(または2つ)を救った!私は "mongodump -h "をリモートで入手できず、 "/"ドライブに必要な空き容量があるため、Amazonで新しい別の30GB EBSをマウントしなければならなかったので(それに応じて)パスをこことそこに変更する)。また、最初のステップ(mongorestoreを実行しているとき)でエラーが発生しました。名前空間[admin.system.users] アサーション:17415スキーマバージョン1のユーザーをサーバーバージョン2.5.4以上のシステムに復元できません。/data/db/dump/adminフォルダを削除します。 –

関連する問題