Backup và Restore MySQL Tự Động Bằng Script

09/03/2026 P T P Chung 6 phút đọc 0 bình luận

Tại sao cần backup MySQL tự động?

Mất dữ liệu có thể xảy ra bất cứ lúc nào - từ lỗi phần cứng, xung đột phần mềm, đến sai sót của con người. Với cơ sở dữ liệu, hậu quả có thể nghiêm trọng hơn: mất doanh thu, ảnh hưởng trải nghiệm khách hàng, thậm chí vi phạm quy định bảo mật. Việc sao lưu thủ công dễ bị quên, không đều đặn và mất thời gian. Giải pháp tối ưu là tự động hóa toàn bộ quy trình sao lưu và khôi phục, giúp bạn luôn có bản dự phòng mới nhất và khôi phục nhanh chóng khi cần.

Các phương pháp backup MySQL

MySQL cung cấp nhiều cách để sao lưu:

- mysqldump: Công cụ dòng lệnh tạo file SQL chứa toàn bộ cấu trúc và dữ liệu. Phù hợp cho mọi quy mô, dễ khôi phục. - Backup vật lý (sao lưu file data): Nhanh hơn, phù hợp database lớn, nhưng cần MySQL ngừng hoạt động hoặc lock table. - Replication: Dùng slave làm bản sao real-time, nhưng không thay thế backup vì vẫn có thể bị hỏng đồng bộ.

Với backup tự động bằng script, mysqldump là lựa chọn phổ biến nhất nhờ tính đơn giản và tương thích cao.

Thiết kế script backup tự động

Một script backup hoàn chỉnh cần đảm bảo:

- Kết nối MySQL an toàn (username/password hoặc file config). - Tự động đặt tên file theo ngày/giờ để tránh ghi đè. - Nén kết quả (gzip/tar) để tiết kiệm không gian. - Xóa file cũ theo chính sách giữ bản backup (ví dụ: 7 ngày). - Ghi log để dễ dàng kiểm tra lỗi. - Gửi thông báo (email/SMS) khi có sự cố.

Ví dụ script bash cho Linux

#!/bin/bash
# Script backup MySQL tự động

DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backup/mysql" DB_NAME="your_database" DB_USER="your_user" DB_PASS="your_password"

# Tạo thư mục nếu chưa có mkdir -p $BACKUP_DIR

# Thực hiện backup mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME-$DATE.sql.gz

# Xóa backup cũ (giữ 7 ngày) find $BACKUP_DIR -name "$DB_NAME-*.sql.gz" -mtime +7 -delete

# Ghi log echo "$(date): Backup completed - $DB_NAME-$DATE.sql.gz" >> $BACKUP_DIR/backup.log

Quảng cáo

300x250 In-Content Advertisement

Giải thích từng bước

1. Đặt biến môi trường: DATE để timestamp, BACKUP_DIR là nơi lưu, DB_* chứa thông tin kết nối. 2. Tạo thư mục: mkdir -p đảm bảo thư mục tồn tại. 3. Chạy mysqldump: Output được pipe vào gzip để nén ngay lập tức. 4. Xoá cũ: find tìm các file cũ hơn 7 ngày và xóa. 5. Ghi log: Append vào file log để theo dõi.

Lên lịch chạy tự động

Dùng cronjob để chạy script hàng ngày:

# Mở crontab
crontab -e

# Thêm dòng sau (0h30 mỗi ngày) 30 0 * /path/to/backup_script.sh

Quy trình restore

Khi cần khôi phục:

# Giải nén
gunzip < backup.sql.gz > backup.sql

# Khôi phục vào MySQL mysql -u$username -p$password $database < backup.sql

Hoặc restore trực tiếp từ file nén:

gunzip < backup.sql.gz | mysql -u$username -p$password $database

Nâng cao: xác thực, nhiều database, gửi mail

- Xác thực: Kiểm tra exit code của mysqldump, nếu khác 0 thì gửi cảnh báo. - Nhiều database: Dùng --all-databases hoặc loop qua danh sách. - Gửi mail: Dùng mail command hoặc tích hợp với dịch vụ bên ngoài.

Kết luận

Backup tự động không chỉ giúp bạn yên tâm về dữ liệu mà còn tiết kiệm thời gian, giảm rủi ro mất mát. Bắt đầu với script đơn giản, kiểm tra kỹ trước khi áp dụng vào môi trường sản xuất, và luôn lưu trữ bản backup ở nơi an toàn (cả local và offsite/cloud). Với sự chuẩn bị này, bạn sẽ sẵn sàng ứng phó mọi sự cố mà không hoang mang.

Quảng cáo

728x90 Bottom Advertisement

Thay thế bằng mã Google AdSense

Chia sẻ bài viết

Facebook Twitter

Bình luận

Chia sẻ ý kiến của bạn về bài viết này

Viết bình luận

Bình luận của bạn sẽ được kiểm duyệt trước khi hiển thị

Chưa có bình luận nào

Hãy là người đầu tiên bình luận về bài viết này!