2012-01-19 47 views
8

Giống như tiêu đề cho biết, tôi có cơ sở dữ liệu MongoDBGridFS với toàn bộ phạm vi loại tệp (ví dụ: văn bản, pdf, xls) và tôi muốn sao lưu cơ sở dữ liệu này một cách dễ dàng nhất.Làm cách nào để sao lưu cơ sở dữ liệu MongoDB GridFS một cách dễ dàng nhất?

Sao chép không phải là một tùy chọn. Tốt hơn là tôi muốn làm điều đó theo cách cơ sở dữ liệu thông thường của việc đổ cơ sở dữ liệu vào tệp và sau đó sao lưu tệp đó (có thể được sử dụng để khôi phục toàn bộ cơ sở dữ liệu 100% sau này nếu cần). Có thể thực hiện với mongodump không? Tôi cũng muốn sao lưu được gia tăng. Đó có phải là vấn đề với GridFSmongodump không?

Quan trọng nhất, đó là cách tốt nhất để làm điều đó? Tôi không quen thuộc với MongoDB, sẽ mongodump hoạt động cũng như mysqldump có hoạt động với MySQL không? Whats thực tiễn tốt nhất cho MongoDBGridFS và sao lưu gia tăng?

Tôi đang chạy Linux nếu điều đó tạo ra bất kỳ sự khác biệt nào.

Trả lời

15

GridFS lưu trữ tệp trong hai bộ sưu tập: fs.files và fs.chunks.

Thông tin thêm về vấn đề này có thể được tìm thấy trong các tài liệu GridFS Thông số kỹ thuật: http://www.mongodb.org/display/DOCS/GridFS+Specification

Cả hai bộ sưu tập có thể được sao lưu bằng mongodump, giống như bất kỳ bộ sưu tập khác. Các tài liệu trên mongodump có thể được tìm thấy ở đây: http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongodump

Từ một thiết bị đầu cuối, điều này sẽ trông giống như sau:

Đối với cuộc biểu tình này, tên db của tôi là "gridFS":

Thứ nhất, mongodump được sử dụng để sao lưu các fs.files và fs.chunks bộ sưu tập vào một thư mục trên máy tính để bàn của tôi:

$ bin/mongodump --db gridFS --collection fs.chunks --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.chunks to /Desktop/gridFS/fs.chunks.bson 
     3 objects 
$ bin/mongodump --db gridFS --collection fs.files --out /Desktop 
connected to: 127.0.0.1 
DATABASE: gridFS  to  /Desktop/gridFS 
    gridFS.fs.files to /Users/mbastien/Desktop/gridfs/gridFS/fs.files.bson 
     3 objects 

Bây giờ, mongorestore được sử dụng để kéo các bộ sưu tập sao lưu vào một mới (đối với mục đích của quỷ tration) cơ sở dữ liệu được gọi là "gridFScopy"

$ bin/mongorestore --db gridFScopy --collection fs.chunks /Desktop/gridFS/fs.chunks.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:38:43 /Desktop/gridFS/fs.chunks.bson 
Thu Jan 19 12:38:43  going into namespace [gridFScopy.fs.chunks] 
3 objects found 
$ bin/mongorestore --db gridFScopy --collection fs.files /Desktop/gridFS/fs.files.bson 
connected to: 127.0.0.1 
Thu Jan 19 12:39:37 /Desktop/gridFS/fs.files.bson 
Thu Jan 19 12:39:37  going into namespace [gridFScopy.fs.files] 
3 objects found 

Bây giờ Mongo vỏ được bắt đầu, do đó khôi phục có thể được xác nhận:

$ bin/mongo 
MongoDB shell version: 2.0.2 
connecting to: test 
> use gridFScopy 
switched to db gridFScopy 
> show collections 
fs.chunks 
fs.files 
system.indexes 
> 

Các bộ sưu tập fs.chunks và fs.files đã được khôi phục thành công DB mới.

Bạn có thể viết tập lệnh để thực hiện mongodump trên bộ sưu tập fs.files và fs.chunks theo định kỳ.

Đối với các bản sao lưu gia tăng, chúng không thực sự được hỗ trợ bởi MongoDB. Tìm kiếm Google cho "bản sao lưu gia tăng mongodb" cho thấy một cuộc thảo luận nhóm người dùng mongodb tốt trên chủ đề: http://groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

Để sao lưu liên tục, nhiều người dùng sử dụng bộ bản sao. (Nhận ra rằng trong câu hỏi ban đầu của bạn, bạn đã nói rằng đây không phải là một lựa chọn. Điều này được bao gồm cho các thành viên khác của Cộng đồng có thể đọc phản hồi này.) Một thành viên của một bộ bản sao có thể được ẩn để đảm bảo rằng nó sẽ không bao giờ trở thành Chính và sẽ không bao giờ được đọc từ. Thông tin thêm về điều này có thể được tìm thấy trong phần "Tùy chọn thành viên" của tài liệu Thiết lập cấu hình bản sao. http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

+0

Mặc dù MongoDB không có bất kỳ khả năng sao lưu gia tăng nào, bất kỳ công việc sao lưu gia tăng bên ngoài nào cũng ít nhất có thể thấy rằng có fs.files/fs.chunks cũ và mới và chỉ sao lưu mới? Tôi sẽ chơi với nó một chút để xem. Nhân rộng trong tâm trí của tôi là một chút sơ sài, tôi ghét phải dựa vào MongoDB để sao lưu. Thêm vào đó lý tưởng tôi muốn một ảnh chụp nhanh hàng ngày cho mục đích lưu trữ. Cảm ơn nhiều cách, rất thông tin. – c00kiemonster

+2

Nếu bộ sưu tập đích đã tồn tại, mongorestore sẽ duyệt qua _id của mỗi tài liệu và chỉ thêm tài liệu mới. Bạn có thể cung cấp truy vấn mongodump, vì vậy nếu tài liệu của bạn chứa trường "cập nhật lần cuối" hoặc tương đương, bạn chỉ có thể đổ tài liệu đã được cập nhật hoặc thêm sau ngày sao lưu cuối cùng của bạn. Bạn cũng có thể có một tiện ích khác thực hiện sao lưu thư mục dbpath của mình. Có một số lưu ý về điều này trong phần "Sao lưu với Nhật ký đã bật" và "Tắt và sao lưu" của tài liệu Mongo trên bản sao lưu. http://www.mongodb.org/display/DOCS/Backups – Marc

+0

Điều đó sẽ rất tiện dụng. cảm ơn vì tiền hỗ trợ – c00kiemonster

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