Chuyển tới nội dung chính

📦 Backup MongoDB với Telegram Notification

MongoDB Backup

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 PatternMô Tả
0 */6 * * *Mỗi 6 giờ chạy 1 lần
0 3 * * 13AM mỗi thứ Hai hàng tuần
@dailyHà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

  1. Authentication Failed:

    mongodump: error: Authentication failed

    Giải pháp: Kiểm tra lại password và authentication database

  2. 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ũ

  3. 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

  1. 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
  2. Mã Hóa Backup:

    # Sử dụng openssl để mã hóa
    openssl enc -aes-256-cbc -salt -in backup.gz -out backup.enc
  3. 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

7. Tài Nguyên Hữu Ích

🔄 Backup Flow Diagram