温馨提示×

CentOS Apache备份恢复

小樊
41
2025-12-17 13:18:05
栏目: 智能运维

CentOS 上 Apache 的备份与恢复

一 备份范围与准备

  • 备份范围建议包含:配置文件、网站根目录、SSL 证书与密钥、日志文件,以及依赖的数据库(如 MySQL/MariaDB)。
  • 常见路径与用途如下:
    项目 典型路径 说明
    主配置 /etc/httpd/conf/httpd.conf 主配置文件
    虚拟主机 /etc/httpd/conf.d/*.conf 按站点拆分配置
    网站文件 /var/www/html 或自定义 DocumentRoot 站点静态文件与程序
    SSL 证书 /etc/pki/tls/certs//etc/pki/tls/private/ 证书与私钥
    日志 /var/log/httpd/ 访问与错误日志
    数据库 由应用配置决定 建议用 mysqldump 单独备份
  • 准备:创建备份目录(如 /backup/apache),确保磁盘空间充足,必要时配置 SELinux 上下文或临时设为宽松模式以便备份与恢复。

二 手动备份步骤

  • 配置文件
    • 备份主配置与虚拟主机配置:
      • sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
      • sudo tar czf /backup/apache/conf_$(date +%F).tar.gz -C /etc/httpd conf
  • 网站文件
    • 备份站点根目录(示例为 /var/www/html):
      • sudo tar czf /backup/apache/html_$(date +%F).tar.gz -C /var/www html
  • SSL 证书与密钥
    • 备份证书与私钥目录:
      • sudo tar czf /backup/apache/ssl_$(date +%F).tar.gz -C /etc/pki/tls {certs,private}
  • 日志文件(可选)
    • 备份访问与错误日志:
      • sudo tar czf /backup/apache/logs_$(date +%F).tar.gz -C /var/log httpd
  • 数据库(如 MySQL/MariaDB)
    • 备份单个库:
      • mysqldump -u 用户名 -p 数据库名 > /backup/apache/db_$(date +%F).sql
    • 备份全部库:
      • mysqldump -u 用户名 -p --all-databases > /backup/apache/all_databases_$(date +%F).sql
  • 传输到远程存储(可选)
    • 使用 scprsync 将备份文件复制到远程主机或对象存储挂载目录。

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

  • 备份脚本示例(/usr/local/bin/backup_httpd.sh)
    • 功能:打包配置、站点、SSL、日志,保留最近 7 天,并记录日志。
    • 内容:
      • #!/bin/bash
        • set -e
        • BACKUP_DIR=“/backup/apache”
        • DATE=$(date +%F_%H%M%S)
        • mkdir -p “$BACKUP_DIR”
        • 配置

        • tar czf “$BACKUP_DIR/conf_$DATE.tar.gz” -C /etc/httpd conf
        • 站点

        • tar czf “$BACKUP_DIR/html_$DATE.tar.gz” -C /var/www html
        • SSL

        • tar czf “$BACKUP_DIR/ssl_$DATE.tar.gz” -C /etc/pki/tls {certs,private}
        • 日志(可选)

        • tar czf “$BACKUP_DIR/logs_$DATE.tar.gz” -C /var/log httpd
        • 清理旧备份

        • find “$BACKUP_DIR” -type f -name “*.tar.gz” -mtime +7 -delete
        • echo “[$DATE] Backup finished.” >> “$BACKUP_DIR/backup.log”
    • 赋权:
      • chmod +x /usr/local/bin/backup_httpd.sh
  • 定时任务(每天 02:00 执行并记录日志)
    • 0 2 * * * /usr/local/bin/backup_httpd.sh >> /var/log/httpd_backup.log 2>&1
  • 验证与演练
    • 手动执行一次脚本,确认 /backup/apache 生成文件且日志无报错;定期做恢复演练,确保备份可用。

四 恢复步骤

  • 准备
    • 建议先停止 httpd 以避免写入冲突:sudo systemctl stop httpd
    • 为防回滚失败,先备份当前状态:
      • sudo tar czf /backup/apache/pre_restore_$(date +%F_%H%M%S).tar.gz /etc/httpd /var/www /var/log/httpd
  • 恢复配置
    • 解压配置到目标目录:
      • sudo tar xzf /backup/apache/conf_YYYY-MM-DD_HHMMSS.tar.gz -C /
    • 语法检查:
      • sudo apachectl configtest
  • 恢复网站文件与 SSL
    • 站点文件:
      • sudo tar xzf /backup/apache/html_YYYY-MM-DD_HHMMSS.tar.gz -C /
    • SSL 证书与密钥:
      • sudo tar xzf /backup/apache/ssl_YYYY-MM-DD_HHMMSS.tar.gz -C /
  • 恢复数据库
    • 登录并导入:
      • mysql -u 用户名 -p 数据库名 < /backup/apache/db_YYYY-MM-DD.sql
      • 或导入全部库:mysql -u 用户名 -p < /backup/apache/all_databases_YYYY-MM-DD.sql
  • 启动与验证
    • 启动服务:sudo systemctl start httpd
    • 访问站点与查看错误日志(/var/log/httpd/error_log)确认运行状态。

五 注意事项与排错

  • 路径差异
    • CentOS 上服务名为 httpd(而非 Debian/Ubuntu 的 apache2);配置文件通常在 /etc/httpd/,站点根目录常见为 /var/www/html,日志在 /var/log/httpd/
  • 配置语法与回滚
    • 任何配置变更前先备份当前文件;恢复后务必执行 apachectl configtest,确认无误再启动服务。
  • 权限与所有权
    • 恢复后检查网站目录与证书文件的属主与权限(如 httpd 运行用户与组),避免因权限不当导致 403SSL 启动失败。
  • SELinux
    • 若启用 SELinux,恢复后可能需要恢复文件上下文:
      • sudo restorecon -R /var/www/html
      • sudo restorecon -R /etc/httpd
  • 日志与验证
    • 故障排查优先查看 /var/log/httpd/error_log;定期校验备份完整性与可恢复性,必要时保留多份异地/离线副本。

0