Sao lưu với mongoexport hoặc mongodump?


9

Để sao lưu sản xuất, MongoDB khuyến nghị mongodump thay vì mongoexport cho độ chính xác của dữ liệu. Tuy nhiên, tôi sẽ cần "xóa" dữ liệu khỏi cơ sở dữ liệu MongoDB trước khi sao lưu. Tôi không biết về bất kỳ tùy chọn xóa dữ liệu phía máy chủ nào ngoài mongoexport . Hai câu hỏi:

  1. Liệu mongoexport truy cập MongoDB bộ nhớ cache trong RAM? Nó sẽ thay đổi bộ làm việc trong RAM như mongodump không?
  2. lệnh mongodump có tùy chọn --query này . "Cung cấp một tài liệu JSON dưới dạng một truy vấn tùy chọn giới hạn các tài liệu có trong đầu ra của mongodump." Có một truy vấn để loại trừ các trường nhất định trong một tài liệu?

1
Có vẻ như bạn đang tìm kiếm một bản xuất hơn là một bản sao lưu. Nếu bạn chỉ xuất một tập hợp con các trường, có lẽ bạn sẽ không thể khôi phục điều đó và có cơ sở dữ liệu hoàn toàn khả thi. Có một vài lựa chọn khác để xem xét: mã hóa bất kỳ trường nào có dữ liệu nhạy cảm (thông qua mã ứng dụng) để bạn có thể thực hiện mongodumpsao lưu ảnh chụp bình thường hoặc hệ thống tệp hoặc viết xuất tùy chỉnh nếu mongoexportkhông làm những gì bạn cần. Bất kỳ công cụ hoặc chương trình nào đọc dữ liệu từ đó đều mongodcó thể thay đổi bộ công việc của bạn nếu dữ liệu của bạn xuất lớn hơn RAM. Ảnh chụp nhanh hệ thống tập tin ít gây rối hơn
Stennie 21/07/2015

Cảm ơn đã làm rõ. Mã hóa trên các lĩnh vực là điều tôi chưa từng nghĩ tới, gợi ý tốt.
Howard Lee

Câu trả lời:


6

Như một câu trả lời cho câu hỏi đầu tiên của bạn, cả hai công cụ (theo mặc định) sẽ chỉ đi bộ _idchỉ mục để lấy dữ liệu và sau đó ghi nó ra đĩa. Vì vậy, vâng, cả hai công cụ sẽ tác động tương tự đến bộ công việc của bạn, đó là lý do tại sao tôi thường khuyên bạn nên chạy chúng với thứ cấp (tốt nhất là thứ cấp ẩn nếu có thể). Tôi sẽ nhắc lại Stennie trong các bình luận ở đây và đề xuất các phương thức sao lưu khác nếu bạn đang xử lý một lượng lớn dữ liệu.

Đối với câu hỏi thứ hai, tôi giả sử bạn đang tìm kiếm một tùy chọn mongodumptương đương --fieldstừ mongoexportchỉ để loại bỏ các trường cụ thể. Các tùy chọn truy vấn có thể được sử dụng để lọc kết quả, nhưng nó không thể được sử dụng với một chiếu (để chọn các trường trả lại) - đây là một yêu cầu tính năng đang được theo dõi trong CỤ-28 nhưng chưa được lên kế hoạch. Như Stennie cũng đã đề cập, tùy chọn khác ở đây là viết một nhà xuất khẩu tùy chỉnh phù hợp với nhu cầu của bạn (và một lần nữa, tôi vẫn khuyên bạn nên chạy nó dựa vào thứ cấp để bảo vệ bộ công việc của bạn).


6
  1. (xin lỗi, dunno)

  2. --query sẽ chọn hoặc loại trừ toàn bộ tài liệu, không phải các trường.

Nó sẽ là một ý tưởng tốt mặc dù:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump sử dụng cấu trúc tệp bson và bảo tồn các kiểu dữ liệu . Mongoexport sẽ mất kiểu dữ liệu của các giá trị . Chẳng hạn như NumberLong ("1431677405876") sẽ được chuyển đổi thành chỉ 1431677405876. Đó là lý do tại sao mongodump được khuyên dùng nếu bạn cần nhập trở lại MongoDB.

Cảm ơn bạn đã làm rõ về --query và ví dụ về loại dữ liệu mất mongoexport.
Howard Lee

0

Mongoexport thực sự bảo tồn các loại nhưng nó làm cho dữ liệu không nhất quán. Nếu bạn đang xuất một trường có Ints và Longs, nó sẽ xuất nó dưới dạng các đối tượng Số và JSON tương ứng, điều này có thể làm cho nó khó hơn trên đường.

"Chế độ nghiêm ngặt. Các biểu diễn chế độ nghiêm ngặt của các loại BSON tuân thủ RFC JSON. Bất kỳ trình phân tích cú pháp JSON nào cũng có thể phân tích các biểu diễn chế độ nghiêm ngặt này dưới dạng các cặp khóa / giá trị;

https://docs.mongodb.com/manual/reference/mongodb-extends-json/

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.