系列收官。把 L1 到 L14 学的全串起来,做一个自动化备份项目。
需求
每天凌晨 3 点,自动备份网站目录和数据库,留 7 天,日志记录,出错告警。
backup.sh 完整脚本
#!/bin/bash
set -e
BACKUP_DIR="/backup"
SRC_WWW="/var/www/html"
DATE=$(date +%Y%m%d_%H%M)
LOG="/var/log/backup.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG; }
log "===== 备份开始 ====="
mkdir -p $BACKUP_DIR
log "备份网站文件..."
tar -czf $BACKUP_DIR/www-$DATE.tar.gz $SRC_WWW
log "备份数据库..."
mysqldump -u root blogdb | gzip > $BACKUP_DIR/db-$DATE.sql.gz
log "清理 7 天前旧备份..."
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
log "===== 备份完成 ====="
逐段讲解:set -e 出错即停;log 函数同时输出到屏幕和日志文件(tee -a);tar 打包网站;mysqldump 备份数据库管道给 gzip;find -mtime +7 删旧的。
cron 定时
chmod +x /opt/backup.sh
crontab -e
0 3 * * * /opt/backup.sh
恢复演练(备份不演练等于没备)
# 找个测试目录恢复验证
mkdir /tmp/restore_test
tar -xzf /backup/www-20261009_0300.tar.gz -C /tmp/restore_test
ls /tmp/restore_test
# 数据库恢复到测试库
zcat /backup/db-20261009_0300.sql.gz | mysql -u root testdb
监控思路
# 备份失败告警:检查日志里有没有"完成"
grep -q "备份完成" /var/log/backup.log || echo "备份失败!" | mail -s "备份告警" admin@example.com
# 磁盘空间告警(L9 知识)
df -h /backup | awk 'NR==2 {if ($5+0 > 90) print "磁盘快满了"}'
L1→L15 全系列回顾
结语
15 课,从敲下第一个 ls 到自动化备份上线,你已经能独立管一台 Linux 服务器了。真正的学习在生产环境里——去折腾,去踩坑,去看日志。Root 日记系列完结,江湖再见。