定时任务自动备份全站数据库与模型文件新手实操指南
定时任务自动备份全站数据库与模型文件新手实操指南
如果你正在管理一个网站或应用,数据库和模型文件(比如训练好的AI模型、上传的图片或数据文件)是核心资产。
手动备份费时且容易遗忘,用定时任务自动备份是最省心的方案。
本文面向零基础用户,手把手教你准备环境、编写备份脚本、设置定时任务,并避开常见坑点。
一、备份前需要准备的条件
在动手之前,先确认你已准备好以下几项:
- 数据库连接信息:数据库名、用户名、密码,以及主机地址(通常是
localhost)。如果使用 MySQL/MariaDB,确保mysqldump命令已安装(大部分服务器自带)。 - 模型文件路径:明确你要备份的模型或数据目录绝对路径(例如
/var/www/html/models或/home/user/data)。 - 备份存放目录:提前创建一个用于存储备份文件的专用目录,比如
/backups/site_backup。确保该目录有足够的磁盘空间。 - 脚本执行权限:后续要创建 Shell 脚本,需要赋予
755或700权限。
二、编写备份脚本(数据库 + 模型文件)
新建一个脚本文件,例如 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_name、your_db_user、your_db_pass、MODEL_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,方便排错。
方式二:宝塔面板(适合新手)
- 登录宝塔面板,点击左侧菜单「计划任务」。
- 点击「添加任务」,任务类型选择「Shell脚本」。
- 任务名称写“全站数据库模型备份”,执行周期选「每天」并设定时间(如 03:00)。
- 在脚本内容框中粘贴上述
auto_backup.sh的完整代码(记得先修改配置项)。 - 点击「添加」即可生效。宝塔会自动管理 crontab,并可在日志中查看执行结果。
四、常见错误与避坑说明
- mysqldump: command not found:说明 MySQL 客户端未安装,运行
yum install mysql-client或apt-get install mysql-client安装。 - 数据库备份权限不足:检查数据库用户名是否拥有
SELECT、LOCK TABLES等权限,建议使用 root 或专用备份用户。 - 模型文件夹路径写错:脚本中的
tar命令使用了-C和basename,确保MODEL_DIR是完整路径且最后一级没有斜杠。 - 备份文件大小为 0:通常是磁盘空间不足或 mysqldump 执行失败,检查
/tmp空间和日志。 - crontab 不执行:先手动运行脚本看是否报错,再检查 crontab 中路径是否使用绝对路径(尤其脚本中涉及的命令如
mysqldump建议写全路径,或先source /etc/profile加载环境变量)。
五、如何验证备份是否成功
- 手动执行脚本:
bash /root/auto_backup.sh,观察终端输出。 - 进入备份目录,查看是否生成了
.sql和.tar.gz文件,文件大小是否正常(非 0 字节)。 - 尝试恢复一次:使用
mysql -u root -p 数据库名 < 备份的sql文件测试数据库恢复,解压.tar.gz检查文件完整性。 - 查看定时任务日志:如果是 crontab,检查
/var/log/backup.log;如果是宝塔,在计划任务列表右侧点「日志」查看。
结语
通过以上步骤,你已经实现了全站数据库与模型文件的定时自动备份。
建议定期检查备份目录的磁盘使用情况,并根据业务调整保留天数。
如果在配置过程中遇到其他问题,欢迎在评论区交流。
延伸推荐:备份完成后可以将文件同步到远程存储(如 OSS、S3)实现异地容灾,后续将单独出一篇教程,敬请关注。