Lập lịch backup Daily, Weekly, Monthly bằng Tar, Rsync và Cron trên Linux

Hướng dẫn cách tự động hóa quá trình sao lưu dữ liệu hàng ngày, hàng tuần và hàng tháng trên Linux sử dụng công cụ tar, find, rsync và crontab.

Lập lịch backup Daily, Weekly, Monthly bằng Tar, Rsync và Cron trên Linux

Trong bài viết này mình chia sẻ với anh em cách tạo các bản sao lưu hàng ngày, hàng tuần và hàng tháng trên Linux một cách tự động. Bằng cách sử dụng các công cụ dòng lệnh cực kỳ quen thuộc và mạnh mẽ: tar, findrsync.

1. Lập lịch Daily Backup (Sao lưu hàng ngày)

Đối với daily backup thì mình có thể làm đơn giản dùng lệnh tarfind như sau:

  • Lệnh tar sẽ tạo file lưu trữ và nén thư mục /var/www/html vào trong thư mục /home/kien/backup/daily/data.
  • Lệnh find sẽ tìm và tự động xóa tất cả các bản sao lưu hàng ngày đã cũ hơn 7 ngày để tiết kiệm dung lượng.

Tạo một file bash script ví dụ backup-daily.sh và thêm vào nội dung sau:

#!/bin/bash
tar -zcf /home/kien/backup/daily/data-$(date +%Y%m%d).tar.gz -C /var/www/ html
find /home/kien/backup/daily/* -mtime +7 -delete

Anh em có thể tạo một cronjob để sao lưu hàng ngày tự động bằng cách gõ:

crontab -e

Sau đó thêm dòng lập lịch sau (chạy vào 00:15 mỗi ngày):

15 0 * * * sh /home/kien/backup/backup-daily.sh

Trong đó file backup-daily.sh là nội dung của 2 câu lệnh bên trên anh em thêm vào.

2. Lập lịch Weekly Backup (Sao lưu hàng tuần)

Tương tự như daily backup, chúng ta cũng làm một kịch bản cho weekly backup:

  • Lệnh tar nén và lưu vào thư mục /home/kien/backup/weekly/data.
  • Lệnh find xóa tất cả các bản sao lưu hàng tuần cũ hơn 31 ngày.

Tạo script backup-weekly.sh:

#!/bin/bash
tar -zcf /home/kien/backup/weekly/data-$(date +%Y%m%d).tar.gz -C /var/www/ html
find /home/kien/backup/weekly/* -mtime +31 -delete

Và thêm một cronjob để tự động sao lưu hàng tuần (chạy vào 00:18 mỗi tuần):

crontab -e
18 0 * * * sh /home/kien/backup/backup-weekly.sh

3. Lập lịch Monthly Backup (Sao lưu hàng tháng)

Kịch bản cho monthly backup cũng áp dụng tư duy tương tự:

  • Lệnh tar nén và lưu vào thư mục /home/kien/backup/monthly/data.
  • Lệnh find xóa các bản sao lưu đã cũ hơn 365 ngày (1 năm).

Tạo script backup-monthly.sh:

#!/bin/bash
tar -zcf /home/kien/backup/monthly/data-$(date +%Y%m%d).tar.gz -C /var/www/ html
find /home/kien/backup/monthly/* -mtime +365 -delete

Và thêm cronjob để tự động chạy hàng tháng:

crontab -e
18 0 * * * sh /home/kien/backup/backup-monthly.sh

4. Chuyển bản sao lưu sang Server khác (Offsite Backup)

Để an toàn tuyệt đối, anh em nên đẩy bản backup sang một server khác, tránh trường hợp server chính gặp sự cố vật lý hoặc lỗi phần cứng dẫn đến mất toàn bộ dữ liệu. Lúc này chúng ta sẽ dùng lệnh rsync kết hợp với SSH:

rsync -a --delete /home/kien/backup/daily user@hostname:/path/to/remote/backups/
rsync -a --delete /home/kien/backup/weekly user@hostname:/path/to/remote/backups/
rsync -a --delete /home/kien/backup/monthly user@hostname:/path/to/remote/backups/

Bạn có thể tạo luôn một Cronjob để tự động rsync dữ liệu sang server Remote vào lúc 02:00 sáng mỗi ngày:

0 2 * * * rsync -a --delete /home/kien/backup/daily user@hostname:/path/to/remote/backups/
0 2 * * * rsync -a --delete /home/kien/backup/weekly user@hostname:/path/to/remote/backups/
0 2 * * * rsync -a --delete /home/kien/backup/monthly user@hostname:/path/to/remote/backups/

(Lưu ý: Để rsync chạy ngầm bằng crontab mà không bị hỏi mật khẩu, anh em nhớ cấu hình SSH Key-based authentication giữa 2 server nhé!)

5. Tổng kết

Trên đây là tổng hợp một số lệnh bash script căn bản dành cho việc lập lịch backup theo chu kỳ: Daily (Ngày) - Weekly (Tuần) - Monthly (Tháng) bằng cách dùng lệnh tar, rsynccron.

Để dữ liệu của doanh nghiệp luôn được đảm bảo an toàn cao nhất, anh em nên xây dựng một quy trình sao lưu bài bản và luôn có ít nhất một bản Offsite Backup ở khác Data Center. Chúc anh em thực hành thành công!

Bình luận

Bài viết liên quan