InterServer Web Hosting and VPS

实现网站自动备份并发送到邮箱

9,475次阅读

实现网站自动备份并发送到邮箱,是保障数据安全最有效的手段之一。我们可以通过编写一个简单的 Shell 脚本,并配合 Linux 系统自带的 Crontab 定时任务来实现。以下是分步操作指南,帮助你在每天凌晨 2 点自动完成这项任务。


第一步:准备备份脚本

我们需要创建一个脚本文件,它的工作流程是: 进入目录 -> 打包文件 -> 导出数据库 -> 二次打包 -> 发送邮件

  1. 在服务器上创建一个脚本,例如 auto_backup.sh

    Bash

    nano /root/auto_backup.sh
    
  2. 将以下内容复制并修改(替换为你自己的路径和数据库密码):

Bash

#!/bin/bash

# --- 设置变量 ---
WEB_DIR="/var/www/html"          # 网站根目录 
DB_USER="root"                   # 数据库用户名 
DB_PASS="你的数据库密码"          # 数据库密码 
DB_NAME="你的数据库名"            # 想要备份的数据库名 
BACKUP_PATH="/root/site_backups" # 备份存放的临时目录 
EMAIL="backup@gmail.com"         # 接收备份的邮箱 
DATE=$(date +%Y%m%d)

# 创建备份目录 
mkdir -p $BACKUP_PATH

# 1. 打包网站文件 
tar -zcvf $BACKUP_PATH/files_$DATE.tar.gz $WEB_DIR

# 2. 导出并打包数据库 
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_PATH/db_$DATE.sql
tar -zcvf $BACKUP_PATH/database_$DATE.tar.gz $BACKUP_PATH/db_$DATE.sql

# 3. 将文件和数据库打包成一个大 ZIP 包 
zip -j $BACKUP_PATH/full_backup_$DATE.zip $BACKUP_PATH/files_$DATE.tar.gz $BACKUP_PATH/database_$DATE.tar.gz

# 4. 发送邮件(使用 mail 命令)
echo "这是 $DATE 的网站自动备份文件。" | mail -s "网站备份_$DATE" -a $BACKUP_PATH/full_backup_$DATE.zip $EMAIL

# 5. 清理临时文件(可选,防止占用服务器空间)
rm -rf $BACKUP_PATH/*

第二步:安装必要的工具

为了让脚本顺利运行,你的服务器需要安装 zip 和邮件发送工具。在 Debian/Ubuntu 系统下执行:

Bash

apt update
apt install zip mailutils postfix -y

在安装 Postfix 时,通常选择 “Internet Site” 即可。


第三步:赋予脚本执行权限

脚本写好后,它默认只是一个文本文件,我们需要告诉系统:“这是一个可以运行的程序”。

Bash

chmod +x /root/auto_backup.sh

第四步:设置凌晨两点的定时任务

Linux 系统的 Crontab 就像一个闹钟,可以准时触发脚本。

  1. 输入命令进入编辑模式:

    Bash

    crontab -e
    
  2. 在文件末尾添加以下这一行:

    代码段

    00 02 * * * /bin/bash /root/auto_backup.sh
    
    
   ** 说明:**
   * `00 02` 代表 02:00。* `* * *` 分别代表日期、月份、星期(星号表示每天)。---

### 关键步骤通俗说明

#### 1. 为什么文件和数据库要分开打包?这叫 ** 解耦 **。如果网站代码没变,只有文章更新了,你以后可以只解压数据库包,速度更快,也更灵活。#### 2. 为什么要二次压缩成 ZIP?虽然 `.tar.gz` 在 Linux 下很常用,但发送给 Gmail 时,ZIP 格式的兼容性最好,且能将多个零散的压缩包汇总成一个附件,方便下载。#### 3. 关于自动发送邮件
脚本中的 `mail` 命令会通过服务器自带的 MTA 发送。如果你的服务器 IP 被 Gmail 拒收(常见于阿里云 / 腾讯云封禁 25 端口),你可能需要配置 **SMTP**(如使用 Gmail 或 SendGrid 的 SMTP 服务)来确保邮件必达。---

### 注意事项
* ** 磁盘空间 **:定期检查 `/root/site_backups` 目录。虽然脚本里写了 `rm` 清理命令,但如果发送失败,建议手动观察几次。* ** 安全 **:脚本中含有数据库密码,请确保该脚本文件的权限仅限 root 用户查看(`chmod 700`)。
正文完
 0