Có một số cách để sao lưu cơ sở dữ liệu trong MongoDB. Một cách nhanh chóng để sao lưu cơ sở dữ liệu là sử dụng mongodump
công cụ.
mongodump
đọc dữ liệu từ cơ sở dữ liệu MongoDB và tạo các tệp BSON có độ trung thực cao mà mongorestore
utitlity có thể sử dụng để khôi phục cơ sở dữ liệu MongoDB.
Với mongodump
, bạn có thể sao lưu một bộ sưu tập, một cơ sở dữ liệu hoặc tất cả các cơ sở dữ liệu.
Kiểm tra Công cụ Cơ sở dữ liệu MongoDB
mongodump
là một phần của gói Công cụ cơ sở dữ liệu MongoDB. Công cụ cơ sở dữ liệu MongoDB là một bộ tiện ích dòng lệnh để làm việc với MongoDB.
Bạn có thể có hoặc không có Công cụ cơ sở dữ liệu MongoDB / mongodump
Cài đặt. Hãy thử chạy lệnh sau trong Terminal hoặc Command Prompt của bạn để kiểm tra:
mongodump --version
Nếu chưa có, bạn có thể sử dụng hướng dẫn cài đặt trên trang web MongoDB để cài đặt vào hệ thống của mình.
Chạy lệnh ở đâu?
Bạn cần chạy mongodump
lệnh từ dòng lệnh của hệ thống của bạn (ví dụ:cửa sổ Terminal hoặc Command Prompt mới).
Đừng chạy chúng từ mongo
vỏ bọc.
Sao lưu tất cả cơ sở dữ liệu
Để sao lưu tất cả cơ sở dữ liệu và bộ sưu tập trong phiên bản cục bộ đang chạy trên cổng mặc định 27017, hãy sử dụng mongodump
lệnh không có bất kỳ đối số nào.
mongodump
Chạy đoạn mã trên kết xuất tất cả cơ sở dữ liệu vào một thư mục có tên là dump/
.
Lưu ý rằng nó loại trừ local
và config
cơ sở dữ liệu.
Cũng lưu ý rằng mongodump
chỉ chụp các tài liệu trong cơ sở dữ liệu. Khi bạn khôi phục, mongorestore
hoặc mongod
phải xây dựng lại các chỉ mục sau khi khôi phục dữ liệu.
Đây là giao diện của các tệp trong dump/
thư mục.
tree dump
Kết quả:
dump ├── PetHotel │ ├── employees.bson │ ├── employees.metadata.json │ ├── owners.bson │ ├── owners.metadata.json │ ├── pets.bson │ ├── pets.metadata.json │ ├── pettypes.metadata.json │ ├── players.bson │ ├── players.metadata.json │ ├── scores.bson │ ├── scores.metadata.json │ ├── students.bson │ └── students.metadata.json ├── admin │ ├── system.users.bson │ ├── system.users.metadata.json │ ├── system.version.bson │ └── system.version.metadata.json └── krankykranes ├── employees.bson ├── employees.metadata.json ├── products.bson └── products.metadata.json
Các tệp đó rõ ràng là dành riêng cho cài đặt MongoDB của tôi, chứa cơ sở dữ liệu thử nghiệm. Trong trường hợp của tôi, 3 cơ sở dữ liệu đã bị hủy:PetHotel
, admin
và krankykranes
.
Sao lưu đến một vị trí cụ thể
Bạn có thể sử dụng --out
hoặc -o
để chỉ định một vị trí để đặt các tệp cho cơ sở dữ liệu được kết xuất.
Ví dụ:
mongodump --out=data/backups/
Hoặc:
mongodump -o=data/backups/
Trong trường hợp này, mỗi thư mục cơ sở dữ liệu được xuất trực tiếp vào data/backups/
thư mục (tức là không có /dump/
thư mục).
Sao lưu một cơ sở dữ liệu cụ thể
Bạn có thể sử dụng --db
để chỉ định một cơ sở dữ liệu để sao lưu.
mongodump --db=krankykranes
Điều này kết xuất krankykranes
cơ sở dữ liệu đến dump/
mặc định thư mục.
Sao lưu một bộ sưu tập cụ thể
Bạn có thể sử dụng --collection
hoặc -c
để chỉ định một bộ sưu tập để sao lưu.
Ví dụ:
mongodump --db=krankykranes --collection=products
Hoặc:
mongodump --db=krankykranes -c=products
Điều này kết xuất products
bộ sưu tập vào dump/krankykranes
thư mục.
Loại trừ Bộ sưu tập
Bạn cũng có thể sử dụng --excludeCollection
để chỉ định một tập hợp cụ thể để loại trừ khỏi bản sao lưu (tức là không bao gồm trong bản sao lưu).
Ví dụ:
mongodump --db=PetHotel --excludeCollection=employees
Thao tác này hủy tất cả các bộ sưu tập từ PetHotel
cơ sở dữ liệu ngoại trừ employees
bộ sưu tập.
Để loại trừ nhiều bộ sưu tập, hãy sử dụng một --excludeCollection
riêng biệt cho mỗi bộ sưu tập mà bạn muốn loại trừ.
Ví dụ:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students
Điều đó không bao gồm employees
và students
bộ sưu tập từ bản sao lưu.
Bạn cũng có thể sử dụng --excludeCollectionsWithPrefix
tham số để loại trừ các bộ sưu tập có tiền tố nhất định.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p
Điều đó kết xuất tất cả các bộ sưu tập ngoại trừ những bộ sưu tập bắt đầu bằng chữ cái p
.
Bộ sưu tập sau loại trừ tất cả các bộ sưu tập bắt đầu bằng pet
.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet
Bạn có thể sử dụng nhiều --excludeCollectionsWithPrefix
đối số để loại trừ các tập hợp có nhiều tiền tố.
Ví dụ:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p --excludeCollectionsWithPrefix=s
Nén đầu ra
Bạn có thể sử dụng --gzip
tham số để nén đầu ra.
mongodump --gzip --db=krankykranes
Thao tác này sẽ nén các tệp riêng lẻ.
tree dump
Kết quả:
dump
└── krankykranes
├── employees.bson.gz
├── employees.metadata.json.gz
├── products.bson.gz
└── products.metadata.json.gz
Chúng ta có thể thấy rằng tất cả các tệp đều có .gz
phần mở rộng.
Khi xuất ra tệp lưu trữ hoặc luồng ra tiêu chuẩn, --gzip
tùy chọn nén tệp lưu trữ hoặc dữ liệu xuất ra luồng.
Chuyển đổi Chế độ xem thành Bộ sưu tập
Bạn có thể sử dụng --viewsAsCollections
để xuất các chế độ xem chỉ đọc dưới dạng bộ sưu tập.
mongodump --db=PetHotel --viewsAsCollections
Khi bạn xuất một dạng xem dưới dạng một bộ sưu tập, mongodump
tạo tệp BSON chứa các tài liệu trong dạng xem. Nếu bạn sử dụng mongorestore
để khôi phục tệp BSON đã tạo, chế độ xem sẽ được khôi phục dưới dạng một bộ sưu tập.
Nếu không sử dụng đối số này, mongodump
xuất siêu dữ liệu của từng chế độ xem. Nếu bạn bao gồm tệp siêu dữ liệu của một chế độ xem trong mongorestore
hoạt động, chế độ xem được tạo lại.
Sử dụng --viewsAsCollections
cũng bỏ qua tất cả các bộ sưu tập tiêu chuẩn. Do đó, khi tôi chạy đoạn mã trên, dump/
của tôi cấu trúc thư mục trông như thế này:
tree dump
Kết quả:
dump
└── PetHotel
├── pettypes.bson
└── pettypes.metadata.json
Trong PetHotel
của tôi cơ sở dữ liệu, tôi có một dạng xem được gọi là pettypes
. Khi tôi xuất nó dưới dạng một chế độ xem, chỉ siêu dữ liệu được xuất. Nhưng khi tôi chuyển đổi nó thành một bộ sưu tập, thì pettypes.bson
tệp được tạo sẽ không có ở đó nếu tôi đã xuất chế độ xem dưới dạng một chế độ xem.
Đây là điều sẽ xảy ra nếu tôi xuất chế độ xem đó mà không chuyển đổi nó thành một bộ sưu tập.
mongodump --db=PetHotel --collection=pettypes
Sau đó chạy lệnh tree để lấy cấu trúc thư mục.
tree dump
Kết quả:
dump └── PetHotel └── pettypes.metadata.json
Vì vậy, chúng ta có thể thấy rằng chỉ siêu dữ liệu cho chế độ xem mới bị loại bỏ.
Chế độ yên lặng
Bạn có thể sử dụng --quiet
để giới hạn đầu ra trong cửa sổ Terminal hoặc Command Prompt của bạn.
mongodump --quiet
Nếu không sử dụng điều này, bạn có thể sẽ thấy một danh sách lớn các chế độ xem, bộ sưu tập, v.v. được sao lưu.
Chế độ chi tiết
Mặt khác, bạn có thể sử dụng --verbose
hoặc -v
tham số để tăng đầu ra trong cửa sổ Terminal hoặc Command Prompt của bạn.
mongodump --verbose
Bạn có thể tăng độ chi tiết bằng cách lặp lại -v
tạo nhiều lần.
Ví dụ:
mongodump -vvvv
Việc chạy điều đó trên hệ thống của tôi đã làm tăng đáng kể tính chi tiết.
Kết quả truy vấn sao lưu
Bạn có thể sử dụng --query
hoặc -q
tham số để kết xuất kết quả của một truy vấn.
Ví dụ:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'
Khi thực hiện việc này, hãy đặt truy vấn bằng các dấu ngoặc kép. Bạn có thể sử dụng dấu ngoặc kép cho các trường.
Lưu trữ &Đầu ra chuẩn
Bạn có thể sử dụng --archive
hoặc tham số để ghi đầu ra vào tệp lưu trữ được chỉ định hoặc, nếu tệp lưu trữ không được chỉ định, vào đầu ra chuẩn (stdout
) luồng để bạn có thể chuyển sang quy trình khác.
Ví dụ về xuất ra tệp lưu trữ:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel
Trong ví dụ tiếp theo, tôi ghi vào luồng đầu ra tiêu chuẩn, sau đó chuyển đến mongorestore
:
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'
Điều đó dẫn đến một bộ sưu tập mới có tên là dogs
xuất hiện trong PetHotel
cơ sở dữ liệu (và bộ sưu tập chỉ chứa các tài liệu có loại type
trường có giá trị là dogs
).
Kiểm soát truy cập
Các ví dụ trước được thực hiện trên máy cục bộ bằng cách sử dụng cổng mặc định. Điều này có nghĩa là chúng tôi có thể chạy mongodump
mà không chỉ định những thứ như --host
, --port
, --username
, v.v.
Dưới đây là một ví dụ sử dụng các tham số đó để xác thực là homer
:
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30
Chúng tôi cũng có thể đã sử dụng --password
nhưng chúng tôi đã không làm như vậy. Nếu bạn vượt qua --user
nhưng không phải --password
, bạn sẽ được nhắc nhập mật khẩu.
Thông tin thêm về mongodump
mongodump
tiện ích chấp nhận nhiều tham số hữu ích khác và cũng có nhiều yếu tố khác nhau cần xem xét khi sử dụng nó như một phần của chiến lược sao lưu và phục hồi.
Xem mongodump
tài liệu trên trang web MongoDB để biết thêm thông tin.
Các tùy chọn khác
mongodump
và mongorestore
là các công cụ đơn giản và hiệu quả để sao lưu và khôi phục các triển khai MongoDB nhỏ, nhưng không lý tưởng để sao lưu các hệ thống lớn hơn.
Xem Phương pháp sao lưu MongoDB trên trang web MongoDB để biết các phương pháp khác để sao lưu cơ sở dữ liệu MongoDB của bạn.