backup mongodb liên tục với crontab

Bối cảnh

Hệ thống bạn đang chạy ngon lành, bỗng 1 ngày đẹp trời, ổng cứng bị hỏng, không thể phục hồi dữ liệu. Hay 1 ngày đẹp trời hơn, thằng quản trị server nó ngứa tay gõ lệnh huyền thoại sudo rm -rf /.

Tada, cả hệ thống triệu đô của bạn bốc hơi sau 1 nốt nhạc.

Bạn sẽ nghĩ ngay đến phương án backup db thường xuyên, và lưu sang chỗ khác.

Mình thường chọn phương án cứ 3 giờ, nén nén db lại rồi upload lên Google Drive.

Lên lịch làm việc bằng crontab

crontab là công cụ có sẵn trong ubuntu dùng để thực hiện những việc có tính chu kì, lặp đi lặp lại.

Để lên lịch, bạn chạy lệnh:

Sau đó đặt lịch với cú pháp:

Ví dụ:

Cứ vào 1 giờ 10 phút sáng hàng ngày, chạy file foo.sh

  • phút: 0-59
  • giờ: 0-23 (0 là nửa đêm)
  • ngày_trong_tháng: 1-31
  • tháng_trong_năm: 1-12
  • ngày_trong_tuần: 0-6 (0 là chủ nhật)
  • lệnh_được_thực_thi: thường sẽ là 1 file *.sh và được chmod 755 để cấp quyền thực thi.

Lưu ý:

  • Các tham số cách nhau bởi một khoảng trắng
  • Dấu sao * là thể hiện lặp liên tục (hàng phút, hàng giờ, hàng ngày…)
  • Mỗi tham số có thể ở dạng chuỗi, phân cách nhau bởi dấu phẩy, vd: 5,23,55 * * * * foo.sh: file foo.sh được gọi vào phút thứ 5, 23 và 55 mỗi giờ
  • Tham số có thể ở dạng chu kì đều đặn, vd: */10 * * * * foo.sh: chạy vào những phút chia hết cho 10, lệnh trên sẽ tương đương với 0,10,20,30,40,50 * * * * foo.sh
  • Bạn có thể lập nhiều lịch, mỗi lịch 1 dòng

Ok, vậy với nhu cầu ban đầu: cứ 3 tiếng chạy 1 lần, mình sẽ có cấu hình thế này:

Nếu bạn muốn tìm hiểu kỹ hơn về cron job thì xem thêm ở đây.

Sau khi lưu file lại, các cấu hình sẽ có được cài đặt vào hệ thống ngay. Bạn có thể test bằng việc cứ mỗi phút cho ghi thời gian hiện tại vào 1 file nào đó.

Grive2 – công cụ truy cập vào Google Driver

Grive2 sẽ thực hiện download/upload các file/folder ở thư mục bạn chạy lệnh grive, vậy nên tạo 1 thư mục gốc:

Login vào Goole Drive:

Terminal sẽ xuất hiện 1 link, bạn copy link này, truy cập bằng trình duyệt, Grive sẽ xin quyền truy cập vào Google Drive của bạn, sau khi cấp quyền, màn hình sẽ hiện 1 đoạn mã, copy nó và dán ngược lại terminal.
Nói thì dài dòng chứ thao tác có vài cái click là xong thôi.

Backup mongodb

Mongodb cung cấp công cụ backup db bằng lệnh mongodump:

Đơn giản, dễ hiểu đúng không?

Bây giờ xem qua 1 chút về file .backup_db.sh

Nhớ cấp quyền thực thi cho file backup nghe:

Code mình có giải thích ở trong đó hết rồi, và cơ bản là dễ hiểu mà 😛

Ở đây chỉ có 1 lưu ý dòng 27: /usr/bin/grive là đường dẫn tuyệt đối để chạy lệnh grive, bạn có thể tìm trong máy bạn:

Khi upload, grive sẽ upload hết những file/folder có trong thư mục grive của bạn (như ví dụ ở trên của mình là /home/appconus/grive).

Ok, vậy là cứ 3 tiếng 1 lần, hệ thống sẽ tự dump db của bạn, zip lại và upload lên Google Drive, đồng thời nó sẽ xoá những bản lưu cũ quá 3 ngày.

Kê cao gối ngủ được rồi nhé.

Thêm chút nữa

Ngoài Google Drive, bạn có thể chọn nhiều nhà cung cấp lưu trữ khác như Dropbox, S3, OneDrive, miễn sao có API/tool để tương tác 🙂

Bài tới mình sẽ nói về việc restore mongodb in replica set, mời các bạn đón đọc.

Lập trình và hơn thế nữa

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

Be the First to Comment!

Notify of
avatar