Linux Trigger如何实现数据备份
导读:Linux 中实现“Trigger”式数据备份的实用方案 一、概念与目标 在 Linux 中,“Trigger”式备份通常指由事件触发的备份,例如文件变更、定时到达或系统信号。常见实现路径包括: 事件触发:利用 inotify 监听目录...
Linux 中实现“Trigger”式数据备份的实用方案
一、概念与目标
- 在 Linux 中,“Trigger”式备份通常指由事件触发的备份,例如文件变更、定时到达或系统信号。常见实现路径包括:
- 事件触发:利用 inotify 监听目录变化,实时调用 rsync 做增量同步。
- 时间触发:使用 cron 按计划执行备份脚本(全量/增量)。
- 数据库:用 mysqldump/pgBackRest/Percona XtraBackup 配合定时任务或工具内置调度。
- 传输与认证:优先使用 SSH 密钥 免密,结合 rsync/SSH 安全传输。
二、事件触发实时备份 inotify + rsync
- 适用场景:目录内容频繁变更,需要近实时把变更同步到备份机(如 /data0/htdocs)。
- 思路:在“源端”用 inotifywait 监听 create、modify、delete、attrib 等事件,触发 rsync 增量同步到“备份端”;备份端运行 rsync 守护进程(模块方式)或 SSH 方式接收。
- 关键步骤与示例:
- 备份端准备(rsync 模块方式)
- 安装 rsync;编辑 /etc/rsyncd.conf(示例)
- port=873;address=备份机IP;uid=root;gid=root;use chroot=no;readonly=no
- hosts allow=源端网段;max connections=5
- [htdocs] path=/data0/htdocs;auth users=root;secrets file=/etc/rsyncd/rsyncd.secrets
- 创建密码文件(权限 600):echo “root:YourPass” > /etc/rsyncd/rsyncd.secrets
- 启动 rsync 服务(以 systemd 为例):systemctl enable --now rsyncd
- 安装 rsync;编辑 /etc/rsyncd.conf(示例)
- 源端监听与同步脚本(示例)
- 安装 inotify-tools;创建脚本 /root/rsync_inotify.sh
- #!/bin/bash
host=备份机IP
src=/data0/htdocs/
/usr/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f%e’
-e modify,delete,create,attrib “$src” | while read files; do /usr/bin/rsync -avz --delete --password-file=/etc/rsyncd/rsyncd.secrets
“$src” “root@$host::htdocs” > > /var/log/rsync.log 2> & 1 echo “$files was rsynced” > > /var/log/rsync.log done
- #!/bin/bash
host=备份机IP
src=/data0/htdocs/
/usr/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f%e’
- 后台运行:setsid /root/rsync_inotify.sh &
- 防火墙放行:iptables -A INPUT -p tcp --dport 873 -j ACCEPT
- 安装 inotify-tools;创建脚本 /root/rsync_inotify.sh
- 安全与优化
- 建议用 SSH 方式替代模块方式:rsync -avz -e ssh user@host:/src/ /dst/(需配置 SSH 免密登录)。
- 避免事件风暴:合并短时间多次事件(节流/排队),仅在稳定后同步。
- 谨慎使用 –delete,建议先演练或改为“备份端保留历史”。
- 备份端准备(rsync 模块方式)
三、时间触发定时备份 cron + tar/rsync
- 适用场景:对实时性要求一般、更重视可控性与可审计性的备份(如每日全量、每周全量+每日增量)。
- 文件/目录备份示例(tar 归档 + 保留策略)
- 备份脚本 /usr/local/bin/backup_home.sh
- #!/bin/bash
set -e
BACKDIR=“/backup/home/$(date +%F)”
mkdir -p “$BACKDIR”
tar czf “$BACKDIR/home_$(date +%F).tar.gz” -C /home .
删除 30 天前的备份
find /backup/home -type f -name “*.tar.gz” -mtime +30 -delete echo “$(date) Backup finished: $BACKDIR” > > /var/log/backup.log
- #!/bin/bash
set -e
BACKDIR=“/backup/home/$(date +%F)”
mkdir -p “$BACKDIR”
tar czf “$BACKDIR/home_$(date +%F).tar.gz” -C /home .
- 定时执行(每天 02:00):crontab -e 添加
- 0 2 * * * /usr/local/bin/backup_home.sh
- 备份脚本 /usr/local/bin/backup_home.sh
- 远程增量备份示例(rsync over SSH)
- 前提:配置 SSH 免密登录 到备份机。
- 命令示例:rsync -avz --delete -e ssh /data/ user@backup:/backup/data/
- 定时(每 6 小时):0 */6 * * * rsync -avz --delete -e ssh /data/ user@backup:/backup/data/
- 数据库定时备份示例(MySQL)
- 备份脚本 /usr/local/bin/backup_mysql.sh
- #!/bin/bash
mysqldump -u USER -p’PASS’ --single-transaction --routines --triggers DATABASE \
“/backup/mysql/DATABASE_$(date +%F).sql” find /backup/mysql -type f -name “*.sql” -mtime +7 -delete
- #!/bin/bash
mysqldump -u USER -p’PASS’ --single-transaction --routines --triggers DATABASE \
- 定时(每天 02:30):30 2 * * * /usr/local/bin/backup_mysql.sh
- 备份脚本 /usr/local/bin/backup_mysql.sh
- 说明
- 选择策略:全量(恢复快、占用大)、增量(省时省空间、恢复链复杂)、差异(折中)。
- 建议将备份与清理分离到不同任务,便于排错与回滚。
四、数据库专用工具与策略
- MySQL
- 逻辑备份:mysqldump(适合中小规模、可移植性强),配合定时任务与保留策略。
- 物理热备:Percona XtraBackup(支持 InnoDB 热备、增量、压缩与加密),适合大表与大库。
- PostgreSQL
- 推荐:pgBackRest(支持全量/增量/差异、并行、压缩与加密),通过配置文件管理策略与存储后端。
- 通用建议
- 明确 RPO/RTO,组合“全量+增量/差异”,定期做恢复演练与校验(如校验和、抽样导入)。
五、安全加固与运维要点
- 传输与认证
- 优先 SSH 密钥(禁用口令登录)、限制备份用户权限(最小权限原则)、备份目录 600/700 权限。
- 日志与监控
- 统一日志路径(如 /var/log/backup.log),记录开始/结束时间、文件列表、耗时与错误;接入 Zabbix/Nagios 做“备份是否生成/是否按时”的告警。
- 保留与容量
- 采用“按时间/数量”的保留策略(如保留 7/30 天),定期清理过期备份,监控磁盘使用率。
- 恢复演练
- 定期从备份恢复至测试环境,验证可用性与完整性;关键业务建议自动化演练与报告归档。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Trigger如何实现数据备份
本文地址: https://pptw.com/jishu/769695.html
