MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sao lưu cơ sở dữ liệu MongoDB bằng mongodump

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ừ localconfig 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 , adminkrankykranes .

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 employeesstudents 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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Mối quan hệ một đến nhiều

  2. Tôi có thể sửa đổi chỉ mục hiện có trong MongoDB mà không làm rơi nó không?

  3. MongooseError [MongooseServerSelectionError]:kết nối <monitor> với 52.6.250.237:27017 đã đóng

  4. ScaleGrid thông báo lưu trữ MongoDB được chia sẻ trên Amazon AWS

  5. Nhận phần trăm với MongoDB tổng hợp $ nhóm