Top Ad unit 728 × 90

Latest news

recent

MongoDB Backup Dùng Shell Script và Cron


Backup là một công tác rất quan trọng trong quá trình làm việc với dữ liệu. Hiện có rất nhiều các dịch vụ hay cloud cung cấp khả năng quản lý và sao lưu dữ liệu tự động, tuy nhiên đôi khi trong quá trình phát triển, hoặc tự xây dựng những ứng dụng ta vẫn có nhu cầu tự thực hiện công việc này. Bài viết đề cập một phương pháp sao lưu dùng shell script sử dụng cron của linux và những công cụ kèm theo cơ sở dữ liệu mongodb như mongodump để thực hiện sao lưu định kỳ cơ sở dữ liệu MongoDB và xóa các dữ liệu sao lưu quá cũ. Trong tình huống của mình tôi sử dụng một board Raspberry Pi 3 hoặc odroid C2 với hệ điều hành linux để chạy sao lưu. Chúng ta cũng phải cài đặt sẵn sàng bộ công cụ MongoDB Tools (bao gồm: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongoperf, mongorestore, mongostat, và mongotop) lên đó. Chú ý phiên bản MongoDB Tools cần tương đương hoặc mới hơn phiên bản cơ sở dữ liệu bạn cần sao lưu. Nếu phiên bản không tương thích bạn sẽ không thể sao lưu thành công (kết quả là thư mục trống hoặc lỗi xảy ra). Dưới đây là nội dung của script file có tên mongo_backup.sh cần tạo.

#!/bin/bash

#================================================
# Tuy theo yeu cau, thiet lap gia tri cho ca bien ben duoi
#================================================
# Ten co so du lieu can sao luu 
MONGO_DATABASE="bioz_sdss"
# Ten ung dung
APP_NAME="CUBLICK_DEV"
# Ten host dang chay dich vu co so du lieu
MONGO_HOST="104.199.170.132"
# Cong ket noi vao co so du lieu
MONGO_PORT="27017"
# duong dan toi cong cu Mongodump
MONGODUMP_PATH="/usr/bin/mongodump"
# Duong dan thu muc chua sao luu
BACKUPS_DIR="/home/odroid/workdir/backups/$APP_NAME"
# user name cua co so du lieu
DBUSERNAME="username"
# password cua co so du lieu
DBPASSWORD="passw0rd"
# Authentication database name
DBAUTHDB="admin"
# So ngay toi da sao luu 
DAYSTORETAINBACKUP="30"
#=====================================================================

TIMESTAMP=`date +%F-%H%M`
BACKUP_NAME="$APP_NAME-$TIMESTAMP"

echo "Bat dau thuc thi sao luu $MONGO_DATABASE"
echo "--------------------------------------------"
# Tao thu muc sao luu 
if ! mkdir -p $BACKUPS_DIR; then
  echo "Khong the tao thu muc sao luu tai $BACKUPS_DIR. Thoat!" 1>&2
  exit 1;
fi;
# Tao cau len sao luu
# mongo admin --eval "printjson(db.fsyncLock())"
# $MONGODUMP_PATH -v --host $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE --username $DBUSERNAME --password $DBPASSWORD --authenticationDatabase $DBAUTHDB
$MONGODUMP_PATH -v --host $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE 
# mongo admin --eval "printjson(db.fsyncUnlock())"
# Doi ten thu muc dump thanh backup name
mv dump $BACKUP_NAME
# Nen du lieu
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
# Xoa du lieu ban dau
rm -rf $BACKUP_NAME
# Xoa du lieu sao luu cu
find $BACKUPS_DIR -type f -mtime +$DAYSTORETAINBACKUP -exec rm {} +
echo "--------------------------------------------"
echo "Tien trinh sao luu du lieu hoan tat!"

để chạy script ta cần cấp quyền thực thi cho nó bằng lệnh: chmod +x mongo_backup.sh

Để script có thể được tự động thực thi ta dùng Cron. Ta cấu hình Cron bằng cách:
crontab -e

thêm đoạn code sau vào file cấu hình: 
# MongoDB Backup
00 00 * * * /path/to/script/mongo_backup.sh

lưu file bằng cách nhấn Esc và wq + Enter (giống trình soạn thảo vi). Dòng nội dung trên chỉ định Cron sẽ thực thi script mongo_backup.sh 12 giờ đêm mỗi ngày. Để có thể có chính xác cấu hình mình mong muốn chúng ta có thể tham khảo https://crontab-generator.org/ để tạo ra dòng script thích hợp. Trong nội dung mongo_backup.sh, chú ý thay đổi các giá trị biến cho thích hợp với môi trường và yêu cầu khác nhau:

MONGO_DATABASE
APP_NAME
MONGO_HOST
MONGO_PORT
MONGODUMP_PATH
BACKUPS_DIR
DBUSERNAME
DBPASSWORD
DBAUTHDB và DAYSTORETAINBACKUP

Câu lệnh tạo dump cũng cần thay đổi theo đúng trường hợp cấu hình của database bạn muốn sao lưu.



Binh Nguyen - Bioz

MongoDB Backup Dùng Shell Script và Cron Reviewed by Bioz Nguyen on 10:08:00 AM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.