站点定期自动备份方案:本地+异地双备份防数据丢失


很多站长只做手动备份、或者只做单本地备份,一旦遇到服务器硬盘损坏、误删数据、网站被入侵挂马,数据会直接全部丢失。最稳妥的运维方案就是本地自动备份 + 异地远程备份双保险,本文给你一套可直接投产、自动清理、全程无人值守的网站完整备份方案。

img


一、备份方案架构介绍

整套方案采用三层防护机制,兼顾安全与磁盘性能:

  1. 本地自动备份:每日打包网站源码 + MySQL数据库
  2. 自动过期清理:仅保留最近7天备份,防止备份撑满磁盘
  3. 异地远程同步:自动同步备份至第二台服务器,彻底杜绝丢数据风险

二、创建服务器备份目录

先统一创建备份专属目录,规范存放所有备份文件与日志:

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 备份文件路径

八、运维注意事项

  1. 不要只依赖本地备份!单服务器硬盘损坏、误格式化会直接清空所有数据,异地备份是站长最后一道防线。
  2. 脚本自带7天自动清理,无需手动删文件,不会撑满服务器磁盘。
  3. 备份目录不要暴露在网站可访问目录,防止黑客批量下载你的源码与数据库。
  4. 建议每月手动测试一次恢复流程,确保备份包完整可用。
  5. 数据库账号尽量使用只读备份权限,不要用最高权限账号,提升安全性。

总结

本地自动备份 + 异地远程同步 + 自动过期清理,这套方案构成了网站数据保护的完整闭环。部署完成后,服务器每天凌晨自动执行备份与同步,全程无需人工干预。建议部署后先手动运行一遍三个脚本,确认无报错再交给定时任务托管。数据无价,备份先行。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

ARP大二层广播风暴原理详解、隔离实验复现与防护方案

Nginx静态资源高性能配置,提升网站加载速度

评 论
更换验证码