> 服务器硬盘坏了、被黑客删库、误操作删了重要文件——这些事情不常发生,但一旦发生就是灾难。一套好的自动备份方案,是你网站的最后一道保险。
---
## 备份什么?
网站数据分为两部分:
| 内容 | 位置 | 说明 |
|------|------|------|
| 数据库 | SQLite/MySQL | 文章、用户、评论等 |
| 文件 | 网站目录 | 主题、插件、上传的图片 |
两者都要备份,缺一不可。
---
## 方案一:Shell 脚本 + crontab
创建备份脚本 /opt/backup.sh:
```bash
#!/bin/bash
BACKUP_DIR="/mnt/mmcblk1p1/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 备份数据库
tar -czf "$BACKUP_DIR/db_$DATE.tar.gz" /mnt/mmcblk1p1/typecho/usr/typecho.db
# 备份网站文件
tar -czf "$BACKUP_DIR/files_$DATE.tar.gz" /var/www/html/
# 删除 7 天前的旧备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
echo "Backup completed at $DATE"
```
添加定时任务(每天凌晨 3 点执行):
```bash
chmod +x /opt/backup.sh
crontab -e
# 添加这一行:
0 3 * * * /opt/backup.sh >> /var/log/backup.log 2>&1
```
---
## 方案二:rsync 增量备份
rsync 只同步变化的部分,适合大文件:
```bash
rsync -avz --delete /var/www/html/ /mnt/backup/html/
```
---
## 方案三:异地备份(强烈推荐)
如果备份和网站放在同一块硬盘上,硬盘坏了全完蛋。建议用 rclone 同步到云存储:
```bash
# 安装 rclone
curl https://rclone.org/install.sh | bash
# 配置(以 Google Drive 为例)
rclone config
# 同步备份目录到云端
rclone sync /mnt/backups remote:blog-backups
```
支持 OneDrive、Google Drive、Dropbox、阿里云 OSS 等。
---
## 备份策略建议
| 频率 | 保留数量 | 存储位置 |
|------|---------|---------|
| 每天 | 保留最近 7 天 | 本地 |
| 每周 | 保留最近 4 周 | 异地(云存储) |
| 每月 | 保留最近 3 个月 | 异地(云存储) |
---
## 恢复备份
备份再好,不会恢复等于白做:
```bash
# 恢复数据库
cd /tmp && tar -xzf db_backup.tar.gz
cp typecho.db /mnt/mmcblk1p1/typecho/usr/
# 恢复网站文件
tar -xzf files_backup.tar.gz -C /
# 检查文件权限
chown -R www-data:www-data /var/www/html/
```
---
花 10 分钟配好自动备份,可能在未来某天帮你省下几天的修复时间。数据无价,备份别省。