Nội dung bài viết
Video học lập trình mỗi ngày
Việc backup hay restore Mongodb trên unbuntu là một việc thiết yếu, giống như việc ta ăn cơm hàng ngày. Nó quan trọng đến mức, quyết định nhiều vấn đề. Giả sử bạn một ngày bạn nhận được một lời nhắn READ_ME_TO_RECOVER_YOUR_DATA khi mở Database lên thì bạn sẽ cảm thấy thế nào. Cả thế giới sẽ sụp đổ, vì đó là một lời nhắn nhủ của hacker khi đã chiếm đoạt được DB của bạn. Tôi cũng đã bị như thế, hãy xem nội dung của hacker để lại.
{ "_id" : ObjectId("60bd9f1aae12df8ba69b6e04"), "content" : "All your data is a backed up. You must pay 0.02 BTC to 16jE6yZiZnX8enpnsdwUcxuV4NDY1NAUtL 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. In case of refusal to pay, we will contact the General Data Protection Regulation, GDPR and notify them that you store user data in an open form and is not safe. Under the rules of the law, you face a heavy fine or arrest and your base dump will be dropped from our server! You can buy bitcoin here, does not take much time to buy..." }
Chính vì vậy ngoài đảm bảo việc triển khai mongodb security
trên ubuntu thì việc backup, restore là điều quan trọng không kém. Bài viết này sẽ giúp bạn có được điều đó trong vòng 3 phút đọc.
Bạn sẽ học được gì?
Đầu tiên, bạn sẽ phải biết những vấn đề căn bản như Mongodb là gì? Biết thao tác căn bản sử dụng terminal như thế nào? Ngoài ra bạn cũng nên biết về khái niệm crontab ubuntu và cách setup một crontab như thế nào? Từ đó mới hiểu được bài viết này tốt hơn.
Sau đó bạn sẽ học nhiều điều trong bài viết này đó là cách backup, restore thủ công, và thực hiện điều tương tự trên sử dụng crontab
. Để backup dữ liệu của bạn, bạn nên sử dụng backup mongodump trong ubuntu. Để khôi phục, sử dụng mongorestore
. Hãy xem chúng hoạt động như thế nào.
Hướng dẫn backup MongoDB
Theo thói quen của cá nhân tôi thì mỗi ngày vào lúc 3 giờ sáng tôi thường cho crontab
thực hiện việc back up một cách tự động. Về cách đặt tên của folder thì tốt hơn hết sẽ là theo dd-mm-yy
là tốt nhất. Eg: 08-06-21
là chuẩn. Nhìn vào đó mình sẽ biết được dữ liệu của ngày nào, và hơn hết đó là việc xoá folder nếu như quá nhiều, chỉ vì chúng ta quan tâm đến dữ liệu gần nhất mà thôi.
Cú pháp backup sử dụng Mongodump
~ sudo mongodump --uri uridb --out /path
Trong đó:
- --uri là --uri connection string
- --out là nơi mà chứa db backup
Đi vào thực hành tôi tạo một folder như sau:
~ sudo mkdir /var/backups/mongobackups/
Sau đó tôi sẽ chạy lệnh sau để backup mongodb
Ví dụ:
~ sudo mongodump --uri="mongodump --uri="mongodb://mongos0.example.com:27017" --out /var/backups/mongobackups/`date +"%m-%d-%y"`
Sau khi chúng ta chạy thì:
~ cd /var/backups/mongobackups# ls
06-08-21
Ta thấy một folder được backup có tên là 06-08-21
. Vì sao, vì date +"%m-%d-%y"
chính là lấy thời gian hiện tại để đặt tên cho folder của chúng ta. Đó là ta chạy thủ công, còn nếu để tự động hoá quy trình trên thì phải làm thế nào? Trước đây tôi có viết một bài rất chi là chi tiết về cách chạy một file .sh
các bạn nên xem lại cách một admin chuyên nghiệp triển khai việc backup mongodump thế nào?
Theo nguyên tắc chung, bạn nên sao lưu thường xuyên, chẳng hạn như hàng ngày và tốt nhất là trong thời gian máy chủ ít chịu tải nhất. Do đó, bạn có thể đặt mongodump
như một công việccron
để nó chạy thường xuyên, ví dụ như hàng ngày lúc 00: 00 sáng. Để thực hiện crontab
này bạn có thể sử dụng cú pháp dưới đây:
~ sudo crontab -e
Rồi tạo cú pháp cho crontab như sau:
~ 0 0 * * * mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"`
Theo kinh nghiệm của tôi thì một số cú pháp ngày tháng như ate +"%m-%d-%y
sẽ không chạy được trong cron. Cho nên bạn có thể sửa lại như sau:
~ 0 0 * * * mongodump --out /var/backups/mongobackups/`date +"\%m-\%d-\%y"`
Tôi cố ý không bỏ thêm --uri
vì chắc rằng chúng ta sẽ backup hết tất cả những gì có trong db đúng không?
NOTES: Việc sử dụng crontab
rất quan trọng và nên thận trọng khi sử dụng chúng. Hãy xem qua cách Làm thế nào để setup và sử dụng crontab với Node.js và Ubuntu nếu bạn là người thận trọng.
Việc backup tự động xem như hoàn tất, còn một vấn đề đó là nếu folder được tạo tự động thì sớm muốn gì cũng làm tràn disk. Vậy phải làm sao?
Xoá folder trên ubuntu theo thời gian.
Bình thường thì tôi sẽ xoá những folder nào mà được tạo trước 7 ngày, thì cú pháp như sau:
~ find /var/backups/mongobackups/* -mtime +7 -exec rm -rf {} \;
Trong đó:
- -mtime + 7 là 7 ngày trước
- -exec rm -rf là lệnh remove folder
Ngoài ra nếu bạn muốn xoá trước số phút thì sử dụng -mmin
để thay cho -mtime
.
Còn cách sử dụng crontab
thì:
~ 0 0 * * * find /var/backups/mongobackups/* -mtime +7 -exec rm -rf {} \;
Lời kết
Chỉ cần như vậy thôi là chúng ta đã hoàn thành xong việc backup thủ công, và biết thêm một cách sử dụng crontab để backup với sự trợ giúp của mongodump
. Tiếp theo Serires - Mongodb cơ bản thì tôi sẽ tiếp tục giới thiệu về cách Làm thế nào để store mongodb. Đón chờ nhé.