Có thể khôi phục cơ sở dữ liệu MongoDB từ .ns và .0, .1 ,. … các tập tin?


14

Tôi có cài đặt MongoDB 2.0.4 trên Ubuntu 12.10. Gần đây tôi có một số vấn đề khi kết nối với cơ sở dữ liệu từ bên ngoài và nhận ra có điều gì đó ngăn MongoDB khởi động chính xác. Theo đề xuất trên một số nguồn (xem StackOverflow) tôi đã gỡ bỏ /var/lib/mongodb/mongodb.lockvà chạy mongod --repair. Điều này không giải quyết được vấn đề, MongoDB sẽ không chạy và tiếp tục tạo các tệp khóa mà nó không quan tâm để xóa sau đó. Bằng cách nhìn vào nhật ký, tôi nhận ra rằng nó không có quyền truy cập vào một số thư mục được gọi $tmpSomething, vì vậy (vì tên gợi ý một thư mục tạm thời) tôi đã xóa nó và sau đó tất cả đều hoạt động ... ngoại trừ thực tế là tôi chỉ có một cơ sở dữ liệu trước đây của tôi trong tầm nhìn, trong khi các cơ sở dữ liệu khác vẫn còn đó vì /var/lib/mongodb/thư mục của tôi vẫn còn đầy.ns .0 .1 .ntập tin có trọng lượng rất nhiều. Có cách nào để khôi phục chúng vào cơ sở dữ liệu? (Tôi đã thử với mongorestore, nhưng như tôi mong đợi, nó không xử lý các tệp đó).

Cảm ơn

Câu trả lời:


19

Các .ns .0 .1tập tin vv là các tập tin dữ liệu chính họ. Nếu bạn bắt đầu một mongodthể hiện với một --dbpathđối số trỏ vào thư mục đó hoặc nếu bạn di chuyển nội dung sang một nơi khác và sử dụng tùy chọn để trỏ đến đó, mongod sẽ cố gắng đọc chúng như bình thường.

Vì các vấn đề của bạn đề xuất tham nhũng và / hoặc một số vấn đề khác bắt đầu mongod(bạn thực sự nên đăng các tệp nhật ký thư khởi động, có lẽ trong một câu hỏi riêng để giải quyết vấn đề đó), sau đó có các giải pháp thay thế. Để tham khảo, các vấn đề phổ biến nhất là các quyền liên quan, đặc biệt là khi mọi người cố gắng khởi động mongod bằng tay (như chính họ) hoặc với sudo (với quyền root) và tạo các quyền có vấn đề trong các thư mục khác nhau.

Bạn đúng là mongorestorekhông thể sử dụng trực tiếp các tệp dữ liệu này, nhưng mongodumpcó thể đọc chúng và chuyển dữ liệu từ chúng vào các tệp BSON mongorestoremong đợi.

Tùy chọn bạn muốn ở đây là dbpath . Bạn đề cập đến con đường của bạn là /var/lib/mongo, vì vậy bạn có thể chạy một cái gì đó như thế này:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

Tùy chọn bạn cũng có thể sử dụng --repairở đây để khắc phục tham nhũng cùng với các tùy chọn truy vấn trong hoàn cảnh khắc nghiệt để khắc phục các phần bị hỏng (hiếm khi, nếu có, nếu cần). Các tùy chọn khác nhau được mô tả trên mongodumptrang:

http://docs.mongodb.org/manual/reference/mongodump/

Khi bạn kết xuất các tệp ra, bạn có thể sử dụng mongorestoređể nhập lại chúng vào một mongodthể hiện khác .



2
Với Mongo 3.0, một tùy chọn là khởi động máy chủ mongo với các tệp được chỉ định: mongod --dbpath ./và sau đó tiến hành chuyển đổi mà không có--dbpath
Shwaydogg

3
Xin lưu ý, nếu bạn đang chạy Mongo 3.0 và mongod --dbpath ./không cung cấp cho bạn cơ sở dữ liệu trong các .ns .0tệp, thì có thể công cụ lưu trữ đang mặc định cho công cụ WiredTiger mới thay vì công cụ MMapV1 cũ. mongod --storageEngine mmapv1 --dbpath ./Thay vào đó hãy thử kết nối bằng động cơ cũ.
flamebaud

1
Ai có thể giúp tôi chuyển dữ liệu từ các tệp .ns, .0 và .1 sang mongo 3.0
Mandeep Singh

1
Như @flamebaud đã nói, công cụ mặc định đã thay đổi. Vui lòng kiểm tra Thay đổi công cụ lưu trữ mặc định trong tài liệu Mongo. Bạn cũng có thể muốn xem phần đầu của tài liệu tại WiredTiger Storage Engine
Ludovic Kuty
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.