温馨提示×

怎样在Apache中设置自动备份

小樊
40
2026-01-01 10:48:08
栏目: 编程语言

Apache自动备份实操指南

一 备份范围与准备

  • 明确备份对象:网站根目录(如 /var/www/html/var/www)、Apache 配置目录(CentOS/RHEL:/etc/httpd/conf 与 /etc/httpd/conf.d;Ubuntu/Debian:/etc/apache2)、以及必要的 SSL 证书目录(如 /etc/letsencrypt)。
  • 准备环境:安装常用工具(如 rsync、tar、cron),并创建专用备份目录(如 /backup/apache),确保运行备份的用户对该目录有读写权限。
  • 变更前先做配置语法检查(如 apachectl configtest),避免错误配置导致服务异常。

二 方案一 使用Shell脚本配合rsync做增量备份(推荐)

  • 适用场景:网站内容频繁变更,需要高效增量、可回滚。
  • 示例脚本(/usr/local/bin/backup_apache.sh):
#!/bin/bash
set -Eeuo pipefail

# 可调参数
SOURCE="/var/www/html"
BACKUP_BASE="/backup/apache"
DATE_TAG=$(date +%Y%m%d%H%M%S)
BACKUP_DIR="$BACKUP_BASE/$DATE_TAG"
LOG_FILE="/var/log/apache_backup.log"

# 创建目录
mkdir -p "$BACKUP_DIR"

# 增量同步网站文件(保留权限、软链;--delete 保持与源一致)
rsync -a --delete "$SOURCE/" "$BACKUP_DIR/"

# 可选:同步配置与证书
# rsync -a /etc/httpd/conf /etc/httpd/conf.d "$BACKUP_DIR/"
# rsync -a /etc/letsencrypt "$BACKUP_DIR/letsencrypt"

# 可选:压缩归档
# tar -czf "$BACKUP_DIR.tar.gz" -C "$BACKUP_DIR" .

# 记录日志
echo "[$(date '+%F %T')] Backup finished: $BACKUP_DIR" >> "$LOG_FILE"
  • 赋权并测试:
    • chmod +x /usr/local/bin/backup_apache.sh
    • /usr/local/bin/backup_apache.sh && tail -n 50 /var/log/apache_backup.log
  • 定时任务(每天 02:00 执行):
    • crontab -e
    • 0 2 * * * /usr/local/bin/backup_apache.sh >> /var/log/apache_backup.log 2>&1

三 方案二 使用tar打包备份配置与网站内容(简单稳妥)

  • 适用场景:变更不频繁,强调“全量快照”与易归档。
  • 示例脚本(/usr/local/bin/backup_apache_tar.sh):
#!/bin/bash
set -Eeuo pipefail

BACKUP_BASE="/backup/apache"
DATE_TAG=$(date +%Y%m%d)
OUT_FILE="$BACKUP_BASE/apache_backup_$DATE_TAG.tar.gz"
LOG_FILE="/var/log/apache_backup.log"

mkdir -p "$BACKUP_BASE"

# 打包配置与网站根目录(按需增删路径)
tar -czf "$OUT_FILE" \
  /etc/httpd/conf /etc/httpd/conf.d \
  /var/www/html \
  /etc/letsencrypt 2>>"$LOG_FILE"

echo "[$(date '+%F %T')] Tar backup finished: $OUT_FILE" >> "$LOG_FILE"
  • 定时任务(每天 01:00 执行):
    • 0 1 * * * /usr/local/bin/backup_apache_tar.sh

四 远程备份、通知与保留策略

  • 远程备份(rsync over SSH):
    • 在备份脚本中加入:rsync -avz --delete “$BACKUP_DIR” user@remote:/path/to/backup/
    • 或推送压缩包:rsync -avz “$BACKUP_DIR.tar.gz” user@remote:/path/to/backup/
  • 备份结果通知(mailx 示例):
    • 前提:配置好 /etc/mail.rc 或 ~/.mailrc 的发信参数
    • 在脚本末尾追加:echo “Apache backup completed at $(date)” | mailx -s “Apache Backup Notification” your_email@example.com
  • 保留策略(示例:保留最近 7 天):
    • 在脚本末尾追加:find “$BACKUP_BASE” -maxdepth 1 -type d -mtime +7 -exec rm -rf {} ;
    • 若使用 tar 归档:find “$BACKUP_BASE” -name “apache_backup_*.tar.gz” -mtime +7 -delete

五 恢复与验证

  • 配置恢复(示例):
    • CentOS/RHEL:cp /backup/apache/…/httpd.conf /etc/httpd/conf/httpd.conf
    • Ubuntu/Debian:cp /backup/apache/…/apache2.conf /etc/apache2/apache2.conf
    • 修改后先执行:apachectl configtest,确认 Syntax OK 再重启:systemctl restart httpd 或 systemctl restart apache2
  • 网站内容恢复(示例):
    • rsync -a --delete /backup/apache/20250101020000/ /var/www/html/
    • 或解压:tar -xzf /backup/apache/apache_backup_20250101.tar.gz -C /
  • 验证要点:
    • 定期做“恢复演练”,确认备份可用;
    • 检查日志文件(如 /var/log/apache_backup.log)与备份产出是否一致。

0