STACKJAVA

Hướng dẫn sao lưu, khôi phục data mongo (mongodump, mongorestore)

Hướng dẫn sao lưu, khôi phục data mongo (mongodump, mongorestore)

Trong bài này mình sẽ hướng dẫn sao lưu, khôi phục data của mongodb một cách đơn giản nhất.

Ví dụ mongodump, mongorestore

Mongo hỗ trợ 2 cách để sao lưu, khôi phục data là mongodump/mongorestore với mongoimport/mongoexport tuy nhiên mongoimport/mongoexport chỉ dùng cho trường hợp data nhỏ nên ở đây mình chỉ đề cập tới mongodump/mongorestore.

1. Ví dụ mongodump

Để sao lưu data thành file .gz ta dùng câu lệnh sau:

mongodump --host={host:port} --authenticationDatabase={authenticationDatabase}  -u={username} -p={password} --db={database} --collection={collection} --archive={filename.gz} --gzip --query=<json>

(lệnh mongodump còn nhiều tùy chọn khác, tuy nhiên ở đây mình chỉ đưa ra các lựa chon đơn giản nhất để có thể sao lưu data).

Trong đó:  --host={host:port} --authenticationDatabase={authenticationDatabase} -u={username} -p={password} là thông tin của database mà bạn cần backup lại

Lưu ý: khi sử dụng --query trên window thường hay bị lỗi parse json nên người ta hay dùng --queryFile=path_file. Với path_file là đường dẫn tới file json chứa thông tin query, cách này vừa hạn chế lỗi, vừa cho phép các câu query nâng cao).

2. Ví dụ mongorestore

Để khôi phục (restore) data từ file .gz được backup bằng lệnh mongodump, ta sử dụng lệnh mongorestore với cú pháp như sau:

mongorestore --host={host:port} --authenticationDatabase={authenticationDatabase}  -u={username} -p={password} --db={database} --collection={collection}  --archive={filename.gz} --gzip

Nếu bạn ko chỉ rõ --db --collection thì nó sẽ restore lại tất cả data trong file .gz, theo đúng database name và collection name đã backup

Trường hợp tên database hoặc tên collection ở nơi bạn muốn restore khác với tên lúc backup thì ta sử dụng option --nsFrom--nsTo như sau:

mongorestore --host={host:port} --authenticationDatabase={authenticationDatabase}  -u={username} -p={password} --archive={filename.gz} --gzip --nsFrom={sourceDatabase.sourceCollection} --nsTo={destinationDatabase.destinationCollection}

Demo

Ví dụ mình muốn chuyển data từ collection fruit từ database store_1 sang collection fruit của database store_2

Thực hiện backup lại data của collection fruit của của database store_1 thành file fruit.gz

mongodump --db=store_1 -c=fruit --archive=fruit.gz --gzip

Thực hiện restore data từ file fruit.gz vào collection fruit của database store_2

mongorestore --archive=fruit.gz --gzip --nsFrom=store_1.fruit --nsTo=store_2.fruit

Kết quả:

Okay, Done!

References:

https://docs.mongodb.com/database-tools/mongodump

https://docs.mongodb.com/database-tools/mongorestore