2016-06-15 15 views
5

Hiện tại, tôi có phiên bản cũ hơn của mongo, tức là 2,6 đang chạy trên hệ thống của tôi. Tôi đã có trang web của mình trong sản xuất và có rất nhiều dữ liệu khách hàng. Tôi đang lên kế hoạch nâng cấp lên mongo 3.2.Khôi phục kết xuất cơ sở dữ liệu của phiên bản cũ hơn của mongo lên phiên bản mới của mongo

Vì vậy, câu hỏi của tôi là liệu mongorestore của mongo v3.2 hoạt động với kết xuất dữ liệu của v2.6? Hoặc, nó được biết là tạo ra vấn đề?

Bất kỳ câu trả lời nào cũng sẽ vô giá! Cảm ơn

Trả lời

5

Khi bạn có dữ liệu từ mongo 2.6, giới hạn trường chỉ mục đã được đáp ứng. Mongo 3.2 sẽ khôi phục bản sao lưu này mà không gặp bất kỳ sự cố nào. Một cách khác bạn có thể nâng cấp db của bạn (nếu bạn có bản sao thiết lập) là để thay thế một thành viên 2.6 với 3.2 và chờ đồng bộ, sau đó khác ... Điều này sẽ cho bạn liên tục kinh doanh :-)

+1

Đánh giá cao nó con người. – SRINI794

+1

Vâng, tôi đã hỏi câu hỏi này trên danh sách gửi thư MongoDB chính thức và họ nói không nâng cấp nhiều hơn 1 phiên bản chính tại một thời điểm. (Các phiên bản chính là: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4) https://groups.google.com/d/msg/mongodb-user/cbXeM283iHM/y0QbW1h4BQAJ –

7

Tôi đã hỏi số same question on the official MongoDB mailing list này. Họ nói không nên nâng cấp nhiều hơn 1 phiên bản chính tại một thời điểm. (Các phiên bản chính là: 2.2, 2.4, 2.6, 3.0, 3.2, 3.4)

Tôi không muốn thực hiện quá trình nâng cấp bình thường của mỗi phiên bản Chỉ cần khởi chạy mongod và sau đó tắt nó đi. Điều đó khiến tôi cảm thấy như nó sẽ bỏ lại phía sau và tôi muốn có kịch bản xây dựng cơ sở hạ tầng và phiên bản được kiểm soát. Vì vậy, tôi quyết định khởi chạy các phiên bản EC2 mới với Ubuntu mới nhất (kể từ khi máy chủ Mongo v2.4 của tôi cũng là 2 phiên bản LTS phía sau) và MongoDB mới nhất. Tôi đã sử dụng hình ảnh docker của các phiên bản trung gian của MongoDB để thực hiện nâng cấp dữ liệu.

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

Phần lớn các giải pháp là thế này:

# 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

Nó luôn làm tôi thất vọng khi câu trả lời của tôi được upvotes và miễn bình luận. Mã của tôi có thực sự rõ ràng không? Nó là bash sau khi tất cả. –

+1

Chỉ bình luận cho suy nghĩ của Bruno;) Cảm ơn, Bruno! Bạn đã lưu ngày của tôi (hoặc hai :)! Nó không bay "ra khỏi hộp" vì tôi coulnd't nhận được "mongodump -h " từ xa, cũng phải gắn thêm EBS 30 GB riêng biệt trên Amazon do may mắn về không gian trống cần thiết trên "/" ổ đĩa (và phù hợp thay đổi đường dẫn ở đây và ở đó). Cũng trong bước 1 (khi bạn mongorestore) gặp lỗi: đi vào namespace [admin.system.users] xác nhận: 17415 Không thể khôi phục người dùng có phiên bản giản đồ 1 sang hệ thống có phiên bản máy chủ 2.5.4 trở lên ", giải pháp thay thế là để xóa/data/db/dump/thư mục quản trị. –

Các vấn đề liên quan