半夜两点数据库被误删,或者服务器磁盘突然掉盘,这种事不是“会不会发生”,而是“什么时候发生”。很多站长以为每天有快照就高枕无忧,真到要恢复的那天才发现快照早已失效,或者恢复出来的数据是三个月前的。备份这件事,做和做对是两码事。
一套能救命的备份,至少要满足两件事:一是同时有本地和异地两份,本地丢了异地还能拉回来;二是备份之后真的演练过恢复,确认能跑通。下面这套本地加异地的双备份方案,不依赖任何付费工具,用系统自带命令就能搭起来。
一、先想清楚要备份哪两类东西
网站数据分两部分:程序文件(代码、上传的图片附件、配置文件)和数据库(文章、用户、订单等动态内容)。只备份文件不备份数据库,等于丢了站里最值钱的部分;只备份数据库不备份文件,恢复后样式和附件全无。正确做法是两类都备,且打在同一个时间戳的目录里,方便整体回滚。
二、本地备份:文件打包加数据库导出
下面这段脚本把网站根目录打包成带日期的压缩包,同时把 MySQL 数据库导出成 SQL 文件,都放到 /backup/local 下。要改的地方是 SITE_DIR(网站根目录)、DB 名称、数据库账号密码,以及保留份数 KEEP。跑完看 /backup/local 目录里有没有当天日期的文件,且 SQL 文件大小不为零。
# 本地备份:网站文件 + MySQL 数据库,按日期存放
#!/bin/bash
SITE_DIR="/var/www/example.com"
DB_NAME="exampledb"
DB_USER="backup"
DB_PASS="你的数据库密码"
OUT="/backup/local"
DATE=$(date +%F)
mkdir -p "$OUT/$DATE"
# 1) 打包网站文件
tar -czf "$OUT/$DATE/files.tar.gz" -C "$(dirname $SITE_DIR)" "$(basename $SITE_DIR)"
# 2) 导出数据库
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$OUT/$DATE/db.sql.gz"
# 3) 只保留最近 7 天
find "$OUT" -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
echo "本地备份完成:$OUT/$DATE
验证文件是否有效的关键一步:别只看文件在不在,要用 zcat 把 db.sql.gz 解出来看看前几行是不是正常的 SQL 文本。如果文件是空壳,到了恢复那天就是零。养成习惯,备份脚本跑完顺手 zcat db.sql.gz | head 看一眼。
三、异地备份:把本地副本同步到另一台机器
本地备份防的是误删和单盘故障,防不了整机宕机或机房问题。异地备份建议传到另一台独立服务器、对象存储或者家里的 NAS。下面用 rsync 把本地备份目录推到异地机,rsync 只传变化的文件,第二次起速度很快。要改的是远端地址、远端路径,以及本地的 SSH 密钥(用密钥登录,别在脚本里写密码明文)。
# 异地同步:把本地备份推到远端,增量传输
#!/bin/bash
LOCAL="/backup/local"
REMOTE="backupuser@backup.example.com:/backup/remote/example.com"
# 用 SSH 密钥免密登录,限流 1MB/s 避免打满带宽
rsync -az --bwlimit=1024 -e ssh "$LOCAL/" "$REMOTE/"
echo "异地同步完成,远端路径:$REMOTE
rsync 跑完没有报错、且远端目录里出现了对应日期的文件夹,就说明异地副本到位了。建议每周挑一天手动登录远端机,ls 一下确认文件确实在,别完全信任脚本的回显。
四、恢复演练:备份做完必须经过这一关
很多人栽在“备份有、恢复不会”。恢复演练要在非生产环境跑一遍:新建一个临时数据库,把 db.sql.gz 导进去,解开 files.tar.gz 挂到测试域名下,打开页面看能不能正常访问、文章数据在不在。下面这段是数据库恢复的命令,先在测试库上练,确认无误再写进应急预案。
# 恢复演练:把备份的数据库导入到测试库验证可用性
#!/bin/bash
TEST_DB="example_restore_test"
zcat /backup/local/$(date +%F)/db.sql.gz | mysql -u root -p"$ROOT_PASS" "$TEST_DB"
echo "已恢复到测试库 $TEST_DB,去测试域名核对数据后再删库
演练的结论要记一笔:恢复耗时多久、数据是否完整、有没有权限报错。一份没有演练记录的备份,在出事时没人敢用。把演练日期和结果写进运维文档,下次真要恢复时照着走就行。
相关阅读:
A5创业网 版权所有