很多站长只做手动备份、或者只做单本地备份,一旦遇到服务器硬盘损坏、误删数据、网站被入侵挂马,数据会直接全部丢失。最稳妥的运维方案就是本地自动备份 + 异地远程备份双保险,本文给你一套可直接投产、自动清理、全程无人值守的网站完整备份方案。
一、备份方案架构介绍
整套方案采用三层防护机制,兼顾安全与磁盘性能:
- 本地自动备份:每日打包网站源码 + MySQL数据库
- 自动过期清理:仅保留最近7天备份,防止备份撑满磁盘
- 异地远程同步:自动同步备份至第二台服务器,彻底杜绝丢数据风险
二、创建服务器备份目录
先统一创建备份专属目录,规范存放所有备份文件与日志:
mkdir -p /data/backup/site
mkdir -p /data/backup/sql
mkdir -p /data/backup/log
三、MySQL数据库自动备份脚本
创建数据库备份脚本文件:
vim /data/backup/sql_backup.sh
粘贴以下完整脚本,只需修改顶部数据库信息即可直接使用:
#!/bin/bash
# 请修改为自己的数据库信息
DB_USER="数据库用户名"
DB_PASS="数据库密码"
DB_NAME="数据库名"
# 备份存放目录
BACKUP_DIR="/data/backup/sql"
LOG_PATH="/data/backup/log/sql_backup.log"
DATE=$(date +%Y%m%d)
# 数据库导出并压缩
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# 写入备份日志
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 数据库备份成功:db_$DATE.sql.gz" >> $LOG_PATH
# 自动删除7天前旧备份
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete
添加脚本执行权限:
chmod +x /data/backup/sql_backup.sh
四、网站源码自动备份脚本
创建站点文件备份脚本:
vim /data/backup/file_backup.sh
填入完整源码备份脚本,可自行修改网站目录:
#!/bin/bash
# 修改为你的网站根目录
SITE_ROOT="/www/wwwroot/你的网站目录"
BACKUP_DIR="/data/backup/site"
LOG_PATH="/data/backup/log/file_backup.log"
DATE=$(date +%Y%m%d)
# 打包网站文件,自动排除缓存、日志目录,减小备份体积
tar -zcvf $BACKUP_DIR/site_$DATE.tar.gz --exclude=runtime --exclude=logs $SITE_ROOT
# 记录日志
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 站点备份成功:site_$DATE.tar.gz" >> $LOG_PATH
# 清理7天过期备份
find $BACKUP_DIR -name "site_*.tar.gz" -mtime +7 -delete
授予执行权限:
chmod +x /data/backup/file_backup.sh
五、配置异地免密同步(核心防丢数据)
想要自动异地备份,必须配置SSH免密登录,否则定时任务无法自动传输文件。
生成服务器密钥:
ssh-keygen -t ed25519
全程直接回车,无需设置密码。
推送公钥到异地备份服务器(替换为你的异地服务器IP):
ssh-copy-id root@异地服务器IP
创建异地同步脚本:
vim /data/backup/remote_sync.sh
同步脚本完整内容:
#!/bin/bash
# 异地服务器信息自行修改
REM_USER="root"
REM_IP="异地服务器IP"
REM_DIR="/data/backup/remote"
LOG_PATH="/data/backup/log/sync.log"
# 创建异地目录
ssh $REM_USER@$REM_IP "mkdir -p $REM_DIR/sql $REM_DIR/site"
# 同步数据库备份
scp /data/backup/sql/*.gz $REM_USER@$REM_IP:$REM_DIR/sql/
# 同步网站源码备份
scp /data/backup/site/*.tar.gz $REM_USER@$REM_IP:$REM_DIR/site/
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 异地备份同步完成" >> $LOG_PATH
添加运行权限:
chmod +x /data/backup/remote_sync.sh
六、配置Crontab全自动定时任务
打开定时任务编辑器:
crontab -e
粘贴以下定时规则(行业通用稳定时间):
# 每日凌晨2点备份数据库
0 2 * * * /data/backup/sql_backup.sh
# 每日凌晨3点备份网站源码
0 3 * * * /data/backup/file_backup.sh
# 每日凌晨4点同步所有备份到异地服务器
0 4 * * * /data/backup/remote_sync.sh
查看任务是否生效:
crontab -l
七、备份包完整性校验(可选推荐)
防止备份压缩包损坏、无法恢复,可加入自动校验命令。
数据库压缩包校验:
gzip -t 备份文件路径
网站压缩包校验:
tar -tzf 备份文件路径
八、运维注意事项
- 不要只依赖本地备份!单服务器硬盘损坏、误格式化会直接清空所有数据,异地备份是站长最后一道防线。
- 脚本自带7天自动清理,无需手动删文件,不会撑满服务器磁盘。
- 备份目录不要暴露在网站可访问目录,防止黑客批量下载你的源码与数据库。
- 建议每月手动测试一次恢复流程,确保备份包完整可用。
- 数据库账号尽量使用只读备份权限,不要用最高权限账号,提升安全性。
总结
本地自动备份 + 异地远程同步 + 自动过期清理,这套方案构成了网站数据保护的完整闭环。部署完成后,服务器每天凌晨自动执行备份与同步,全程无需人工干预。建议部署后先手动运行一遍三个脚本,确认无报错再交给定时任务托管。数据无价,备份先行。





