📦 Backup MongoDB với Telegram Notification
1. Cài Đặt Công Cụ Cần Thiết
1.1. Cài telegram-send
pip3 install telegram-send
telegram-send --configure
1.2. Tạo Thư Mục Backup
sudo mkdir -p /opt/backupdb-mongo
sudo chown $(whoami):$(whoami) /opt/backupdb-mongo
2. Phương Pháp Backup
2.1. Backup Dạng Thư Mục (Multiple Files)
mongodump --host mongodb.example.com \
--port 27017 \
--username admin \
--password "YourSecurePassword" \
--authenticationDatabase admin \
-d mydatabase \
--gzip \
--out /opt/backupdb-mongo/$(date '+%d_%m_%Y')-mydatabase
Ưu điểm:
- Dễ restore từng collection riêng lẻ
- Phù hợp cho database lớn cần backup tăng dần
2.2. Backup Dạng File Đơn (Archive)
mongodump --host localhost \
-d mydatabase \
--gzip \
--archive=/opt/backupdb-mongo/$(date '+%d_%m_%Y')-mydatabase.gz
Ưu điểm:
- File duy nhất dễ quản lý
- Nén tốt hơn, tiết kiệm 30-40% dung lượng
3. Tự Động Hóa với Cron
3.1. Tạo Script Backup
/opt/scripts/mongo-backup.sh
:
#!/bin/bash
# Config section
BACKUP_DIR="/opt/backupdb-mongo"
DB_NAME="mydatabase"
MAX_DAYS=7
TIMESTAMP=$(date '+%d_%m_%Y-%H%M')
# Backup command
mongodump -d $DB_NAME \
--gzip \
--archive=$BACKUP_DIR/${TIMESTAMP}-$DB_NAME.gz
# Check result and send notification
if [ $? -eq 0 ]; then
telegram-send "✅ [$DB_NAME] Backup succeeded!
📂 Size: $(du -sh $BACKUP_DIR/${TIMESTAMP}-$DB_NAME.gz | cut -f1)
🕒 Time: $(date '+%H:%M %d-%m-%Y')"
else
telegram-send "❌ [$DB_NAME] Backup FAILED!
🚨 Check server immediately!
🕒 Time: $(date '+%H:%M %d-%m-%Y')"
fi
# Cleanup old backups
find $BACKUP_DIR -name "*.gz" -type f -mtime +$MAX_DAYS -delete
3.2. Cấp Quyền Thực Thi
chmod +x /opt/scripts/mongo-backup.sh
3.3. Cấu Hình Cron Job
crontab -e
Thêm các dòng:
# Backup hàng ngày lúc 2:00 AM
0 2 * * * /opt/scripts/mongo-backup.sh >/dev/null 2>&1
# Xoay log MongoDB hàng tuần
@weekly sudo logrotate -vf /etc/logrotate.d/mongod
4. Giải Thích Cron Job
4.1. Cú Pháp Cron
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── Day of week (0 - 6) (0 is Sunday)
│ │ │ └──── Month (1 - 12)
│ │ └────── Day of month (1 - 31)
│ └──────── Hour (0 - 23)
└────────── Minute (0 - 59)
4.2. Ví Dụ Cấu Hình
Cron Pattern | Mô Tả |
---|---|
0 */6 * * * | Mỗi 6 giờ chạy 1 lần |
0 3 * * 1 | 3AM mỗi thứ Hai hàng tuần |
@daily | Hàng ngày 00:00 |
5. Xử Lý Sự Cố Thường Gặp
5.1. Kiểm Tra Trạng Thái Backup
# Xem lịch sử cron
grep CRON /var/log/syslog
# Kiểm tra dung lượng backup
watch -n 60 du -sh /opt/backupdb-mongo/*
5.2. Lỗi Thường Gặp
-
Authentication Failed:
mongodump: error: Authentication failed
Giải pháp: Kiểm tra lại password và authentication database
-
Disk Full:
write error: No space left on device
Giải pháp: Tăng dung lượng ổ đĩa hoặc xóa backup cũ
-
Connection Refused:
Failed: can't create session: could not connect to server: connection refused
Giải pháp: Kiểm tra trạng thái MongoDB service
6. Best Practices
-
Test Restore:
mongorestore --gzip --archive=/path/to/backup.gz
- Thực hiện ít nhất mỗi tháng 1 lần
- Kiểm tra tính toàn vẹn dữ liệu
-
Mã Hóa Backup:
# Sử dụng openssl để mã hóa
openssl enc -aes-256-cbc -salt -in backup.gz -out backup.enc -
Monitoring:
- Thiết lập cảnh báo qua Telegram khi:
- Dung lượng ổ đĩa > 90%
- Backup failed 3 lần liên tiếp
- Kích thước backup giảm đột ngột
- Thiết lập cảnh báo qua Telegram khi: