运维有两件事平时看不出价值、出事时能救命:备份和监控。这篇讲最小可用的做法。
一、备份 3-2-1 原则
- 3 份数据(1 份原始 + 2 份备份)
- 2 种不同介质(如本地磁盘 + 云存储/异地)
- 1 份异地(防机房/服务器整体故障)
哪怕只做到"定时备份 + 一份传到异地",也比不备份强一百倍。
二、文件备份 rsync
# 把 /var/www 同步到备份目录(增量)
rsync -avz /var/www/ /backup/www/
# 同步到远程服务器
rsync -avz /var/www/ user@backup-host:/backup/www/
-a 保留权限/时间戳,-z 压缩,--delete 让目标与源完全一致(慎用)。
三、数据库备份 mysqldump
# 单库
mysqldump -u root -p mydb > /backup/mydb_$(date +%F).sql
# 全部库
mysqldump -u root -p --all-databases > /backup/all_$(date +%F).sql
# 恢复
mysql -u root -p mydb < /backup/mydb_2026-08-15.sql
大库建议用 --single-transaction(InnoDB 不锁表)或物理备份工具,初级先用 mysqldump。
四、定时备份脚本
/opt/backup.sh:
#!/usr/bin/env bash
set -e
DIR=/backup
DATE=$(date +%F)
mkdir -p "$DIR"
# 备份数据库
mysqldump -u root -p'密码' --all-databases | gzip > "$DIR/db_$DATE.sql.gz"
# 备份网站
tar czf "$DIR/www_$DATE.tar.gz" /var/www
# 只保留最近 7 份
find "$DIR" -name "*.gz" -mtime +7 -delete
chmod +x /opt/backup.sh
crontab -e
# 每天凌晨 3 点执行
0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1
五、轻量监控脚本
不装重型监控,用 shell 脚本盯三件事:磁盘、内存、服务存活。
#!/usr/bin/env bash
# 磁盘使用率超 90% 告警
USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$USAGE" -gt 90 ]; then
curl -s "https://你的webhook地址" -d '{"msg":"磁盘告警:使用率 '$USAGE'%"}'
fi
# 服务没在跑就告警
if ! systemctl is-active --quiet nginx; then
curl -s "https://你的webhook地址" -d '{"msg":"nginx 挂了"}'
fi
放到 cron 每 5 分钟跑一次。
六、告警通道(飞书/钉钉/Server酱)
都是"往一个 webhook URL 发 POST 请求":
- Server酱:微信推送,最简单,
https://sctapi.ftqq.com/<SENDKEY>.send?title=xxx - 飞书/钉钉:群机器人 webhook,POST JSON
# Server酱 示例
curl -s "https://sctapi.ftqq.com/你的KEY.send" \
--data-urlencode "title=磁盘告警" \
--data-urlencode "desp=使用率 92%"
拿到 key 就能接到前面的监控脚本里。
小结
| 目标 | 最小方案 |
|---|---|
| 备份文件 | rsync + 定时 |
| 备份数据库 | mysqldump + 定时 + 保留 N 份 |
| 监控 | 磁盘/内存/服务存活 shell 脚本 + cron |
| 告警 | Server酱 / 飞书 / 钉钉 webhook |
备份要定期做 + 定期验证能恢复(备份不恢复等于没备份),监控要能真正触达你(别静默失败)。