linux服务器全量备份定时任务配置核心是脚本可靠、时间精准、环境可控:需用绝对路径调用命令,显式加载环境变量,赋予执行权限;mysql本地用mysqldump,docker容器需docker exec;crontab推荐30 2 0执行并重定向日志;脚本末尾用find -mtime +14清理旧备份。

Linux 服务器全量备份的定时任务配置,核心在于“脚本可靠 + 时间精准 + 环境可控”。不是简单写个 crontab 就能跑通,关键细节往往决定成败。
确保备份脚本能独立运行
很多定时任务失败,根本原因不是 crontab 写错了,而是脚本在 cron 环境下缺路径、缺变量、缺权限。
- 脚本开头明确声明解释器:
#!/bin/bash - 所有命令用绝对路径(如
/usr/bin/mysqldump、/bin/find、/usr/bin/gzip),避免$PATH差异 - 显式加载环境变量(尤其 Oracle 或 MySQL 需要特定
ORACLE_HOME、PATH):source /home/oracle/.bash_profile # 或针对 MySQL: export PATH="/usr/local/mysql/bin:$PATH"
- 赋予执行权限:
chmod +x /path/to/backup.sh
按数据库类型选对备份方式
不同数据库,工具和逻辑差异明显,不能一套脚本打天下。
-
MySQL 全量备份(本地实例)
使用mysqldump导出 SQL 文件,适合中小规模:mysqldump -u root -p'your_pass' --all-databases --single-transaction | gzip > /backup/mysql/full_$(date +%Y%m%d).sql.gz
-
MySQL 全量备份(Docker 容器)
必须通过docker exec进入容器执行:docker exec mysql-container sh -c "mysqldump -uroot -p'pass' --all-databases" | gzip > /backup/full_$(date +%Y%m%d).sql.gz
-
Oracle 全量备份(推荐 RMAN)
不要用文件拷贝,必须用rman target /执行热备:rman target / <p>注意:需提前确认数据库处于 <code>ARCHIVELOG</code> 模式,并设置好 <code>DB_RECOVERY_FILE_DEST</code>。</p>
crontab 配置要兼顾可读性与健壮性
时间表达式别靠猜,日志输出不能省。
-
推荐每周日凌晨 2:30 执行全量备份(低峰期):
30 2 * * 0 /bin/bash /backup/scripts/mysql_full_backup.sh >> /backup/logs/backup.log 2>&1
-
* * * * 0表示“每周日”,比6更通用(有些系统周日是 0,有些是 7) -
>> ... 2>&1把标准输出和错误统一记入日志,方便排查 - 用
/bin/bash显式调用,不依赖默认 shell
-
-
查看与验证:
crontab -l # 查当前用户任务 systemctl status cron # 确认服务运行中 tail -f /backup/logs/backup.log # 实时跟踪执行结果
自动清理旧备份,防止磁盘写满
备份不清理,等于埋雷。清理逻辑必须和备份脚本绑定,且留足安全余量。
-
在备份脚本末尾加入:
find /backup/mysql -name "*.sql.gz" -mtime +14 -delete
-mtime +14表示“14天前的文件”,注意不是“保留14天”,而是“删除早于14天的”。 -
若需更精细控制(如保留最近10个),可用:
ls -t /backup/mysql/*.sql.gz 2>/dev/null | tail -n +11 | xargs -r rm -f
不复杂但容易忽略











