Hướng dẫn tạo Script Backup MySQL tự động trên Linux bằng Crontab (kèm gửi Telegram)

Views: 3 06/05/2026 14:30
Hướng dẫn tạo Script Backup MySQL tự động trên Linux bằng Crontab (kèm gửi Telegram)

Việc backup database MySQL định kỳ là cực kỳ quan trọng để đảm bảo an toàn dữ liệu. Trong bài viết này, bạn sẽ học cách:

  • Backup tất cả database bằng mysqldump

  • Nén file bằng gzip

  • Tự động chạy bằng crontab

  • Gửi thông báo qua Telegram

  • Tự động xóa backup cũ

1. Tạo file script backup

Tạo file:

nano /scripts/backupmysql.sh

Dán nội dung sau:

#!/bin/bash

# Fix PATH khi chạy bằng cron
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

IPADDR=$(curl -s ifconfig.me)

# Cấu hình
backup_dir="/backupmysql"
date_format=$(date +'%d-%m-%Y')
backup_path="$backup_dir/$date_format"
max_backup_count=30

MYSQL_UNAME="root"
MYSQL_PWORD="password"

# Telegram
telegram_bot_token="YOUR_BOT_TOKEN"
telegram_chat_id="YOUR_CHAT_ID"

# Tạo thư mục backup
mkdir -p "$backup_path"

# Lấy danh sách database
databases=$(mysql -u$MYSQL_UNAME -p$MYSQL_PWORD -e "SHOW DATABASES" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")

# Đếm số DB
database_count=$(echo "$databases" | wc -l)

# Backup từng database
for db in $databases; do
    mysqldump -u$MYSQL_UNAME -p$MYSQL_PWORD "$db" | gzip > "$backup_path/$db-$date_format.sql.gz"
done

# Đếm file backup
file_count=$(find "$backup_path" -type f | wc -l)

# Nội dung gửi Telegram
message="$IPADDR - Backup MySQL %0A
Ngày: $date_format %0A
Số database: $database_count %0A
Đã backup: $file_count"

# Gửi Telegram
curl -s -X POST https://api.telegram.org/bot$telegram_bot_token/sendMessage \
-d chat_id=$telegram_chat_id \
-d text="$message" > /dev/null

# Xóa backup cũ
find "$backup_dir" -mindepth 1 -maxdepth 1 -type d -printf '%T+ %p\n' \
| sort -r \
| tail -n +$((max_backup_count+1)) \
| cut -d' ' -f2- \
| xargs rm -rf

2. Cấp quyền chạy script

chmod +x /scripts/backupmysql.sh

3. Test chạy thử

bash /scripts/backupmysql.sh

Kiểm tra:

ls /backupmysql

4. Thiết lập chạy tự động với Crontab

Mở crontab:

crontab -e

Ví dụ chạy mỗi ngày lúc 2h sáng:

0 2 * * * /scripts/backupmysql.sh

5. Lưu ý quan trọng

  • Cron có môi trường khác khi chạy tay → cần khai báo PATH

  • Nên dùng find thay vì ls để đếm file

  • Kiểm tra MySQL hoạt động trước khi backup

  • Không nên hardcode password (có thể dùng .my.cnf)

6. Mẹo nâng cao (khuyên dùng)

Dùng file .my.cnf để bảo mật

Tạo file:

nano ~/.my.cnf

Nội dung

[client]
user=root
password=yourpassword

set quyền

chmod 600 ~/.my.cnf

Sau đó bỏ -u -p trong script

Debug khi cron lỗi

Thêm vào script:

exec > /tmp/backup.log 2>&1
set -x

Chúc các bạn thành công 

backup mysql linux script backup mysql crontab linux backup mysqldump tự động backup database linux cron job mysql gửi telegram từ linux shell script backup mysql tự động backup database linux mysql backup script