温馨提示×

Apache2在CentOS上的备份方法

小樊
37
2025-11-25 21:16:12
栏目: 智能运维

备份范围与准备

  • 在 CentOS 上,Apache 服务名为 httpd。建议完整备份以下目录与数据:
    • 配置文件:/etc/httpd/conf//etc/httpd/conf.d/(虚拟主机)、以及 /etc/pki/tls/(SSL 证书与密钥)。
    • 网站文件:默认 /var/www/html/,如自定义了 DocumentRoot,以其为准。
    • 日志文件:/var/log/httpd/(可选,便于审计与排错)。
    • 数据库:如网站使用 MySQL/MariaDBPostgreSQL,需单独备份数据库。
  • 准备备份目录并确认权限:
    • 创建目录:sudo mkdir -p /backup/httpd
    • 确认服务名:systemctl status httpd(应为 active (running))。

手动备份步骤

  • 备份配置文件与 SSL:
    • sudo tar -czvf /backup/httpd/conf_backup_$(date +%F).tar.gz /etc/httpd/conf /etc/httpd/conf.d
    • sudo tar -czvf /backup/httpd/ssl_backup_$(date +%F).tar.gz /etc/pki/tls
  • 备份网站文件(按实际 DocumentRoot 调整):
    • sudo tar -czvf /backup/httpd/www_backup_$(date +%F).tar.gz /var/www/html
  • 备份日志(可选):
    • sudo tar -czvf /backup/httpd/logs_backup_$(date +%F).tar.gz /var/log/httpd
  • 备份数据库(如适用):
    • MySQL/MariaDB:sudo mysqldump -u root -p --all-databases > /backup/httpd/mysql_backup_$(date +%F).sql
    • PostgreSQL:sudo -u postgres pg_dumpall > /backup/httpd/pg_backup_$(date +%F).sql
  • 验证归档完整性(示例):
    • tar -tzvf /backup/httpd/conf_backup_$(date +%F).tar.gz | head

自动化备份脚本与定时任务

  • 备份脚本示例(/usr/local/bin/backup_httpd.sh):
    • 说明:包含配置、网站、日志与数据库备份;自动创建目录;保留最近 7 天 归档;输出日志。
    • 内容:
      #!/bin/bash
      BACKUP_DIR="/backup/httpd"
      DATE=$(date +%Y%m%d%H%M%S)
      mkdir -p "$BACKUP_DIR"
      
      # 配置与 SSL
      tar -czf "$BACKUP_DIR/conf_backup_$DATE.tar.gz" /etc/httpd/conf /etc/httpd/conf.d /etc/pki/tls 2>/dev/null
      
      # 网站文件(按实际 DocumentRoot 调整)
      tar -czf "$BACKUP_DIR/www_backup_$DATE.tar.gz" /var/www/html 2>/dev/null
      
      # 日志(可选)
      tar -czf "$BACKUP_DIR/logs_backup_$DATE.tar.gz" /var/log/httpd 2>/dev/null
      
      # 数据库(按需启用其一或全选)
      # mysqldump -u root -p --all-databases > "$BACKUP_DIR/mysql_backup_$DATE.sql" 2>/dev/null
      # sudo -u postgres pg_dumpall > "$BACKUP_DIR/pg_backup_$DATE.sql" 2>/dev/null
      
      # 保留最近 7 天
      find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
      find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -delete
      
      echo "Apache backup completed at $(date)" >> /var/log/httpd_backup.log
      
    • 赋权:sudo chmod +x /usr/local/bin/backup_httpd.sh
  • 定时任务(每天 02:00 执行):
    • sudo crontab -e
    • 添加:0 2 * * * /usr/local/bin/backup_httpd.sh >> /var/log/httpd_backup.log 2>&1
  • 远程备份(可选,使用 SCP 推送到远程主机):
    • 在脚本末尾追加(按需启用):
      scp "$BACKUP_DIR/conf_backup_$DATE.tar.gz" user@remote:/backup/
      scp "$BACKUP_DIR/www_backup_$DATE.tar.gz" user@remote:/backup/
      scp "$BACKUP_DIR/mysql_backup_$DATE.sql" user@remote:/backup/
      
    • 需提前配置 SSH 免密登录 或在脚本中安全处理凭据。

恢复步骤

  • 准备与校验:
    • 建议先备份当前状态:sudo cp -a /etc/httpd /etc/httpd.bak_$(date +%F)(如涉及网站文件,也先备份当前站点)。
    • 如条件允许,先停止服务:sudo systemctl stop httpd
  • 恢复文件:
    • 配置与 SSL:
      • sudo tar -xzvf /backup/httpd/conf_backup_*.tar.gz -C /
      • sudo tar -xzvf /backup/httpd/ssl_backup_*.tar.gz -C /
    • 网站文件:
      • sudo tar -xzvf /backup/httpd/www_backup_*.tar.gz -C /
    • 日志(可选):
      • sudo tar -xzvf /backup/httpd/logs_backup_*.tar.gz -C /
  • 配置校验与服务启动:
    • 语法检查:sudo apachectl configtest
    • 启动服务:sudo systemctl start httpd
    • 访问站点或检查端口 80/443 确认恢复成功。

注意事项与最佳实践

  • 目录一致性:确认 DocumentRoot 与虚拟主机配置路径,避免漏备或错备。
  • 权限与安全:证书与密钥(如 /etc/pki/tls)属敏感文件,备份与传输需加密,存储权限设为 600/700
  • 版本与变更管理:每次变更配置或上线前先做一次备份,归档文件名包含 时间戳,便于回滚。
  • 异地与多副本:至少保留一份 异地/离线 副本;定期在测试环境演练恢复流程。
  • 监控与告警:为备份脚本添加日志与返回码检查,必要时接入监控告警。

0