Backup dữ liệu website trên VPS bằng Script

Tại sao cần backup dữ liệu?

Backup dữ liệu website thường xuyên là rất quan trọng vì những lý do sau:
  1. Phòng ngừa mất dữ liệu: Các sự cố không mong muốn như hư hỏng phần cứng, lỗi phần mềm, tấn công từ hacker, hoặc sự cố kỹ thuật có thể khiến bạn mất dữ liệu quan trọng. Backup giúp bạn khôi phục dữ liệu nhanh chóng.
  2. Bảo mật: Nếu website của bạn bị tấn công bởi malware hoặc ransomware, bạn có thể khôi phục lại dữ liệu từ bản backup thay vì phải trả tiền cho hacker.
  3. Khôi phục nhanh chóng: Trong trường hợp website gặp sự cố, bạn có thể khôi phục lại hoạt động nhanh chóng từ các bản backup, giúp giảm thiểu thời gian ngừng hoạt động và tác động tiêu cực đến người dùng.
  4. Bảo vệ chống lại lỗi của người dùng: Nhân viên có thể vô tình xóa hoặc ghi đè dữ liệu quan trọng. Có bản backup sẽ giúp khôi phục dữ liệu bị mất một cách dễ dàng.
  5. Tuân thủ quy định pháp lý: Nhiều ngành công nghiệp yêu cầu doanh nghiệp phải lưu trữ và bảo vệ dữ liệu. Backup thường xuyên giúp bạn tuân thủ các quy định này và tránh bị phạt.
  6. Tạo điểm khôi phục: Backup thường xuyên giúp bạn tạo các điểm khôi phục, từ đó có thể quay lại trạng thái trước đó của website nếu có vấn đề xảy ra sau khi cập nhật hoặc thay đổi cấu hình.

Hướng dẫn thực hiện

Ưu điểm của script backup là bạn có thể áp dụng nó trên tất cả các VPS/Server. Việc duy nhất bạn cần làm là thay thế đúng đường dẫn và thông tin trên VPS/Server của mình. Bây giờ hãy bắt đầu tạo script với các bước dưới đây.

Bước 1: Tạo Script Backup

  • Tạo file backup_full_vps.sh
Ví dụ ở đây mình sẽ tạo và đặt tên cho file chứa script là backup_full_vps.sh , và file này mình sẽ đặt tại đường dẫn /root/script . Các tạo nhanh bằng cách sử dụng các lệnh sau:
Đàm Trung Kiên
mkdir /root/script # Tạo Folder chứa file backup_full_vps.shvi /root/script/backup_full_vps.sh # Tạo và chỉnh sửa nội dung file backup_full_vps.sh
Sau khi tạo xong file backup_full_vps.sh , bạn hãy copy đoạn script bên dưới và dán vào file vừa tạo.
#!/bin/bash#Auth: DAMTRUNGKIEN.COMTIMESTAMP=$(date +"%d-%m-%Y") ## Định dạng ngày ngày/tháng/nămBACKUP_DIR=" /root/backup /$TIMESTAMP" ## Đường dẫn lưu Backup trên VPSMYSQL_USER="root" ## Nhập User Root MYSQLMYSQL=/usr/bin/mysqlMYSQL_PASSWORD=" Nhap_pass_root_mysql " ## Nhập Pass Root MYSQLMYSQLDUMP=/usr/bin/mysqldumpSECONDS=0########## Backup Mysql ##########mkdir -p "$BACKUP_DIR/Mysql"echo "Backup Database In Process";databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`for db in $databases; do$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD $db | gzip > "$BACKUP_DIR/Mysql/$db.gz"doneecho "Backup Database Successful";echo '';########## Backup Source ##########mkdir -p "$BACKUP_DIR/Source"echo "Backup Source In Process";# Loop through /home directoryfor D in /home/*; doif [ -d "${D}" ]; then #If a directorydomain=${D##*/} # Domain nameecho "- "$domain;zip -r $BACKUP_DIR/Source/$domain.zip /home/$domain/public_html/ -q -x *.zip *.error_log *.access_log fidoneecho "Backup Source Successful";echo ''
Trong đoạn script trên, bạn chỉ cần để ý các phần mình bôi đỏ và thay thế chúng tương ứng như sau:
  • /root/backup : Đường dẫn lưu Backup trên VPS của bạn
  • pass_root_mysql : Mật khẩu Root MYSQL của bạn
  • Nếu cấu trúc website trên VPS nằm tại /home/domain.com/public_html thì điền tương ứng: /home/$domain/public_html/
  • Nếu cấu trúc website trên VPS nằm tại /home/user/domain.com/public_html thì sửa lại thành /home/user/$domain/public_html/
  • Nếu bạn cần loại bỏ một số định dạng file khi backup thì thêm option: -q -x *.zip *.error_log *.access_log (Ví dụ ở đây mình loại bỏ tất cả các file có đuôi .zip .access_log.error_log)
Ví dụ mình có 10 website nằm tại đường dẫn /home , thì script trên sẽ backup toàn bộ Database và Source code của các website tại /home , sau đó file backup sẽ được lưu tại đường dẫn được chỉ định là /root/backup/
  • Phần quyền thực thi cho File
Sau khi tạo và thêm script hoàn tất, bạn cần phân quyền thực thi cho file với lênh sau:
Đàm Trung Kiên
chmod +x backup_full_vps.sh
Lưu ý : Do File backup sẽ lưu trực tiếp trên VPS, nên các bạn cần tính toán kỹ dung lượng của VPS để tránh tình trạng đầy dung lượng do FIle backup.

Bước 2: Tạo Cron để chạy script backup định kỳ

Để việc backup được thực thi tự động, bạn có thể tạo cron trên VPS để backup được chạy định kỳ.
  • Tạo cron
Đàm Trung Kiên
crontab -e
  • Thêm thời gian tự động thực thi script
Cụ thể ở đây mình sẽ thiết lập thời gian tự động chạy script là vào lúc 6h sáng các ngày 1,7,14,21,30 hàng tháng. Các bạn có thể tham khảo cấu hình bên dưới, hoặc điều chỉnh lại theo mốc thời gian mà các bạn muốn.
Đàm Trung Kiên
0 6 1,7,14,21,30 * * /bin/bash /root/script/backup_full.sh >/dev/null 2>&1

Bước 3: Kiểm tra kết quả

Và như trước đó mình có cấu hình đường dẫn lưu File backup là /root/backup/ , bây giờ mình sẽ truy cập vào đúng đường dẫn /root/backup/ để kiểm tra các bản backup. Và như hình dưới đây các bạn có thể thấy, File backup của ngày 7 đã được tạo vào lúc 6h sáng, đúng với thiết lập của mình ở Bước 2. Backup sẽ có 2 thư mục là Source và Mysql riêng biệt, các bạn có thể dễ dàng quản lý và sử dụng khi cần.

Tổng kết

Hy vọng bài viết trên sẽ giúp các bạn có thêm phương án backup dữ liệu website hiệu quả, từ đó đảm bảo được dữ liệu và phòng ngừa các rủi ro có thể xảy ra.Chúc các bạn thực hiện thành công.!
5/5 - (1 bình chọn)

Pages