Hướng Dẫn Thiết Lập Backup Tự Động với rsync và systemd Service

Mất dữ liệu có thể gây thiệt hại nghiêm trọng cho doanh nghiệp hoặc cá nhân. Tự động hóa backup bằng rsync, inotify-toolssystemd giúp đảm bảo dữ liệu được lưu trữ an toàn và dễ dàng khôi phục. Hướng dẫn này cung cấp quy trình chi tiết từng bước để thiết lập backup tự động sang server từ xa, với các script và lệnh ở định dạng văn bản thuần túy để tương thích với editor của Drupal 10.

Tại sao cần tự động hóa backup?

  • Bảo vệ dữ liệu: Ngăn chặn mất mát do lỗi phần cứng, sai sót con người hoặc tấn công mạng.
  • Tiết kiệm thời gian: Tự động hóa giảm thiểu công việc thủ công và lỗi.
  • Khả năng mở rộng: Dễ dàng điều chỉnh cho khối lượng dữ liệu ngày càng lớn.
  • Độ tin cậy: Đảm bảo backup liên tục với thời gian chết tối thiểu.

Yêu cầu ban đầu

  • Máy chủ Linux (ví dụ: Ubuntu) với quyền root.
  • Truy cập SSH vào server backup.
  • Kiến thức cơ bản về lệnh Linux và systemd.

Hướng dẫn từng bước thiết lập backup tự động

  1. Cài đặt các gói cần thiết
    Cập nhật hệ thống và cài đặt rsync cùng inotify-tools để đồng bộ và giám sát tệp:
    sudo apt update
    sudo apt install rsync inotify-tools
  2. Thiết lập xác thực SSH Key
    Tạo khóa SSH để kết nối an toàn, không cần mật khẩu với server backup:
    ssh-keygen -t rsa -b 4096
    ssh-copy-id -p 9022 backup_user@192.168.1.100
  3. Tạo script backup
    Script này tạo bản sao lưu cơ sở dữ liệu nén và quản lý các tệp cũ. Tạo file:
    sudo nano /home/iotdev/backup.sh
    Thêm nội dung sau:

#!/bin/bash

Tạo thư mục backup

backup_dir="/home/iotdev/backup" mkdir -p "$backup_dir"

Tạo timestamp cho file

timestamp=$(date +'%Y-%m-%dT%H-%M')

Backup database (iotdev)

cd /home/iotdev/vn-ielts-test && ./vendor/bin/drush sql-dump > "$backup_dir/db_vtech_$timestamp.sql" if [ -f "$backup_dir/db_vtech_$timestamp.sql" ]; then

Nén file .sql thành .gz.tmp

gzip -c "$backup_dir/db_vtech_$timestamp.sql" > "$backup_dir/db_vtech_$timestamp.sql.gz.tmp"

Kiểm tra nếu nén thành công thì đổi tên thành .gz

if [ $? -eq 0 ]; then mv "$backup_dir/db_vtech_$timestamp.sql.gz.tmp" "$backup_dir/db_vtech_$timestamp.sql.gz"

Xóa file .sql gốc sau khi nén

rm "$backup_dir/db_vtech_$timestamp.sql" fi fi

Backup database (ama)

cd /home/ama/vn-ielts-test && ./vendor/bin/drush sql-dump > "$backup_dir/db_ama_$timestamp.sql" if [ -f "$backup_dir/db_ama_$timestamp.sql" ]; then

Nén file .sql thành .gz.tmp

gzip -c "$backup_dir/db_ama_$timestamp.sql" > "$backup_dir/db_ama_$timestamp.sql.gz.tmp"

Kiểm tra nếu nén thành công thì đổi tên thành .gz

if [ $? -eq 0 ]; then mv "$backup_dir/db_ama_$timestamp.sql.gz.tmp" "$backup_dir/db_ama_$timestamp.sql.gz"

Xóa file .sql gốc sau khi nén

rm "$backup_dir/db_ama_$timestamp.sql" fi fi

Xoá các file backup cũ hơn 10 ngày (chỉ xóa file .gz)

