网站备份怎么做?本地加异地双备份与恢复演练

来源:互联网 时间:2026-09-29

半夜两点数据库被误删,或者服务器磁盘突然掉盘,这种事不是“会不会发生”,而是“什么时候发生”。很多站长以为每天有快照就高枕无忧,真到要恢复的那天才发现快照早已失效,或者恢复出来的数据是三个月前的。备份这件事,做和做对是两码事。

一套能救命的备份,至少要满足两件事:一是同时有本地和异地两份,本地丢了异地还能拉回来;二是备份之后真的演练过恢复,确认能跑通。下面这套本地加异地的双备份方案,不依赖任何付费工具,用系统自带命令就能搭起来。

一、先想清楚要备份哪两类东西

网站数据分两部分:程序文件(代码、上传的图片附件、配置文件)和数据库(文章、用户、订单等动态内容)。只备份文件不备份数据库,等于丢了站里最值钱的部分;只备份数据库不备份文件,恢复后样式和附件全无。正确做法是两类都备,且打在同一个时间戳的目录里,方便整体回滚。

二、本地备份:文件打包加数据库导出

下面这段脚本把网站根目录打包成带日期的压缩包,同时把 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,去测试域名核对数据后再删库

演练的结论要记一笔:恢复耗时多久、数据是否完整、有没有权限报错。一份没有演练记录的备份,在出事时没人敢用。把演练日期和结果写进运维文档,下次真要恢复时照着走就行。

相关阅读:

《备份做了却恢复不了?多半是没做过恢复演练》

《服务器安全加固怎么做?端口、账号、权限的加固清单》

《网站加载速度优化方法:从TTFB到首屏逐层拆解》

相关文章

A5创业网 版权所有

返回顶部