CentOS 上备份 Apache 的实用方法
一 备份范围与关键路径
- 配置文件:主配置 /etc/httpd/conf/httpd.conf;虚拟主机与附加配置 /etc/httpd/conf.d/*.conf;若使用 SSL/TLS,一并备份证书与密钥(常见在 /etc/pki/tls/ 或站点配置中指定的目录)。
- 网站内容:DocumentRoot,常见为 /var/www/html,如自建站点请替换为你的实际目录。
- 日志文件:访问与错误日志 /var/log/httpd/(可按需备份,避免占用过大空间)。
- 数据库:如网站使用 MySQL/MariaDB 或 PostgreSQL,需单独备份数据库(与 Apache 分开管理)。
二 手动备份步骤
- 备份配置
- 打包主配置与虚拟主机配置:
sudo tar -czvf /backup/apache-conf_$(date +%F).tar.gz -C /etc/httpd conf conf.d
- 或单文件拷贝备份(便于快速回滚):
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
sudo cp /etc/httpd/conf.d/*.conf /backup/conf.d_$(date +%F)/
- 备份网站内容
- 打包站点目录(将 /var/www/html 替换为你的 DocumentRoot):
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
- 备份数据库(如适用)
- MySQL/MariaDB:
mysqldump -u root -p --single-transaction --routines --triggers --databases your_db > /backup/db_$(date +%F).sql
- PostgreSQL:
pg_dumpall -U postgres > /backup/pg_all_$(date +%F).sql
- 说明
- 以上命令中的 $(date +%F) 生成 YYYY-MM-DD 时间戳,便于版本管理;如你的系统使用 MariaDB,命令与 MySQL 相同。
三 自动化备份脚本与定时任务
- 示例脚本(/usr/local/bin/backup_apache.sh):
- 功能:打包配置、站点、日志;可选 rsync 到远端;记录日志;按保留天数清理旧备份。
- 使用前请先创建本地备份目录(如 /backup/apache),并确保有写入权限。
#!/bin/bash
BACKUP_BASE="/backup/apache"
DATE=$(date +%F)
KEEP_DAYS=7
mkdir -p "$BACKUP_BASE/$DATE"
tar -czf "$BACKUP_BASE/$DATE/conf_$DATE.tar.gz" -C /etc/httpd conf conf.d 2>/dev/null
DOCROOT="/var/www/html"
[ -d "$DOCROOT" ] && tar -czf "$BACKUP_BASE/$DATE/html_$DATE.tar.gz" -C "$DOCROOT" . 2>/dev/null
[ -d /var/log/httpd ] && tar -czf "$BACKUP_BASE/$DATE/logs_$DATE.tar.gz" -C /var/log httpd 2>/dev/null
echo "[$DATE] Apache backup completed." >> "$BACKUP_BASE/backup.log"
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +$KEEP_DAYS -exec rm -rf {} \;
- 赋予执行权限并测试
- chmod +x /usr/local/bin/backup_apache.sh
- /usr/local/bin/backup_apache.sh
- 添加定时任务(每天 02:00 执行)
- crontab -e
- 0 2 * * * /usr/local/bin/backup_apache.sh
- 如需邮件通知,可在脚本末尾加入(需系统已配置邮件发送能力):
- echo “Apache backup completed at $(date)” | mailx -s “Apache Backup OK” admin@example.com
四 恢复步骤
- 恢复配置
- 单文件回滚:
sudo cp /backup/conf.d_YYYY-MM-DD/httpd.conf.bak /etc/httpd/conf/httpd.conf
或解压配置包:
sudo tar -xzvf /backup/apache-conf_YYYY-MM-DD.tar.gz -C /etc/httpd
- 恢复网站内容
- 解压覆盖站点目录(请先做好当前站点备份):
sudo tar -xzvf /backup/apache-html_YYYY-MM-DD.tar.gz -C /var/www/html
- 恢复日志(可选)
- sudo tar -xzvf /backup/apache-logs_YYYY-MM-DD.tar.gz -C /var/log
- 使配置生效
- 检查语法并重启:
sudo httpd -t && sudo systemctl restart httpd
- 恢复数据库(如适用)
- MySQL/MariaDB:mysql -u root -p < /backup/db_YYYY-MM-DD.sql
- PostgreSQL:psql -U postgres -f /backup/pg_all_YYYY-MM-DD.sql
五 最佳实践与注意事项
- 分层与保留:本地“热”备份保留近 3 天,归档“冷”备份保留近 30 天;为备份文件名加入 时间戳,便于追溯。
- 监控与告警:监控备份目录容量,若连续 3 天无增长触发告警;在对象存储侧配置 生命周期规则 自动清理过期备份。
- 版本控制:用 Git 管理配置文件目录(如 /etc/httpd/conf.d),每次变更提交并注释说明。
- 安全与传输:证书与密钥权限设为 600;远端同步优先使用 SSH;备份完成后执行 httpd -t 校验配置,再重启服务。
- 空间与性能:日志文件可能很大,可按需归档或排除;数据库使用 –single-transaction 减少锁影响。