Ubuntu 备份触发器的实现与数据库触发器备份
一、概念澄清
- 在 Ubuntu 中,“触发器”通常指两类:
- 文件系统事件触发器:当目录或文件发生创建、修改、删除时,自动执行备份或同步(如用 inotifywait + rsync 实时触发)。
- 数据库触发器 Trigger:存储在数据库中的对象,随表事件自动执行。备份它需要在导出数据时包含触发器定义(如 mysqldump 的 –triggers 选项)。
二、文件系统事件触发备份(实时)
- 适用场景:目录内容频繁变化,需要“文件一变就备份/同步”。
- 思路:用 inotifywait 监听目录事件,触发 rsync 增量同步到备份目录或远端。
- 快速步骤:
- 安装工具
sudo apt update && sudo apt install -y inotify-tools rsync
- 创建触发同步脚本 sync_data.sh
#!/bin/bash
SOURCE_DIR=“/path/to/source”
TARGET_DIR=“/path/to/backup”
inotifywait -m -r -e create,delete,modify --format ‘%w%f’ “$SOURCE_DIR” | while read FILE; do
rsync -avz --delete “$SOURCE_DIR/” “$TARGET_DIR/”
done
- 赋权并后台运行
chmod +x sync_data.sh
nohup ./sync_data.sh &
- 说明:
- 该方式“实时”响应事件,适合对变更敏感的数据;如需更稳健,可结合 systemd 服务或 screen/tmux 守护进程运行。
三、定时触发备份(按计划)
- 适用场景:对实时性要求不高,按天/小时稳定执行备份。
- 思路:用 cron 定时执行 tar 或 rsync 命令,形成固定频率的备份任务。
- 快速步骤:
- 编辑当前用户的定时任务
crontab -e
- 添加计划任务(示例)
每天 02:00 用 tar 打包备份
0 2 * * * tar -czvf /backup/backup_$(date +%F).tar.gz /path/to/source
每 6 小时用 rsync 增量同步
0 */6 * * * rsync -av --delete /path/to/source/ /path/to/backup/
- 如需更复杂逻辑,可将命令写入脚本再交由 cron 执行。
- 说明:
- tar 适合归档与压缩;rsync 适合目录间增量同步与镜像。两者均可与 cron 组合实现稳定、可审计的定时备份。
四、数据库触发器的备份(MySQL/MariaDB)
- 适用场景:需要把业务表上的 触发器 随数据一起备份与恢复。
- 思路:使用 mysqldump 导出时显式包含触发器定义,并在恢复时一并导入。
- 快速步骤:
- 准备备份专用账号并授予权限(避免在主库日常账号上直接操作)
CREATE USER ‘backup_user’@‘%’ IDENTIFIED BY ‘StrongPass!’;
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, PROCESS ON . TO ‘backup_user’@‘%’;
– 若库中有事件调度器,按需授予:GRANT EVENT ON your_db.* TO ‘backup_user’@‘%’;
FLUSH PRIVILEGES;
- 推荐将凭据写入受控配置文件(权限设为 600)
sudo mkdir -p /etc/mysql/conf.d
cat >/etc/mysql/conf.d/backup.cnf <<‘EOF’
[client]
user=backup_user
password=StrongPass!
host=127.0.0.1
EOF
sudo chmod 600 /etc/mysql/conf.d/backup.cnf
- 执行导出(包含触发器;可按需添加 --routines --events)
mysqldump --defaults-file=/etc/mysql/conf.d/backup.cnf
–single-transaction --routines --triggers --events
-u backup_user your_db > /backup/your_db_$(date +%F).sql
- 恢复时直接导入即可,触发器定义会随表一起恢复
mysql -u backup_user -p your_db < /backup/your_db_*.sql
- 说明:
- 使用专用备份账号与配置文件,既安全又便于自动化;–triggers 是关键选项,确保触发器被导出。
五、实用建议
- 保留多份历史与校验:在脚本中加入按日期命名、保留天数、校验(如 sha256sum)与清理旧备份的逻辑。
- 远程与离线双保险:本地定时备份 + 远端实时/定时同步;关键备份再做离线或云端副本。
- 监控与告警:记录日志,配合简单监控(如日志关键字告警或 systemd 状态检查),确保任务持续可用。