温馨提示×

Apache在CentOS上的备份与恢复怎么做

小樊
37
2025-12-23 10:19:04
栏目: 智能运维

CentOS 上 Apache 的备份与恢复

一 备份范围与准备

  • 备份范围建议包含:配置文件、网站根目录、SSL 证书与密钥、日志文件;如使用数据库,还需单独备份数据库。
  • 常见路径与用途如下(RPM 系默认):
    • 配置文件:/etc/httpd/conf//etc/httpd/conf.d/(虚拟主机)
    • 网站文件:/var/www/html/(或自定义虚拟主机目录)
    • 日志文件:/var/log/httpd/
    • SSL 证书:/etc/pki/tls/certs//etc/pki/tls/private/(按需)
    • 数据库:如 MySQL/MariaDB,使用 mysqldump 导出为 .sql
  • 准备与注意:
    • 创建备份目录(示例:/backup/apache),并确保有足够磁盘空间备份目录写入权限
    • 为降低风险,恢复前先对当前配置与数据做一次快照备份。
    • 如为源码安装,路径可能不同(如 /usr/local/apache2/),请按实际环境调整。

二 手动备份步骤

  • 配置文件
    • 备份主配置与虚拟主机配置:
      • sudo tar -czvf /backup/apache/conf_$(date +%F).tar.gz -C /etc httpd/conf /etc/httpd/conf.d
  • 网站文件
    • 备份网站根目录(示例为 /var/www/html):
      • sudo tar -czvf /backup/apache/html_$(date +%F).tar.gz -C /var/www html
  • 日志文件(可选)
    • 备份访问与错误日志:
      • sudo tar -czvf /backup/apache/logs_$(date +%F).tar.gz -C /var/log httpd
  • SSL 证书与密钥(可选)
    • 备份证书与私钥:
      • sudo tar -czvf /backup/apache/ssl_$(date +%F).tar.gz -C /etc/pki/tls certs private
  • 数据库(如 MySQL/MariaDB)
    • 导出数据库(示例数据库名为 mydb):
      • mysqldump -u username -p mydb > /backup/apache/db_$(date +%F).sql
  • 说明
    • 以上命令均使用 tar -czvf 生成 .tar.gz 归档,便于传输与长期保存;日期格式建议使用 %F(YYYY-MM-DD)或 %Y%m%d 统一命名。

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

  • 备份脚本示例(/usr/local/bin/backup_apache.sh)
    • 功能:打包配置、网站、日志、SSL,导出数据库,并按保留最近 7 天清理旧备份;输出日志便于审计。
    • 内容:
      • #!/bin/bash
        • set -e
        • BACKUP_DIR=“/backup/apache”
        • DATE=$(date +%F)
        • mkdir -p “$BACKUP_DIR”
        • 配置与虚拟主机

        • tar -czvf “$BACKUP_DIR/conf_$DATE.tar.gz” -C /etc httpd/conf httpd/conf.d
        • 网站文件

        • tar -czvf “$BACKUP_DIR/html_$DATE.tar.gz” -C /var/www html
        • 日志(可选)

        • tar -czvf “$BACKUP_DIR/logs_$DATE.tar.gz” -C /var/log httpd
        • SSL(可选)

        • tar -czvf “$BACKUP_DIR/ssl_$DATE.tar.gz” -C /etc/pki/tls certs private
        • 数据库(按需启用)

        • mysqldump -u username -ppassword --single-transaction --routines --triggers mydb > “$BACKUP_DIR/db_$DATE.sql”

        • 清理 7 天前

        • find “$BACKUP_DIR” -type f -name “*.tar.gz” -mtime +7 -delete
        • echo “Apache backup finished at $(date)” >> /var/log/apache_backup.log
  • 赋权与定时任务
    • 赋权:sudo chmod +x /usr/local/bin/backup_apache.sh
    • 每天 02:00 执行并记录日志:
      • 0 2 * * * /usr/local/bin/backup_apache.sh >> /var/log/apache_backup.log 2>&1
  • 远程备份(可选)
    • 使用 rsync 将当日归档同步到远程存储:
      • rsync -avz --delete /backup/apache/ user@remote:/backup/apache/
  • 说明
    • 脚本中数据库备份行默认注释,启用前请填写用户名/密码/数据库名;如启用,建议将凭据写入受控的 ~/.my.cnf 以避免在命令行暴露密码。

四 恢复步骤

  • 准备
    • 建议先停止 httpd 以避免写入冲突:sudo systemctl stop httpd
    • 如当前环境仍可用,先对现有配置与数据做一次临时备份(可选)
  • 恢复配置
    • 解压配置归档到根目录(保持目录结构一致):
      • sudo tar -xzvf /backup/apache/conf_YYYY-MM-DD.tar.gz -C /
  • 恢复网站文件
    • 解压网站归档到 /var/www(示例为 html):
      • sudo tar -xzvf /backup/apache/html_YYYY-MM-DD.tar.gz -C /var/www
  • 恢复日志(可选)
    • 如需保留历史日志:
      • sudo tar -xzvf /backup/apache/logs_YYYY-MM-DD.tar.gz -C /var/log
  • 恢复 SSL 证书(可选)
    • 如备份包含 SSL:
      • sudo tar -xzvf /backup/apache/ssl_YYYY-MM-DD.tar.gz -C /etc/pki/tls
  • 恢复数据库(如适用)
    • 先创建空库(如需要),再导入:
      • mysql -u username -p mydb < /backup/apache/db_YYYY-MM-DD.sql
  • 校验与启动
    • 语法检查:sudo apachectl configtest
    • 启动服务:sudo systemctl start httpd
    • 访问站点验证页面与功能;如异常,查看 /var/log/httpd/error_log 定位问题。

五 备份策略与验证建议

  • 策略选择
    • 结合业务容忍度选择完全备份增量备份差异备份:完全备份恢复简单但占用大;增量备份占用小但恢复链路长;差异备份介于两者之间。可按周做完全备份、日内做增量/差异备份的组合。
  • 验证与演练
    • 定期在非生产环境进行恢复演练,校验备份的完整性与可用性;对关键站点建议保留多份异地/离线副本。
  • 远程与离线存储
    • 通过 rsync/scp 将备份同步到远程服务器离线介质,提升容灾能力;重要归档可再做一次校验和存档。

0