很多站长把网站部署上线之后,就很少再关心服务器上那些数据了。直到某天磁盘被日志写满、手滑删错了表、或者最糟的情况——服务器被入侵、商家跑路,才发现辛苦几年的心血全押在一台机器上,说没就没。其实数据备份这件事,一次性配置好,之后每天自动执行,占不了多少磁盘,也花不了几个钱,可它能在关键时刻救回你整个网站。本文按真实操作顺序,把 VPS 数据备份从"备份什么"到"异地容灾"一次讲清。
一、先搞清楚:服务器上到底有什么值得备份
VPS 上的数据按重要程度可以分成三类:
1. 数据库(最重要):WordPress、Typecho 等程序的数据全在 MySQL 里,一篇文章、一条评论、一个用户都在里面。
2. 网站文件:主题、插件、上传的图片附件,以及 Nginx 或 Apache 的站点配置。
3. 系统配置:crontab 定时任务、/etc 下的关键配置。这部分量小,但恢复的时候很关键。
原则很简单:宁可多备份,不可少备份。磁盘便宜,数据无价。
二、数据库备份:mysqldump 一条命令搞定
MySQL 自带的 mysqldump 就能导出整个数据库,先导出成 SQL 文件,再压缩保存:
mysqldump -uroot -p你的密码 --single-transaction --default-character-set=utf8mb4 数据库名 > /backup/db_$(date +%F).sql
gzip /backup/db_$(date +%F).sql--single-transaction 参数很关键,能保证导出过程中不影响线上写入。用宝塔面板的话,也可以在面板的"数据库"页面直接点备份,效果一样。
三、网站文件备份:tar 打包加压缩
网站文件用 tar 打包,一条命令带上压缩:
tar -czf /backup/www_$(date +%F).tar.gz /www/wwwroot/你的网站目录站点比较大的话,可以在打包时排除缓存目录,比如 WordPress 的 wp-content/cache,能省下不少时间和空间:
tar -czf /backup/www_$(date +%F).tar.gz --exclude='cache' /www/wwwroot/你的网站目录四、自动化:crontab 定时执行,再也不用手动
手动备份谁都会忘,重点是自动化。把上面的命令整理成一个脚本 backup.sh,再交给 crontab 定时执行:
crontab -e
# 每天凌晨 3 点自动执行
0 3 * * * bash /root/backup.sh脚本里建议顺手做两件事:删除 7 天前的旧备份,防止磁盘被撑爆;给备份目录收紧权限,防止被其他用户读取。
五、异地容灾:备份放在同一台机器上等于没备份
这一步最关键。如果服务器硬盘坏了、系统被入侵后数据被清空,本地备份一样跟着没。真正的安全感来自"异地"——把备份传到别的存储上。推荐用 rclone,一条命令就能把本地备份同步到 Google Drive、OneDrive、S3 或者你自己的另一台 VPS:
rclone copy /backup 远程存储名:backup配好 rclone 远程存储后,把它加进 backup.sh,每天备份完自动同步一份到云端。这样本地、异地各一份,就算机房出问题、商家跑路,数据也还在你手里。
六、别忘了验证:备份了不等于能恢复
不少人的备份做了两三年,真出事那天才发现备份文件是坏的——就是因为从来没验证过。恢复演练其实很简单:在另一台机器上把备份解压、导入数据库,打开网站看一眼是否正常。每季度做一次,半小时的成本,换来的是出事那天的心安。
写在最后
备份这件事,收益全部体现在"出事那天"。平时花半小时把自动备份和异地同步配好,之后基本不用再管。别等数据没了才想起来——到那个时候,花多少钱都买不回你写过的每一篇文章。