TopDev

tool backup MySQL database hàng ngày đơn giản viết bằng Bash script trên Linux

minhu 📖 2 phút đọc 💬 1 phản hồi

Dưới đây là một tool backup MySQL database hàng ngày đơn giản viết bằng Bash script trên Linux. Script này sẽ:

  • Tự động backup tất cả các database hoặc một database cụ thể.

  • Lưu file backup theo ngày (YYYY-MM-DD).

  • Xóa các bản backup cũ hơn 7 ngày để tiết kiệm dung lượng.



🔧 1. Tạo file script: mysql_backup.sh#

` #!/bin/bash

Cấu hình

DB_USER="root" DB_PASSWORD="your_password" DB_NAME="your_database" # Để backup tất cả DB, thay bằng --all-databases BACKUP_DIR="/var/backups/mysql" DATE=$(date +%F) RETENTION_DAYS=7

Tạo thư mục backup nếu chưa tồn tại

mkdir -p "$BACKUP_DIR"

Tên file backup

BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

Thực hiện backup

mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"

Ghi log

echo "[$(date)] Backup completed: $BACKUP_FILE"

Xoá các file backup cũ hơn RETENTION_DAYS

find "$BACKUP_DIR" -name "*.sql.gz" -type f -mtime +$RETENTION_DAYS -exec rm {} ; `



2. Cấp quyền thực thi#

chmod +x mysql_backup.sh



🕒 3. Thiết lập cron job để chạy hàng ngày (ví dụ: 2 giờ sáng)#

Chạy lệnh sau:

crontab -e

Thêm dòng:

0 2 * * * /path/to/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1



📝 Ghi chú:#

  • Thay your_password, your_database/path/to/mysql_backup.sh theo thực tế.

  • Nếu muốn backup toàn bộ database, thay dòng:

mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"

bằng:

mysqldump -u "$DB_USER" -p"$DB_PASSWORD" --all-databases | gzip > "$BACKUP_FILE"



1 phản hồi

  1. minhu #1

    Lỗi Permission denied nghĩa là file remote_mysql_backup.sh chưa có quyền thực thi. Để sửa lỗi này, bạn chỉ cần cấp quyền thực thi cho file:



    Cách khắc phục#

    Chạy lệnh:

    chmod +x /opt/backup/remote_mysql_backup.sh

    Sau đó chạy lại:

    ./remote_mysql_backup.sh



    📌 Kiểm tra nếu vẫn lỗi#

    Nếu vẫn lỗi sau khi đã chmod, hãy đảm bảo:

    • Bạn đang trong đúng thư mục:

    cd /opt/backup

    • File tồn tại và có đúng tên:

    ls -l remote_mysql_backup.sh

    Kết quả nên có dòng như:

    -rwxr-xr-x 1 root root 1234 May 13 15:00 remote_mysql_backup.sh



    Nếu bạn vẫn gặp vấn đề, hãy copy nội dung file hoặc chụp lại ls -l trong thư mục đó, mình sẽ hỗ trợ cụ thể hơn.

Bài liên quan trong #Shell

✓ Đã sao chép link