Cron job trên VPS Linux: đặt lịch chạy lệnh và tự động sao lưu cơ sở dữ liệu
Cron job trên VPS Linux cho phép chạy lệnh tự động theo lịch: sao lưu cơ sở dữ liệu mỗi đêm, dọn file tạm, gọi script định kỳ. Bài viết giải thích cú pháp crontab dễ hiểu và hướng dẫn tự động sao lưu MySQL/MariaDB, tự xoá bản cũ để không đầy ổ.
Cú pháp crontab
Mỗi dòng gồm 5 trường thời gian và lệnh cần chạy:
phút giờ ngày tháng thứ lệnh
* * * * * /đường/dẫn/lệnh
| Ví dụ | Ý nghĩa |
|---|---|
*/5 * * * * | Mỗi 5 phút |
0 * * * * | Đầu mỗi giờ |
30 2 * * * | 2 giờ 30 sáng mỗi ngày |
0 3 * * 0 | 3 giờ sáng Chủ nhật hằng tuần |
0 4 1 * * | 4 giờ sáng ngày 1 mỗi tháng |
Cron chạy theo múi giờ của VPS. Kiểm tra bằng timedatectl, đổi sang giờ Việt Nam bằng timedatectl set-timezone Asia/Ho_Chi_Minh.
Sửa và xem crontab
crontab -e # sửa lịch của tài khoản hiện tại
crontab -l # xem lịch hiện có
Lần đầu chạy crontab -e, hệ thống hỏi chọn trình soạn thảo, chọn nano cho dễ dùng.
Tự động sao lưu MySQL / MariaDB
1. Lưu thông tin đăng nhập an toàn
Không ghi mật khẩu thẳng vào lệnh cron. Tạo file chỉ root đọc được:
nano /root/.my.cnf
[client]
user=root
password=MatKhauCSDL
chmod 600 /root/.my.cnf
2. Viết script sao lưu
mkdir -p /root/backup
nano /root/backup-db.sh
#!/bin/bash
DIR=/root/backup
DATE=$(date +%F-%H%M)
for DB in $(mysql -N -e "SHOW DATABASES" | grep -Ev "^(information_schema|performance_schema|mysql|sys)$"); do
mysqldump --single-transaction --routines "$DB" | gzip > "$DIR/$DB-$DATE.sql.gz"
done
# chỉ giữ bản sao lưu 7 ngày gần nhất
find "$DIR" -name "*.sql.gz" -mtime +7 -delete
chmod 700 /root/backup-db.sh
/root/backup-db.sh && ls -lh /root/backup
--single-transaction giúp sao lưu bảng InnoDB mà không khoá website trong lúc chạy.
3. Đặt lịch chạy mỗi đêm
30 2 * * * /root/backup-db.sh >> /var/log/backup-db.log 2>&1
Ghi log giúp bạn biết lần chạy nào bị lỗi.
4. Khôi phục khi cần
gunzip < /root/backup/tencsdl-2026-11-06-0230.sql.gz | mysql tencsdl
Đừng chỉ để bản sao lưu trên chính VPS
Nếu VPS gặp sự cố hoặc bị xoá, bản sao lưu nằm cùng chỗ cũng mất theo. Hãy chép định kỳ ra nơi khác (máy tính của bạn, một VPS khác, dịch vụ lưu trữ đám mây) bằng rsync hoặc scp. Với Cloud VPS trên SuniHost, máy chủ hỗ trợ còn có tab Sao lưu để bật sao lưu tự động toàn bộ VPS, dùng kèm sao lưu cơ sở dữ liệu ở trên càng an toàn.
Lỗi thường gặp với cron
- Chạy tay được, cron thì không: cron có biến
PATHrất ngắn, hãy dùng đường dẫn đầy đủ (/usr/bin/php,/usr/bin/mysqldump; tra bằngwhich php). - Ký tự
%trong lệnh: cron hiểu%là xuống dòng, phải viết\%hoặc đưa lệnh vào script như ví dụ. - Không biết cron có chạy không: xem
grep CRON /var/log/syslog(Ubuntu, Debian).
Kết luận
Một script ngắn cộng một dòng crontab là bạn có sao lưu cơ sở dữ liệu tự động mỗi đêm. Nếu dùng hosting thay vì VPS, xem bài sao lưu và khôi phục website trên cPanel. Cần máy chủ riêng để chạy script tự do? Tham khảo Cloud VPS.
Bạn thấy bài viết này hữu ích?
Chia sẻ lên Facebook