温馨提示×

如何配置Linux Trigger进行备份

小樊
36
2025-12-29 01:57:26
栏目: 智能运维

Linux 中的“Trigger”通常指两类自动化:时间触发的定时任务与事件触发的文件变更监控。下面给出可落地的配置方法与最佳实践,覆盖定时与实时两类备份场景。


一、方案总览与选型

  • 时间触发:使用 CronSystemd Timers,适合按天/周/月的固定频率备份,稳定、易维护。
  • 事件触发:使用 inotify + rsync,对目录的创建、修改、删除等事件实时响应,适合高变更频率的数据(如网站目录、代码仓库)。
  • 数据库备份:在定时或事件触发脚本中调用 mysqldump/Percona XtraBackup/pgBackRest 等工具,形成端到端备份链。
  • 桌面与系统级:可用 Timeshift(系统快照)、Deja Dup(用户数据)快速完成备份配置。
  • 自动化与监控:脚本化封装 + 日志留存 + 告警(如 Zabbix/Nagios)可显著提升可用性。

二、时间触发备份配置

  • Cron 方式
    1. 编写备份脚本(示例为目录打包):
    #!/usr/bin/env bash
    set -Eeuo pipefail
    SRC="/data"
    DEST="/backup"
    TS=$(date +"%Y%m%d_%H%M%S")
    mkdir -p "$DEST"
    tar -czf "$DEST/backup_$TS.tar.gz" -C "$SRC" .
    echo "$(date) Backup finished: $DEST/backup_$TS.tar.gz" >> /var/log/backup.log
    
    1. 赋权并配置定时任务:
    chmod +x /usr/local/bin/backup.sh
    crontab -e
    # 每天 02:00 执行
    0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
    
  • Systemd Timer 方式
    1. 服务单元:/etc/systemd/system/backup.service
    [Unit]
    Description=Backup Service
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/backup.sh
    
    1. 定时器单元:/etc/systemd/system/backup.timer
    [Unit]
    Description=Daily Backup Timer
    [Timer]
    OnCalendar=daily
    Persistent=true
    [Install]
    WantedBy=timers.target
    
    1. 启用:
    systemctl daemon-reload
    systemctl enable --now backup.timer
    
  • 数据库定时备份示例(MySQL)
    #!/usr/bin/env bash
    mysqldump -u USER -p'PASS' --single-transaction --routines --triggers DATABASE \
      > "/backup/db_$(date +%F).sql"
    
    将脚本加入 CronSystemd Timer 即可。

三、事件触发备份配置(实时)

  • 适用场景:目录变更频繁,需要“改动即备份”。
  • 核心思路:用 inotifywait 监听目录事件,触发 rsync 增量同步到备份目标(本地或远端)。
  • 步骤
    1. 安装工具:
      • Debian/Ubuntu:sudo apt-get install -y inotify-tools rsync
      • CentOS/RHEL:sudo yum install -y inotify-tools rsync
    2. 基本监听脚本(避免并发执行):
    #!/usr/bin/env bash
    SRC="/var/www/html"
    DEST="user@192.168.1.100:/data/backup/html"
    LOCK="/tmp/rsync_inotify.lock"
    
    inotifywait -mrq -e create,delete,modify,move,attrib "$SRC" | while read -r dir ev file; do
      # 简单防并发
      flock -n "$LOCK" -c "
        rsync -azH --delete \"$SRC/\" \"$DEST\" >>/var/log/rsync_inotify.log 2>&1
        echo \"\$(date) \$ev \$file synced\" >>/var/log/rsync_inotify.log
      "
    done
    
    1. 提升 inotify 监控规模(大量文件时):
    # /etc/sysctl.conf
    fs.inotify.max_queued_events = 32768
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    # 使配置生效
    sysctl -p
    
    1. 远端备份建议用 SSH 密钥认证,免交互登录;如需更高吞吐,可结合 rsync daemon 模式与模块配置。

四、备份策略与运维要点

  • 策略组合:按 RPO/RTO 选择 全量/增量/差异;常见做法是“每日全量 + 每小时增量/日志备份”。
  • 保留与清理:脚本内实现按 天数/数量 清理旧备份,避免磁盘被占满。
  • 加密与权限:对备份数据启用 加密(传输与静态),备份目录仅授予必要权限(如 700)。
  • 异地与多副本:本地盘 + 远端/云存储 双写,提升容灾能力。
  • 监控与告警:记录 执行日志,用 Zabbix/Nagios 检查备份文件是否生成、任务是否失败,并配置 邮件/短信 告警。
  • 定期验证:定期做 恢复演练完整性校验(如校验和/恢复测试),确保备份可用。

五、快速选择建议

  • 变更不频繁、以周期性为主:优先 Cron/Systemd Timers + tar/rsync
  • 变更频繁、需要近实时:使用 inotify + rsync,必要时配合 队列/锁 控制并发。
  • 数据库:在定时/事件脚本中调用 mysqldump/Percona XtraBackup/pgBackRest
  • 桌面系统或系统快照:使用 Timeshift/Deja Dup 快速配置。

0