find "$backup_dir"/* -type f -name "*.gz" -mtime +10 -exec rm -f {} ;

  1. Thiết lập dịch vụ rsync
    Tạo dịch vụ systemd để giám sát và đồng bộ các tệp .gz:
    sudo nano /etc/systemd/system/auto-sync-backup.service
    Thêm nội dung sau:

[Unit] Description=Auto sync .gz backup files to remote server and delete source After=network.target [Service] ExecStart=/home/iotdev/backup/auto_sync_backup.sh Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Environment="HOME=/home/iotdev" Restart=always User=root StandardOutput=append:/var/log/sync.log StandardError=append:/var/log/sync.log [Install] WantedBy=multi-user.target

  1. Tạo script rsync
    Script này sử dụng inotifywait để giám sát và đồng bộ các tệp .gz mới. Tạo file:
    sudo nano /home/iotdev/backup/auto_sync_backup.sh
    sudo chmod +x /home/iotdev/backup/auto_sync_backup.sh
    Thêm nội dung sau:

#!/bin/bash

Thư mục chứa file backup trên server chính

SOURCE_DIR="/home/iotdev/backup/"

Đường dẫn đến thư mục trên server backup

DEST="backup_user@192.168.1.100:/home/backup_user/backup-data/storage/"

Giám sát thư mục SOURCE_DIR để phát hiện file .gz mới

inotifywait -m "$SOURCE_DIR" -e create -e moved_to | while read -r directory events filename; do if [[ "$filename" =~ .gz$ ]]; then # Chỉ đồng bộ file .gz echo "New file detected: $filename" rsync -avz --progress -e "ssh -p 9022" "$SOURCE_DIR/$filename" "$DEST" if [ $? -eq 0 ]; then echo "Successfully synced $filename to backup server"

Xóa file nguồn sau khi đồng bộ thành công

rm -f "$SOURCE_DIR/$filename" if [ $? -eq 0 ]; then echo "Deleted source file: $filename" else echo "Failed to delete source file: $filename" fi else echo "Failed to sync $filename" fi fi done

  1. Kích hoạt và khởi động dịch vụ
    Kích hoạt dịch vụ systemd để chạy script đồng bộ:
    sudo systemctl daemon-reload
    sudo systemctl enable auto-sync-backup.service
    sudo systemctl start auto-sync-backup.service
    sudo systemctl status auto-sync-backup.service
  2. Kiểm tra thiết lập
    Kiểm tra quá trình rsync với một tệp thử nghiệm:
    rsync -avz --progress -e "ssh -p 9022" /home/iotdev/backup/files/videos_full_test/Writing.mp4 backup_user@192.168.1.100:/home/backup_user/backup-data/storage/

Các phương pháp hay nhất

  • Theo dõi log: Kiểm tra /var/log/sync.log thường xuyên để phát hiện lỗi đồng bộ.
  • Bảo mật SSH: Sử dụng khóa mạnh và cổng không chuẩn (ví dụ: 9022) để tăng cường bảo mật.
  • Lên lịch backup: Sử dụng cron để chạy backup.sh định kỳ.
  • Kiểm tra khôi phục: Thường xuyên kiểm tra khôi phục backup để đảm bảo tính toàn vẹn dữ liệu.

Kết luận
Tự động hóa backup với rsyncsystemd mang lại giải pháp đáng tin cậy và mở rộng để bảo vệ dữ liệu. Hướng dẫn này cung cấp các lệnh và script ở định dạng văn bản thuần túy, tương thích với editor của Drupal 10. Bắt đầu triển khai ngay hôm nay để bảo vệ dữ liệu quan trọng của bạn!

Kêu gọi hành động
Cần thêm mẹo về backup trên Linux? Theo dõi blog của chúng tôi hoặc liên hệ để nhận hỗ trợ chuyên sâu về bảo vệ dữ liệu!

Working Contact Form with Ajax & PHP

Get a functional and working contact form with Ajax & PHP in a few minutes. Just copy and paste the files, add a little code and you’re done.

Download Now