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"
rsync -a --delete "$SOURCE/" "$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)与备份产出是否一致。