Một số tùy chọn tôi đã thử bao gồm chỉ chụp ảnh nhanh hàng ngày với mongodump hoặc lưu trữ các khác biệt gia tăng của điều này với sự trùng lặp. Tuy nhiên, với tập dữ liệu của tôi là vài trăm GB, các phương pháp này quá chậm
Sao lưu MMS sẽ là giải pháp hoàn hảo. Thật không may, tôi không thể lưu trữ các bản sao lưu ở Hoa Kỳ do các quy định về quyền riêng tư, vì vậy tôi đang tìm thứ gì đó chạy tại chỗ. Tôi đang cân nhắc tùy chọn MMS tại chỗ nhưng cũng muốn xem xét các tùy chọn khác
Tôi đang xem xét viết kịch bản một giải pháp sao lưu các kết xuất/ảnh chụp nhanh định kỳ, sau đó liên tục lưu oplog. Một cách tiếp cận như thế này sẽ làm việc?
1. Chụp nhanh hàng tuần với mongodump --oplog
2. Mỗi giờ (giả sử oplog luôn có hơn một giờ thay đổi), kết xuất tất cả dữ liệu mới từ oplog với nội dung như thế này
mongodump -d local -c oplog. rs --query "{ts. { "$gt". { "$dấu thời gian". {"t". (dấu thời gian ở đây) } } }}"
Sẽ phải cẩn thận để theo dõi dấu thời gian được nhìn thấy lần cuối và cũng như không có khoảng trống trong oplog
3. Di chuyển các tệp này đến một số vị trí sao lưu ngoại vi
1. Thực hiện kết xuất đầy đủ mới nhất và khôi phục bằng mongorestore --oplogReplay
2. Đối với mỗi kết xuất oplog sau đó (theo thứ tự)
một. Đặt oplog vào một thư mục trống, nói "oplog-n", như oplog. bson (thay vì local/oplog. rs. bson)
b. Khôi phục oplog với mongorestore --oplogReplay "oplog-n"
* Có thể đạt được khôi phục tại thời điểm bằng cách sử dụng tùy chọn --oplogLimit
* Việc khôi phục có thể được thực hiện bằng một lệnh mongorestore duy nhất bằng cách nối oplog. bson (có thể cần cẩn thận để làm cho định dạng hợp lệ)
Phương pháp này có hiệu quả không?
Tôi biết về dự án Tarja, dự án này hoạt động tương tự. Tuy nhiên, tôi sẽ cảm thấy thoải mái hơn khi chỉ sử dụng các lệnh MongoDB tiêu chuẩn và một số tập lệnh giống như bash
Sao lưu cơ sở dữ liệu là một trong những quy trình quan trọng nhất đối với bất kỳ quản trị viên cơ sở dữ liệu hoặc hệ thống nào. Sao lưu cơ sở dữ liệu là bản sao dữ liệu từ cơ sở dữ liệu giúp tái sử dụng cơ sở dữ liệu trong trường hợp có bất kỳ sự cố mất mát nào xảy ra
Sao lưu và khôi phục cơ sở dữ liệu MongoDB rất quan trọng khi bạn muốn di chuyển cơ sở dữ liệu của mình sang một máy chủ khác hoặc chuyển sang MongoDB. MongoDB đi kèm với lệnh mongodump và mongorestore để sao lưu và khôi phục cơ sở dữ liệu. Nó là một công cụ rất đơn giản và mạnh mẽ để thực hiện quá trình sao lưu và phục hồi trên các máy chủ trực tiếp một cách hiệu quả
Mongodump là công cụ sao lưu để tạo bản xuất nhị phân nội dung của cơ sở dữ liệu. Nó có thể xuất dữ liệu từ các triển khai cụm độc lập, bản sao và cụm được chia sẻ
Mongorestore là một công cụ khôi phục cơ sở dữ liệu tải dữ liệu từ kết xuất cơ sở dữ liệu nhị phân được tạo bởi mongodump hoặc đầu vào tiêu chuẩn vào một cá thể mongod hoặc mongos
Hướng dẫn này sẽ chỉ cho bạn cách sao lưu và khôi phục cơ sở dữ liệu MongoDB
Mục lục
Yêu cầu
Một máy chủ chạy hệ điều hành Linux có cài đặt MongoDB
Mật khẩu gốc được thiết lập trên máy chủ của bạn
Cú pháp cơ bản
Cú pháp cơ bản của lệnh mongodump được hiển thị bên dưới
mongodump --host [host-name] --username [username] --password [password] --port [port-number] --db [database-name] --out [backup-directory]
Một lời giải thích ngắn gọn về từng tùy chọn được hiển thị bên dưới
--chủ nhà. Chỉ định tên máy chủ hoặc địa chỉ IP của máy chủ cơ sở dữ liệu
--tên tài khoản. Chỉ định tên người dùng cơ sở dữ liệu
--mật khẩu mở khóa. Chỉ định mật khẩu của người dùng cơ sở dữ liệu
--Hải cảng. Chỉ định số cổng của phiên bản MongoDB
--db. Chỉ định tên cơ sở dữ liệu bạn muốn sao lưu
--ngoài. Chỉ định vị trí của đường dẫn sao lưu
Cú pháp cơ bản của lệnh mongorestore được hiển thị bên dưới
mongorestore --host [host-name] --username [username] --password [password] --port [port-number] --db [database-name] --drop [backup-location]
Ở đâu
--drop được sử dụng để xóa cơ sở dữ liệu nếu nó đã tồn tại
Cách sao lưu cơ sở dữ liệu MongoDB
Phần này sẽ chỉ ra cách sao lưu một và nhiều cơ sở dữ liệu trên máy chủ cục bộ và máy chủ từ xa trong MongoDB
Sao lưu một cơ sở dữ liệu duy nhất
Bạn có thể sử dụng lệnh mongodump để sao lưu một hoặc toàn bộ cơ sở dữ liệu. Ví dụ: để sao lưu một cơ sở dữ liệu có tên testdb và lưu bản sao lưu bên trong thư mục /opt trên máy chủ cục bộ, hãy chạy lệnh sau
mongodump --db testdb --out /opt/
Lệnh trên sẽ sao lưu cơ sở dữ liệu testdb và tạo một thư mục có tên cơ sở dữ liệu bên trong thư mục /opt
Sao lưu một bộ sưu tập duy nhất
Bạn cũng có thể sao lưu một bộ sưu tập từ cơ sở dữ liệu bằng cách chỉ định tùy chọn --collection bằng lệnh mongodump
Ví dụ: để sao lưu một bộ sưu tập có tên là bộ sưu tập thử nghiệm từ cơ sở dữ liệu testdb, hãy chạy lệnh sau
mongodump --collection testcollection --db testdb --out /opt/
mongodump Tất cả cơ sở dữ liệu
Để sao lưu tất cả cơ sở dữ liệu MongoDB, bạn không cần chỉ định bất kỳ tên cơ sở dữ liệu nào bằng lệnh mongodump
Bạn có thể chạy lệnh sau để sao lưu tất cả cơ sở dữ liệu MongoDB và lưu bản sao lưu bên trong thư mục /mnt
Lệnh này sẽ sao lưu tất cả cơ sở dữ liệu MongoDB và lưu nó trong thư mục /mnt
Sao lưu cơ sở dữ liệu từ xa
Để sao lưu cơ sở dữ liệu từ máy chủ MongoDB từ xa. Bạn sẽ cần chỉ định địa chỉ IP và cổng của máy chủ MongoDB từ xa. Bạn cũng sẽ cần định cấu hình MongoDB để cho phép kết nối từ xa
Ví dụ: để sao lưu một cơ sở dữ liệu có tên remotedb từ máy chủ MongoDB từ xa (192. 168. 0. 101), hãy chạy lệnh sau
mongodump --host 192.168.0.101 --port 27017 --username admin --password yourpassword --db remotedb --out /opt/
Ở đâu
192. 168. 0. 101 là địa chỉ IP của máy chủ MongoDB từ xa, 27017 là số cổng MongoDB, admin là tên người dùng cơ sở dữ liệu, yourpassword là mật khẩu của người dùng quản trị và remotedb là tên của cơ sở dữ liệu mà bạn muốn sao lưu
Cách khôi phục cơ sở dữ liệu MongoDB
Phần này sẽ chỉ cho bạn cách khôi phục một và nhiều cơ sở dữ liệu trên máy chủ cục bộ và máy chủ từ xa
Khôi phục một cơ sở dữ liệu duy nhất
Bạn có thể dễ dàng sử dụng lệnh mongorestore làm lệnh khôi phục MongoDB trên một cơ sở dữ liệu bằng cách sử dụng bản sao lưu mà chúng tôi đã tạo trước đó
Ví dụ: để khôi phục một bản sao lưu cơ sở dữ liệu có tên testdb , hãy chạy lệnh sau
mongorestore --db testdb --drop /opt/testdb
Lệnh này sẽ khôi phục cơ sở dữ liệu testdb từ thư mục /opt/testdb
Khôi phục tất cả cơ sở dữ liệu
Để khôi phục tất cả cơ sở dữ liệu MongoDB, bạn không cần chỉ định tùy chọn --db. Bạn có thể khôi phục tất cả cơ sở dữ liệu bằng cách chạy lệnh sau
Thao tác này sẽ khôi phục tất cả cơ sở dữ liệu MongoDB từ bản sao lưu bên trong thư mục /opt
Khôi phục cơ sở dữ liệu từ xa
Bạn có thể khôi phục cơ sở dữ liệu MongoDB bằng cách chỉ định tham số --host và --port bằng lệnh mongorestore
Ví dụ: để khôi phục bản sao lưu từ cơ sở dữ liệu duy nhất có tên remotedb trên máy chủ MongoDB từ xa (192. 168. 0. 101), hãy chạy lệnh sau
mongorestore --host 192.168.0.101 --port 27017 --username admin --password yourpassword --db remotedb --drop /opt/remotedb
Tự động sao lưu cơ sở dữ liệu MongoDB với Cron
Thường xuyên dọn dẹp cơ sở dữ liệu MongoDB là một cách làm tốt cho bất kỳ quản trị viên hệ thống nào. Ví dụ: bạn có thể tạo tập lệnh sao lưu cơ sở dữ liệu và lên lịch cho nó bằng Cron job
Bạn có thể tạo tập lệnh sao lưu bằng lệnh sau
Thêm các dòng sau
#!/bin/bash TODAY=`date +%d%b%Y` BACKUPDIR=/backup/mongo mkdir -p ${BACKUPDIR}/${TODAY} mongodump --host localhost --db testdb --out ${BACKUPDIR}/${TODAY}/
Lưu và đóng tệp, sau đó tạo một công việc định kỳ để chạy tập lệnh trên hàng ngày vào lúc 10 giờ sáng
Thêm các dòng sau
________số 8Lưu và đóng tệp khi bạn hoàn tất
Phần kết luận
Hướng dẫn trên đã hướng dẫn bạn cách sao lưu và khôi phục cơ sở dữ liệu MongoDB bằng tiện ích dòng lệnh mongodump và mongorestore. Tôi hy vọng những công cụ này sẽ giúp bạn thực hiện quy trình hàng ngày của mình
Nếu bạn không muốn quản lý việc này, hãy xem Giải pháp sao lưu MongoDB của chúng tôi
Mongodump có khóa cơ sở dữ liệu không?
Mongodump không khóa cơ sở dữ liệu. Bạn có thể đọc và ghi tệp dễ dàng
Chúng tôi có thể thực hiện sao lưu gia tăng trong MongoDB không?
Có, bạn có thể thực hiện cả sao lưu toàn bộ và sao lưu gia tăng với sự trợ giúp của Mongobackup, một công cụ bên ngoài của MongoDB. Sao lưu toàn bộ sẽ được thực hiện bởi dbPath trong hệ thống tệp, trong khi sao lưu gia tăng sẽ được thực hiện bằng kết xuất oplog một phần
Làm thế nào bạn có thể xác định tính nguyên tử trong cơ sở dữ liệu?
Nó được gọi là tính nguyên tử khi nhiều hoạt động được nhóm thành một thực thể logic duy nhất. Ví dụ: nếu bạn muốn cập nhật ba cơ sở dữ liệu trong một hành động logic đơn lẻ, bạn có thể gọi đó là tính nguyên tử