备份路径、命名与清理均由脚本控制,需用绝对路径定义backup_dir并创建检查,文件名须含主机名和时间戳以确保唯一性,结尾用find命令自动清理过期备份。

备份目标路径必须绝对化且提前创建
不能依赖相对路径或当前工作目录——crontab 执行时 pwd 通常是 /root 或 /,极易导致备份失败或写入错位置。
脚本中应显式定义并检查目标目录:
- 用绝对路径声明:BACKUP_DIR="/backup/mysql"
- 开头加判断和创建:[ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR"
- 确保目录权限正确:chown backup:backup "$BACKUP_DIR"(若用专用用户运行)
文件名要含节点标识与时间戳,避免覆盖
多节点或多次执行时,同名文件会互相覆盖,丢失历史。命名需唯一、可排序、带上下文:
- 推荐格式:backup_$(hostname)_$(date +\%Y\%m\%d_\%H\%M).sql.gz
- 主库可加角色标记:backup_master_db_20260619_0230.sql.gz
- 避免空格和特殊字符,防止 shell 解析异常
自动清理旧备份,防止磁盘占满
备份不清理等于没备。脚本末尾应嵌入 find 命令控制保留周期:
- 只留最近 7 天全量:find "$BACKUP_DIR" -name "backup_*.sql.gz" -mtime +7 -delete
- 加 -maxdepth 1 防误删子目录下其他文件
- 先测试命令:find "$BACKUP_DIR" -name "backup_*.sql.gz" -mtime +7 -print(确认无误再加 -delete)
跨节点或异地场景,路径要分层隔离
如果备份要同步到 NFS 或远端服务器,本地路径只是中转站,需设计两级结构:
- 本地暂存路径:/backup/local/db01/(按节点隔离)
- 集中归档路径:/mnt/nfs-backup/cluster/db01/(挂载后统一写入)
- 同步完成后,本地可清空或保留 1 份,降低单点风险











