数据备份这件事,有一个非常真实的规律:没出事的时候觉得没必要,出事了之后肠子都悔青了。
云服务器上的数据丢失风险来自很多方面:硬盘故障、误操作删除、被黑客清空、系统崩溃……云厂商虽然保障底层基础设施的可靠性,但不负责你业务层面的数据。备份还是得自己搞。
备份什么
在考虑怎么备份之前,先搞清楚要备份什么:
- 数据库:网站内容、用户数据,通常是最重要的
- 网站文件:代码、上传的图片和附件
- 配置文件:Nginx/Apache配置、环境配置等
- 系统快照:整个服务器的镜像(如果需要快速恢复整个环境)
几种常见备份方案
方案一:云厂商快照(最简单)
腾讯云、阿里云等都提供云盘快照功能,可以对整个系统盘做定期快照。设置定时快照策略,每天或每周自动执行,出问题直接回滚。
优点:操作简单,无需写脚本,恢复也方便。
缺点:按存储量收费,快照多了成本不低;恢复时是整个磁盘回滚,无法只恢复某个文件。
适合:业务不复杂、对操作便利性要求高的场景。
方案二:数据库定时导出
对于MySQL/MariaDB数据库,可以写一个简单的shell脚本定时导出:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/db"
mkdir -p $BACKUP_DIR
mysqldump -u root -p'你的密码' --all-databases | gzip > $BACKUP_DIR/all_db_$DATE.sql.gz
# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
echo "备份完成: all_db_$DATE.sql.gz"
然后用cron定时执行:
# 每天凌晨2点执行
0 2 * * * /root/backup_db.sh >> /var/log/backup.log 2>&1
这个方案免费,灵活,数据库备份恢复也方便。
方案三:文件备份到对象存储
把备份文件传到云存储(腾讯云COS、阿里云OSS等),比放在本机安全很多——本机出问题,备份也跟着没了,意义不大。
可以用rclone这个工具,配置好对象存储连接后,一条命令就能同步:
# 同步网站目录到COS
rclone sync /var/www/html cos:your-bucket/website-backup/
结合cron定时执行,实现全自动备份。
方案四:WordPress专用(如果你用WordPress)
用UpdraftPlus插件是最简单的选择,可以定时自动备份数据库+文件,并且直接上传到Google Drive、Dropbox、OneDrive或者S3/COS等云存储。免费版功能已经够用了。
备份的几个基本原则
- 异地存储:备份不要只放在本机,最好放到另一个地方(对象存储、另一台服务器)
- 定期验证:备份文件是否能正常恢复,得实际测试一次,别以为有备份就万事大吉
- 保留多个版本:至少保留最近7天或者4周的备份,以防数据损坏好几天后才发现
- 自动化:手动备份迟早会忘,一定要搞成定时自动执行
从哪里开始
如果你现在完全没有备份,最快的起点是:打开云服务器控制台,开启系统盘的定时快照,哪怕一周一次,也比什么都没有强。然后再逐步完善数据库和文件的备份策略。
花半小时把备份配好,可能某一天能救你几天的工作量。