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-tools và systemd 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
- 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 - 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 - 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 {} ;
- 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
- 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
- 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 - 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 rsync và systemd 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!