菜单

Administrator
发布于 2026-10-10 / 2 阅读
0
0

Linux 学习笔记 L15:自动化备份实战

系列收官。把 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 全系列回顾

课

主题

核心命令

L1

终端初体验

whoami/pwd/ls

L2

目录导航

cd/ls -l

L3

文件操作

mkdir/cp/mv/rm

L4

查看文件

cat/less/tail

L5

网络诊断

ip/ping/ss/curl

L6

权限用户

chmod/chown/sudo

L7

软件包管理

apt/dpkg

L8

进程管理

ps/kill/jobs

L9

磁盘文件系统

df/du/mount

L10

SSH 远程

ssh/scp/keygen

L11

Shell 脚本

变量/if/for

L12

文本处理

grep/sed/awk

L13

定时日志

cron/journalctl

L14

Web 服务

nginx

L15

备份实战

综合项目

结语

15 课,从敲下第一个 ls 到自动化备份上线,你已经能独立管一台 Linux 服务器了。真正的学习在生产环境里——去折腾,去踩坑,去看日志。Root 日记系列完结,江湖再见。


评论