定时任务自动备份全站数据库与模型文件新手实操指南

定时任务自动备份全站数据库与模型文件新手实操指南

如果你正在管理一个网站或应用,数据库和模型文件(比如训练好的AI模型、上传的图片或数据文件)是核心资产。
手动备份费时且容易遗忘,用定时任务自动备份是最省心的方案。
本文面向零基础用户,手把手教你准备环境、编写备份脚本、设置定时任务,并避开常见坑点。

一、备份前需要准备的条件

在动手之前,先确认你已准备好以下几项:

  • 数据库连接信息:数据库名、用户名、密码,以及主机地址(通常是 localhost)。如果使用 MySQL/MariaDB,确保 mysqldump 命令已安装(大部分服务器自带)。
  • 模型文件路径:明确你要备份的模型或数据目录绝对路径(例如 /var/www/html/models/home/user/data)。
  • 备份存放目录:提前创建一个用于存储备份文件的专用目录,比如 /backups/site_backup。确保该目录有足够的磁盘空间。
  • 脚本执行权限:后续要创建 Shell 脚本,需要赋予 755700 权限。

二、编写备份脚本(数据库 + 模型文件)

新建一个脚本文件,例如 auto_backup.sh,并填入以下内容。
脚本会生成包含日期的备份文件名,自动压缩,并保留最近7天的备份(防止磁盘占满)。

#!/bin/bash
# 自动备份数据库和模型文件

# 配置项 - 请按实际修改
DB_NAME="your_db_name"
DB_USER="your_db_user"
DB_PASS="your_db_password"
BACKUP_DIR="/backups/site_backup"
MODEL_DIR="/var/www/html/models"   # 模型文件目录
RETENTION_DAYS=7

# 生成日期戳
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 1. 备份数据库
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql

# 2. 备份模型文件(直接压缩整个目录)
tar -czf $BACKUP_DIR/models_${DATE}.tar.gz -C $(dirname $MODEL_DIR) $(basename $MODEL_DIR)

# 3. 删除超过保留天数的旧备份
find $BACKUP_DIR -name "*.sql" -type f -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete

# 4. 可选:删除空文件(如果备份失败产生的 0 字节文件)
find $BACKUP_DIR -name "*.sql" -size 0 -delete
find $BACKUP_DIR -name "*.tar.gz" -size 0 -delete

echo "Backup completed at $(date)"

注意:请务必将 your_db_nameyour_db_useryour_db_passMODEL_DIR 换成你的实际值。
如果密码包含特殊字符(如 $&),建议将密码写入 ~/.my.cnf 文件来避免脚本泄露。

保存脚本后,执行 chmod +x auto_backup.sh 赋予执行权限。

三、设置定时任务(crontab / 宝塔面板)

方式一:Linux crontab

运行 crontab -e 进入编辑模式,添加一行定时规则,例如每天凌晨 3 点执行备份:

0 3 * * * /bin/bash /root/auto_backup.sh >> /var/log/backup.log 2>&1

这条命令的含义:每天 3:00 执行脚本,并将输出和错误日志追加到 /var/log/backup.log,方便排错。

方式二:宝塔面板(适合新手)

  1. 登录宝塔面板,点击左侧菜单「计划任务」。
  2. 点击「添加任务」,任务类型选择「Shell脚本」。
  3. 任务名称写“全站数据库模型备份”,执行周期选「每天」并设定时间(如 03:00)。
  4. 在脚本内容框中粘贴上述 auto_backup.sh 的完整代码(记得先修改配置项)。
  5. 点击「添加」即可生效。宝塔会自动管理 crontab,并可在日志中查看执行结果。

四、常见错误与避坑说明

  • mysqldump: command not found:说明 MySQL 客户端未安装,运行 yum install mysql-clientapt-get install mysql-client 安装。
  • 数据库备份权限不足:检查数据库用户名是否拥有 SELECTLOCK TABLES 等权限,建议使用 root 或专用备份用户。
  • 模型文件夹路径写错:脚本中的 tar 命令使用了 -Cbasename,确保 MODEL_DIR 是完整路径且最后一级没有斜杠。
  • 备份文件大小为 0:通常是磁盘空间不足或 mysqldump 执行失败,检查 /tmp 空间和日志。
  • crontab 不执行:先手动运行脚本看是否报错,再检查 crontab 中路径是否使用绝对路径(尤其脚本中涉及的命令如 mysqldump 建议写全路径,或先 source /etc/profile 加载环境变量)。

五、如何验证备份是否成功

  1. 手动执行脚本:bash /root/auto_backup.sh,观察终端输出。
  2. 进入备份目录,查看是否生成了 .sql.tar.gz 文件,文件大小是否正常(非 0 字节)。
  3. 尝试恢复一次:使用 mysql -u root -p 数据库名 < 备份的sql文件 测试数据库恢复,解压 .tar.gz 检查文件完整性。
  4. 查看定时任务日志:如果是 crontab,检查 /var/log/backup.log;如果是宝塔,在计划任务列表右侧点「日志」查看。

结语

通过以上步骤,你已经实现了全站数据库与模型文件的定时自动备份。
建议定期检查备份目录的磁盘使用情况,并根据业务调整保留天数。
如果在配置过程中遇到其他问题,欢迎在评论区交流。

延伸推荐:备份完成后可以将文件同步到远程存储(如 OSS、S3)实现异地容灾,后续将单独出一篇教程,敬请关注。
分享到:
上一篇
OpenSearch替代Elasticsearch轻量化部署
下一篇
服务器带宽限速脚本防止爬虫恶意占用:服务器带宽限速脚本
1
系统公告

机房迁移升级通知

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