定时任务自动备份全站数据库与本地大模型文件
准备备份环境
开始之前,请确保你已具备以下条件:
- 一台运行 Linux(如 Ubuntu 20.04 或 CentOS 7+)的服务器,已安装宝塔面板或直接使用终端。
- MySQL / MariaDB 数据库,知道数据库用户名和密码。
- 本地大模型文件(例如以
.gguf结尾的模型文件)存放在某个目录下,比如/data/models。 - 已安装
crontab(大多数系统自带,可执行crontab -l检查)。 - 足够的磁盘空间用于存放备份文件,建议挂载单独的备份盘或使用云存储。
如果尚未安装 mysqldump,执行以下命令安装:
# Debian/Ubuntu
apt install mysql-client -y
# CentOS/RHEL
yum install mysql -y
编写备份脚本
创建一个备份脚本,同时备份数据库和大模型文件。
脚本路径建议放在 /root/backup.sh。
#!/bin/bash
# 备份脚本 - 自动备份数据库与模型文件
# 配置变量
DB_NAME="你的数据库名"
DB_USER="数据库用户名"
DB_PASS="数据库密码"
MODEL_DIR="/data/models" # 大模型文件所在目录
BACKUP_DIR="/backup" # 备份存放目录
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
if [ $? -eq 0 ]; then
echo "[OK] 数据库备份成功: ${DB_NAME}_${DATE}.sql"
else
echo "[ERROR] 数据库备份失败"
exit 1
fi
# 2. 备份模型文件(使用 tar 压缩,节省空间)
tar -czf $BACKUP_DIR/models_${DATE}.tar.gz -C $MODEL_DIR .
if [ $? -eq 0 ]; then
echo "[OK] 模型文件备份成功: models_${DATE}.tar.gz"
else
echo "[ERROR] 模型文件备份失败"
exit 1
fi
# 3. 可选:删除30天前的备份,防止占满磁盘
find $BACKUP_DIR -name "*.sql" -mtime +30 -exec rm {} \;
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -exec rm {} \;
echo "[INFO] 清理完成"
保存脚本后赋予执行权限:
chmod +x /root/backup.sh
设置定时任务
使用 crontab -e 编辑当前用户的定时任务(注意用 root 用户,以便有权限访问所有目录)。
添加以下行,让脚本每天凌晨 3 点运行:
0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1
这行表示:每天 3:00 执行 /root/backup.sh,并将标准输出和错误输出都记录到日志文件 /var/log/backup.log,方便排查问题。
保存后,重启 crond 服务使配置生效:
systemctl restart crond # CentOS
# 或
service cron restart # Ubuntu
常见避坑点
1. 数据库密码明文暴露风险
脚本中直接写密码不安全。建议创建 /root/.my.cnf 文件,设置权限 600:
[client]
user=数据库用户名
password=数据库密码
然后在 mysqldump 命令中省略 -u 和 -p,改为:
mysqldump $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql
2. 备份文件权限问题
生成的备份文件可能被其他用户读取。可以在脚本末尾添加:
chmod 600 $BACKUP_DIR/*.sql $BACKUP_DIR/*.tar.gz
3. 磁盘空间不足
定期检查磁盘使用率,建议设置监控告警。使用 df -h 查看。
4. 模型文件过大导致压缩耗时
如果模型很大(几十GB),tar 压缩可能耗时很久,甚至撑爆临时空间。可以只打包不压缩(去掉 -z),或直接使用 rsync 同步到远程存储。
5. 定时任务未执行
检查 crontab 是否包含正确的 PATH 环境变量。建议在脚本头部添加 #!/bin/bash 并指定完整路径。查看日志:tail -f /var/log/backup.log。
验证备份是否成功
手动执行一次脚本,检查备份目录:
/root/backup.sh
ls -lh /backup/
你应该看到类似 yourdb_20250321_030000.sql 和 models_20250321_030000.tar.gz 的文件。
尝试导入备份文件确认完整性:
# 恢复数据库测试(在测试库上进行)
mysql -u用户名 -p 新数据库名 < backup.sql
# 解压模型文件
tar -xzf models_*.tar.gz -C /tmp/test_models
如果解压后文件与源文件一致,说明备份完好。
最后,建议每月至少一次演练恢复流程,确保在灾难发生时能快速重建。
如果你正在处理定时任务自动备份全站数据库与本地大模型文件,建议先按本文步骤完整执行,再根据自己的环境微调;
遇到异常时优先回看避坑和高频问题部分。