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 将备份同步到远程服务器或离线介质,提升容灾能力;重要归档可再做一次校验和存档。