2012-07-23 24 views
11

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()`?

+0

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. –

Trả lời

11

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 đó.

+1

Câu trả lời này có còn hiệu lực kể từ bây giờ không? –

+1

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. –

11

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/

+0

Điều này không thực sự đòi lại không gian đĩa, tôi khá chắc chắn. –

+0

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

1

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

11

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.

+0

+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 –

+7

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

4

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.

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