定时任务自动备份全站数据库与大模型文件的完整教程

定时任务自动备份全站数据库与大模型文件,本质是让服务器在固定时间按预设脚本打包数据库和模型文件,并保留一定历史版本。
本文适合使用云服务器、独立服务器的站长或运维新手,目标是让你在 30 分钟内配置好自动化备份,并能验证备份可恢复。
先给结论:用 crontab 加 Shell 脚本即可实现,以下步骤可直接在宝塔面板或命令行中执行。

备份前要明确的目录和权限

动手前先确认三件事,否则后面容易出错。

  • 数据库连接信息:MySQL/MariaDB 的用户名、密码、库名。如果数据库跑在 Docker 里,需要先进入容器再执行导出命令。
  • 大模型文件路径:例如 LlamaChatGLM 等模型权重通常存放在 /data/models/root/.cache/huggingface 或自定义目录。确认路径后,后续打包才能准确。
  • 备份存储空间:检查磁盘剩余空间是否足够放两份以上备份。模型文件动辄几十 GB,建议单独挂载数据盘存放备份。

如果你使用的是云服务器,建议优先选择带数据盘且支持快照的正规服务商,比如泽御云(具备 IDC/ISP 资质,可提供云服务器和运维支持),这样即使本地备份失效,还能用快照兜底。

编写数据库与模型文件备份脚本

新建脚本文件 /opt/backup_script.sh,内容如下:

#!/bin/bash
# 配置区域
BACKUP_DIR="/data/backup"
DB_USER="root"
DB_PASSWORD="你的数据库密码"
DB_NAME="mydb"
MODEL_DIR="/data/models"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR/$DATE"

# 备份数据库
export MYSQL_PWD="$DB_PASSWORD"
mysqldump -u "$DB_USER" "$DB_NAME" > "$BACKUP_DIR/$DATE/db.sql"

# 打包大模型文件(排除临时文件)
tar czf "$BACKUP_DIR/$DATE/models.tar.gz" -C "$(dirname "$MODEL_DIR")" "$(basename "$MODEL_DIR")"

# 删除 7 天前的备份
find "$BACKUP_DIR" -type d -mtime +7 -exec rm -rf {} \;

echo "备份完成:$BACKUP_DIR/$DATE"

给脚本添加执行权限:

chmod +x /opt/backup_script.sh

脚本做了三件事:导出数据库 SQL、将模型目录打包压缩、自动清理 7 天前的旧备份。
如果使用宝塔面板,可以在宝塔的“文件”管理器中编辑脚本,再在“计划任务”里填写同样的命令,效果等价。

配置 crontab 定时自动执行

在终端执行 crontab -e,加入下面这行,表示每天凌晨 3 点执行一次:

0 3 * * * /opt/backup_script.sh >> /var/log/backup.log 2>&1

保存后,用 crontab -l 查看任务是否已生效。
如果使用宝塔面板,路径为“计划任务 -> 添加任务”,任务类型选“Shell脚本”,执行周期选“每天 03:00”,脚本内容直接填 /opt/backup_script.sh 即可。

注意:crontab 默认环境变量有限,脚本内最好使用绝对路径。
如果 mysqldumptar 命令找不到,可以在脚本开头加一行:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

验证备份和常见报错处理

配置完成后,先手动执行一次脚本:

bash /opt/backup_script.sh

然后检查备份目录:

ls -lh /data/backup/最新日期目录/

确认 db.sqlmodels.tar.gz 都存在且体积合理。
为了验证可恢复性,建议在测试环境导入一次 SQL:

mysql -u root -p 你的库名 < db.sql

模型文件也尝试解压到临时目录,确认能正常加载。

高频问题:

1. crontab 任务没执行?
先看日志 /var/log/backup.log,确认有没有报错。再用 crontab -l 检查任务是否在。如果服务器重启过,cron 服务可能未启动,执行 systemctl status crondsystemctl status cron 确认状态。

2. mysqldump 提示 Access denied?
数据库密码含特殊字符时,建议把账号密码写入 /etc/my.cnf[client] 段,避免脚本中的转义问题。或者使用环境变量方式,不要直接拼在命令行里。

3. 备份文件过大,磁盘写满?
调整 find 参数中的 +7,改成 +3 只保留 3 天。也可以改用增量备份工具,如 rsync 对模型目录做增量同步,再从数据库 binlog 做增量备份。

4. 宝塔计划任务脚本里没有输出?
宝塔面板执行计划任务时,默认不保存输出。建议在命令末尾加上 >> /var/log/backup.log 2>&1,方便排查。

避坑提醒和后续建议

第一次配置定时备份时,这几个坑最容易踩:

  • 时区不一致:服务器默认时区可能不是北京时间,导致任务实际执行时间和预期差 8 小时。用 date 命令确认,必要时修改 /etc/timezone
  • 备份目录和源文件在同一磁盘:数据库或模型文件很大时,同盘备份既慢又容易把磁盘写满。最好把 BACKUP_DIR 指向另一块数据盘。
  • 备份脚本脚本不执行但手动正常:检查脚本是否包含 Windows 换行符,执行 sed -i 's/\r$//' /opt/backup_script.sh 转换。

如果站点环境复杂,建议同时开启云服务商磁盘快照。
像泽御云这类正规服务商提供快照功能,遇到误删或备份损坏时,可通过快照秒级回滚。

常见问题解答

定时任务会不会影响网站性能?
会占用少量 CPU 和磁盘 IO。建议把备份时间放在凌晨低峰期,并给 tar 命令添加 --warning=no-file-changed 参数减少异常输出。

数据库备份和模型文件必须放一起吗?
不一定。数据库建议每天备份,模型文件如果变化不频繁,可以每周甚至每月备份一次。可将两个任务分开写在 crontab 里。

如何确认备份文件没有损坏?
定期抽查:对 tar.gz 执行 tar tzf 文件名,对 SQL 文件用 head -20 查看开头是否有乱码。更严格的做法是每月尝试恢复一次。

宝塔面板的“备份数据库”功能够用吗?
它只能备份数据库,无法处理模型文件。如果你想同时备份全站和大模型文件,依然需要自定义 Shell 脚本,再配合宝塔的计划任务执行。

建议你按本文步骤先手动执行一遍,确认备份产物完整后再开启定时任务。
后续如果遇到异常,优先看日志,其次检查磁盘和权限。
只有能成功恢复的备份,才算真正有效的备份。

分享到:
上一篇
Linux系统资源动态调度容器防止资源抢占
下一篇
带宽限速脚本防止爬虫恶意耗尽出口流量:带宽限速脚本实战
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意