Tôi muốn thu nhỏ kích thước tệp dữ liệu bằng cách xác nhận lại dung lượng đã xóa, nhưng tôi không thể chạy db.repairDatabase()
, vì dung lượng đĩa trống là không đủ.Làm cách nào để lấy lại không gian đã xóa mà không có `db.repairDatabase()`?
Trả lời
Câu trả lời ban đầu cho câu hỏi này là ở đây: Reducing MongoDB database file size
Có thực sự là không có gì ngoài repair
mà sẽ đòi lại không gian. Các compact
nên cho phép bạn đi lâu hơn trên không gian hiện có. Nếu không, bạn sẽ phải di chuyển đến một ổ đĩa lớn hơn.
Một cách để thực hiện việc này là sử dụng thứ hạng ngoại tuyến từ Tập bản sao của bạn. Điều này sẽ cung cấp cho bạn một cửa sổ bảo trì toàn bộ để di chuyển, sửa chữa, di chuyển trở lại và mang về.
Nếu bạn không chạy một bộ bản sao, đó là thời gian để xem xét làm việc đó.
Câu trả lời này có còn hiệu lực kể từ bây giờ không? –
Vì câu trả lời này đã được đăng, MongoDB đã thêm WiredTiger để lưu trữ tệp. WiredTiger là hiệu quả hơn nhiều về mặt sử dụng đĩa, tuy nhiên bạn không thể cuộn này ra "tại chỗ". Vì vậy, các câu trả lời ở trên vẫn nên áp dụng. –
Bạn có thể chạy lệnh compact
trên một bộ sưu tập hoặc từng người một trong tất cả các bộ sưu tập bạn muốn thu nhỏ.
http://www.mongodb.org/display/DOCS/Compact+Command
db.runCommand({ compact : 'mycollectionname' })
Như đã đề cập trong ý kiến, tôi đã nhầm, nhỏ gọn không thực sự lấy lại không gian đĩa, nó chỉ chống phân mảnh và tái xây dựng các chỉ số bộ sưu tập.
Thay vào đó, bạn có thể sử dụng tùy chọn "--repairpath" nếu bạn có sẵn một ổ đĩa khác có sẵn khả năng tự do.
Ví dụ:
mongod --dbpath /data/db --repair --repairpath /data/db0
Trên đây: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/
Điều này không thực sự đòi lại không gian đĩa, tôi khá chắc chắn. –
Chỉ cần một người đứng đầu, theo các tài liệu, '--repairpath' là," chỉ có sẵn cho trường hợp mongod bằng cách sử dụng công cụ lưu trữ MMAPv1. " https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption--repairpath – Grinn
Có một tùy chọn khác, nếu bạn đang sử dụng bộ bản sao, nhưng có rất nhiều cảnh báo. Bạn có thể thất bại đối với thành viên đã đặt khác, sau đó xóa các tệp trên tài khoản chính cũ và thực hiện lại đồng bộ hóa đầy đủ. Một resync đầy đủ ghi đè các tập tin từ đầu theo cách tương tự như một sửa chữa, nhưng bạn cũng sẽ phải xây dựng lại các chỉ mục. Điều này không được thực hiện một cách nhẹ nhàng.
Nếu bạn đi xuống con đường này, đề nghị của tôi là phải có một bản sao 3 thành viên trước khi thực hiện điều này để cải tiến không gian đĩa, để bất kỳ lúc nào thành viên đồng bộ từ đầu bạn có 2 thành viên được cài đặt đầy đủ chức năng.
Nếu bạn không có bộ bản sao, tôi khuyên bạn nên tạo một bản sao, với hai bộ thứ hai. Khi bạn đồng bộ hóa chúng ban đầu, bạn sẽ tạo ra một phiên bản không bị phân mảnh và không được đệm của dữ liệu của bạn. Thêm ở đây:
http://www.mongodb.org/display/DOCS/Replica+Set+Configuration
Bạn cũng có thể làm một mongodump bằng tay và mongorestore. Đó là cơ bản giống như những gì repairDatabase làm. Bằng cách đó bạn có thể đổ và khôi phục nó đến/từ một máy khác với đủ không gian đĩa.
+1 bạn chỉ có thể viết một kịch bản để làm một mongodump/mongorestore trên mỗi nút –
NÀY. Hãy chắc chắn để thả db đầu tiên trước khi khôi phục lại nó, để lấy lại không gian. Tất nhiên tùy chọn này có nghĩa là một chút thời gian chết, nhưng đó là những gì 3AM là dành cho! – CommaToast
Nếu bạn đang chạy bộ bản sao, bạn sẽ muốn phát hành lại đồng bộ hóa trên mỗi người thứ hai của bạn, từng người một. Một khi điều này đã được hoàn thành, bước xuống của bạn chính và resync vừa được phân công thứ cấp.
Để đồng bộ hóa, hãy dừng trường hợp mongod của bạn, xóa người dân địa phương và bắt đầu quá trình sao lưu. Xem nhật ký để đảm bảo mọi thứ bắt đầu sao lưu đúng cách và đồng bộ hóa đã bắt đầu.
Nếu bạn có nhiều dữ liệu/chỉ mục, hãy đảm bảo oplog của bạn đủ lớn, nếu không nó có thể bị lỗi thời.
- 1. MongoDB có sử dụng lại không gian đã xóa không?
- 2. Làm cách nào để lấy lại không gian từ "Grip"
- 3. Tự động nén không gian đã xóa trong mongodb?
- 4. Làm cách nào để lấy lại một repo Git được chia nhỏ mà không xóa và bỏ lại?
- 5. Cách lấy lại bộ nhớ cho các LOB đã xóa
- 6. Cách lấy lại tệp đã bị xóa trong TortoiseSVN?
- 7. Làm cách nào để xóa không gian bên dưới UITabBarItem?
- 8. Tách chuỗi bằng dấu cách mà không xóa không gian?
- 9. Cách xóa edittext mà không có setText ("");
- 10. Làm cách nào để xóa không gian khỏi chuỗi?
- 11. Làm cách nào để có thể kiểm tra thời gian chạy mà không cần thoát SecurityException?
- 12. Xóa tệp khỏi Kiểm soát lực lượng mà không xóa khỏi không gian làm việc?
- 13. Tại sao git pull không mang lại các thư mục mà tôi đã xóa?
- 14. Lấy lại thư mục .svn đã bị xóa
- 15. Làm thế nào để lấy văn bản để chiếm 100% không gian còn lại?
- 16. Có thể có biến không gian làm việc mà vẫn tồn tại trong suốt cuộc gọi để xóa không?
- 17. Cách lấy PhpMyAdmin để xóa/cắt bớt mà không yêu cầu xác nhận
- 18. Cách xóa tệp "dead.letter" không để lại không gian trống trong thư mục gốc
- 19. làm cách nào để chỉ lấy tên tệp mà không có Đường dẫn Tệp?
- 20. Làm cách nào để lấy Entity Framework 4.2 mà không có Nuget?
- 21. Làm cách nào để xóa đường viền xung quanh hình ảnh mà không có nguồn?
- 22. matplotlib lô ảnh nhỏ mà không cần lấy lại mẫu
- 23. Không gian bị chiếm bởi các hàng đã xóa có được tái sử dụng không?
- 24. Làm thế nào để loại bỏ cột mà không có thời gian chết với ActiveRecord 3.1?
- 25. Làm cách nào để ghi lại các lớp học mà không có tên mô-đun?
- 26. Làm cách nào để ngăn tải lại bằng onclick mà không có "#"?
- 27. Làm cách nào để xác thực xem bình đã ký có chứa dấu thời gian không?
- 28. Làm cách nào để xóa không gian không bị phá vỡ khỏi Tài liệu JSoup '?
- 29. Đã xóa tệp debug.keystore. Làm cách nào để tạo lại nó?
- 30. Xóa không gian làm việc trong Accurev
Bạn có thể chuyển tệp của mình sang một đĩa/máy khác và thực hiện việc này không? Tôi nghĩ đây là một trong những điểm đau trong bộ công cụ mongo hiện có: Phải làm gì khi bạn hết dung lượng đĩa. –